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.
- ¿Por qué son necesarios los algoritmos?
- ¿Por qué las computadoras solo pueden hablar en binario?
- Una función de densidad de probabilidad, f, no es cero cuando a <x 0. ¿Cuáles son las restricciones en a, by k?
- ¿Dónde puedo encontrar una comprensión realmente fácil y rápida de todas las estructuras de datos y algoritmos?
- ¿Es la prueba de primalidad Rabin-Miller más rápida que el tamiz de Eratóstenes?
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.