¿Qué puedo hacer para mejorar los algoritmos? Soy un programador bastante bueno, uso LeetCode y he intentado implementar estructuras de datos en lenguajes. ¿Qué más puedo hacer?

Trabaja a través de un buen libro sólido sobre análisis real o álgebra abstracta. Te garantizo que nada en el plan de estudios de licenciatura de CS será conceptualmente difícil para ti nunca más. Aún no conocerá los algoritmos, pero en este punto no tendrá problemas para trabajar con CLRS y aprenderlos sobre la marcha.

Si desea mejorar la implementación de algoritmos (especialmente bajo presión de tiempo), recomiendo participar en concursos de programación, como TopCoder o ACM-ICPC. Nunca fui bueno con ellos, pero fue una de las maneras más divertidas y emocionantes de desarrollar mis habilidades.


* Para ser claros, esta es una de las formas más difíciles de aprender algoritmos. Probablemente te llevará mucho más tiempo que pasar por CLRS justo después de tomar un curso de matemática discreta. Serás mucho mejor en matemáticas, pero es probable que sea una exageración a menos que estés haciendo un doctorado en ciencias de la computación teórica (u otro campo pesado en matemáticas).

Si realmente intenta este enfoque, le recomiendo que comience con libros más sencillos sobre álgebra y análisis en lugar de saltar directamente a Dummit y Foote.

Esto es lo que hice y recomiendo:

Libros / cursos : lea CLRS, Kleinberg-Tardos, consulte los cursos Coursera / EdX + en las mejores universidades y algunas sugerencias sobre algoritmos modernos de mi blog: Modern Algorithms o The Brave New O of the Big N

Problemas / concursos en línea : Pruebe TopCoder (individual) / ACM ICPC (excelente con 1–2 amigos) y también ver algunas competiciones de estilo ML (Kaggle, TopCoder tiene algunas en Data Science, etc.) Resuelva problemas a partir de archivos de problemas en línea.

Comunidad / amigos : lea los foros en sitios web de programación competitiva y blogs sobre algoritmos (por ejemplo, Petr Mitrichev tiene uno). Haga amigos con gente que sea buena en algoritmos y piratee en varios campamentos, etc.

Crear: Trate de pensar en nuevos problemas algorítmicos que no existían antes. Plantéalos en diversas competiciones algorítmicas.

Codifique algoritmos complejos: desarrolle un par de algoritmos realmente sofisticados a nivel de producción (con arquitectura y diseño cuidadosos, pruebas de unidad, etc.). También intente contribuir a proyectos algorítmicos de código abierto que pueda encontrar en línea.

Investigación: Lea acerca de las fronteras de la investigación en algoritmos de artículos, artículos y blogs. Intente resolver algunos de los problemas abiertos en los documentos y / o encuentre nuevas direcciones para la investigación.

Si estás estudiando algoritmos para pasar entrevistas de nivel de entrada, hay un conjunto relativamente pequeño para estudiar: construcciones centrales como árboles binarios, tablas hash, listas vinculadas, etc. Resolver problemas de entrevista es una buena manera de adquirir experiencia con eso. .

Si estás hablando de desarrollo profesional general, aprendería en el trabajo. A medida que aborda un nuevo problema, observe los algoritmos existentes en el espacio. Por ejemplo, ¿necesita almacenar un montón de registros y acceder a ellos de cierta manera? Google y revise los libros de texto de algoritmos para los algoritmos apropiados Elija uno o dos para evaluar, y luego elija entre su mejor algoritmo y estructura ya conocidos, y el mejor de los que ha investigado.

Del mismo modo, cuando esté trabajando en una nueva área o componente, intente ver qué estructuras de datos y algoritmos utilizaron, y descubra por qué. Si tiene la oportunidad, hable con la persona que implementó el código y pregunte por qué y qué más consideraron.

Con el tiempo, su conocimiento de los algoritmos aumenta sin tener que pasar demasiado tiempo fuera de las tareas normales del trabajo.