¿Cómo puedo aprender los algoritmos de resolución de problemas solo?

Si está buscando mejorar en la programación de concursos, etc., esta respuesta puede ser útil. Si está buscando solo cosas teóricas, probablemente no tanto.

En primer lugar, supongo que sabes cómo codificar. No espero que seas un experto, pero te sientes cómodo al codificar cosas básicas como, condiciones, funciones y comprender la recursividad, etc.

Entonces, hay algunas cosas que mencionaré que realmente me ayudaron

Participar
Participe en todos y cada uno de los concursos de codificación algorítmica a los que pueda acceder. No te preocupes por la calificación. Resolver preguntas en poco tiempo es una excelente manera de esforzarse. Los concursos como codechef tienen una ventaja diferente. Le dan suficiente tiempo para leer e implementar nuevos algoritmos que quizás no haya encontrado antes.

Algoritmos de aprendizaje
Hay ciertas cosas que definitivamente debes hacer. Una es leer los editoriales sobre los problemas que podrías y no podrías resolver durante los concursos. Si no conoce un algoritmo que mencionen, búsquelo en Google. Google es tu mejor fuente. Si solo puede resolver el problema fácil, no vaya directamente al problema difícil e intente comprenderlo de inmediato. Haz los medios primero. De esta manera no se vuelve abrumador. El mayor problema que enfrenté fue aprender a codificar los algoritmos. Para esto, sugiero mirar los códigos de otros participantes después del concurso y tratar de entenderlos. Realmente encontré el sitio web de e-maxx (MAXimal :: algo) realmente muy útil. Si usted, como yo, no entiende ruso, será un poco difícil, pero el traductor de Google funciona para más o menos la mayor parte. Tiene la mayoría de los algoritmos codificados en C ++ que puede consultar en caso de dudas. No copie, es mejor codificarlos usted mismo. Te hace más cómodo.
Otra cosa importante (si está codificando en C ++) es STL. Hazte cargo de esto. No tiene sentido revisar toda la documentación. Cuando esté leyendo el código de otra persona y se encuentre con STL, simplemente búsquelo y obtendrá algún recurso. Le sugiero que use la red de recursos de C ++. Si, por ejemplo, busca “C ++ set” en google, este suele ser el primer o el segundo resultado.
Sugeriría no abrir ningún sitio web de algoritmos y comenzar a revisarlos uno por uno. Es mejor leer como y cuando surjan.
Después de que se haya vuelto un poco competente, debe revisar los Tutoriales de Algoritmo en el sitio web de Topcoder.

Práctica
No puedo enfatizar lo suficiente sobre esto. Usted tiene que practicar. No se trata solo de resolver la pregunta en tu cabeza, sino que debes ponerte manos a la obra y codificarla. Debería poder codificar problemas sin errores de compilación. Esa fue una “prueba estándar” que establecería para mí mismo cuando codifique. ¡No debería haber ningún error de compilación!

Practica donde?
Entonces, como dije antes, participa. Aparte de eso, realmente me gusta Sphere Online Judge (SPOJ). Haga un perfil, ordene las preguntas por el número de usuarios resueltos y comience a hacer las preguntas con el máximo de usuarios resueltos Puede omitir preguntas que son triviales si lo desea. Intenta correctamente una pregunta. Si te quedas atascado, generalmente puedes buscar en Google el código del problema y habrá algunas publicaciones útiles en el blog o en los hilos del foro que te ayudarán.