¿Cuál es la forma más eficiente para que un programador sea bueno en algoritmos sin participar en competencias de programación?

Primero , debe tener claro la sintaxis del idioma que está utilizando. Incluso cuando planea enfocarse en la teoría CS, parece poco práctico enfocarse en algoritmos sin tener un lenguaje realista para expresarlos (y usar solo pseudocódigo). Cuando enseño algoritmos con C ++, veo a muchos estudiantes que no entienden los punteros, matrices, referencias, plantillas, etc. en C ++, y esto limita lo que pueden hacer en la práctica (es decir, en proyectos).

En segundo lugar , debe comprender los algoritmos estándar.
El libro Cormen-Leiserson-Rivest-Stein (3ª + ed.) Es bueno para esto (pero no explica cómo implementar nada en un idioma en particular). El TAOCP de Knuth es la opción nuclear para estudiar algoritmos; incluso si termina, tomará muchos años (también tenga en cuenta que Knuth todavía está trabajando en nuevos volúmenes).

En tercer lugar , debe comprender cómo implementar y usar algoritmos estándar con un lenguaje determinado, por ejemplo, usando el STL en C ++. El libro de Josuttis en la biblioteca estándar de C ++ (2ª ed.) Es excelente. También puede obtener un libro sobre algoritmos que muestra implementaciones de C ++, como el de Weiss (3ª ed.). Hay otras fuentes que usan Java o C #. Sin embargo, la experiencia muestra que los estudiantes que realizaron un curso basado en C ++ pueden migrar a Java y C #, pero no tan fácilmente al revés.

Cuarto , practique la resolución algorítmica de problemas. Esto es más difícil, pero el libro CLRS tiene varios ejercicios excelentes. Resuélvalos, impleméntelos y pruebe sus soluciones. También hay libros con problemas algorítmicos / de programación, incluidas preguntas de entrevistas. Debería ser fácil de encontrar en Amazon. Pero volverse bueno en la resolución algorítmica de problemas llevará tiempo.

Quinto , análisis de algoritmos. El libro CLRS también es bueno para esto.

Sexto , diseño y desarrollo de algoritmos a gran escala. Esto viene con experiencia, incluyendo mucha lectura (trabajos de investigación), probar diferentes ideas (proyectos de investigación) y / o estudios de posgrado. Probablemente más allá del alcance de su pregunta.

Actualización : en la enseñanza de algoritmos y estructuras de datos (p. Ej., En el semestre actual de la Universidad de Michigan), una herramienta extremadamente eficiente es un autocalificador . Los estudiantes envían su proyecto en línea y obtienen los resultados de las pruebas en casos de prueba ocultos en 10 minutos. Esto proporciona un ciclo de retroalimentación que de otra manera no es posible. A veces los estudiantes no pueden obtener el resultado correcto, a veces sus algoritmos / programas son demasiado lentos. Sin embargo, cuando saben cuán buena / pobre es su solución, pueden concentrarse en mejorar su solución. Si no está tomando un curso en una universidad, puede obtener un entorno similar en las competencias de programación en línea en modo de entrenamiento. Google Code Jam sería uno de esos.

Aprenda a pensar (mejor) y sumérjase en la experiencia de descubrir estos algoritmos o, lo que es más importante, los problemas que llevaron a su descubrimiento / creación.

En lugar de simplemente tratar de memorizar o diseccionar el algoritmo, busque el problema que necesitaba ser resuelto (que causó el descubrimiento / creación del algoritmo) e intente resolverlo usted mismo. Por lo general, encontrarás el algoritmo que estás tratando de dominar (mientras desarrollas músculo y experiencia creando algoritmos en lugar de buscarlos), y si no, a medida que trabajas en el problema, el algoritmo puede comenzar a ganar mucho. mas sentido.

Hay mucho que decir acerca de saturar su mente con los problemas y tomar medidas (significativas) para resolverlos antes de acostarse. Mientras duerme, la mente continuará trabajando para resolver los problemas, y puede despertarse al día siguiente asombrado de lo que ha aprendido.

Estudiar. Cuando estás cansado de estudiar: estudia más. Quizás dormir entre. Existe un recurso aparentemente interminable para que pueda encontrar material de estudio en Internet. ¡Haz buen uso de ello!

Como sugerencia de un libro, tal vez el TAOCP de Knuth, aunque es algo intenso.

More Interesting

¿Qué técnicas se utilizan para calcular las probabilidades de caída de elementos en los juegos?

Para (I = 0; I <3; I ++) fork (), ¿cómo puedo hacer un algoritmo para contar el número de procesos y mostrarlo solo una vez?

¿Cuál es el mejor método para resolver un problema de 'cuál es el siguiente número en esta secuencia'?

¿Cuál es un ejemplo interesante del patrón de red del mundo pequeño?

¿Podría dar un algoritmo que calcule la puntuación máxima de la mejor alineación de secuencia (S ', T') de S y T?

¿Cómo difieren la búsqueda lineal y binaria?

¿Cuál es la diferencia entre hashing y encriptación?

En el algoritmo de Mo, ¿por qué clasificamos las consultas primero en función del número de bloque y luego (si hay un empate) en función del punto final derecho? ¿Cuál es la intuición detrás de esto?

¿Por qué las listas enlazadas son más convenientes que las matrices en el dominio de la computación simbólica?

¿Crees que KNN tiene privilegios en comparación con otros algoritmos de aprendizaje automático porque aprende con el tiempo?

¿Se puede estafar el algoritmo de Zoopla para inflar el precio de una propiedad?

¿Cuál es la forma correcta de fusionar dos algoritmos de cifrado simples, sin causar un problema de cifrado?

¿Por qué la búsqueda es más rápida para un árbol binario que una lista vinculada?

Cómo hacer un algoritmo de filtrado basado en contenido de Python

¿Cuáles son las principales diferencias, con ejemplos, entre un algoritmo de aprendizaje profundo y un algoritmo de aprendizaje de refuerzo?