Depende de la pregunta: ¿para qué objetivo? Un ejemplo de una lista de cosas que sería el mínimo requerido que elegiría (muy arbitrariamente) podría incluir:
1. Búsqueda binaria y una buena capacidad para usarla, en particular para crear soluciones para buscar el resultado de un problema que desea resolver.
2. Comprender la programación dinámica y poder crear sus propias soluciones de programación dinámica. Probablemente esto incluiría conocer algunos algoritmos DP básicos, como la subsecuencia común más larga, pero realmente lo importante es poder crear su propio algoritmo similar a LCS, etc., no necesariamente recordar LCS, etc.
- ¿Cómo diferenciar entre algoritmos de clasificación internos y externos en términos simples? ¿Cómo se lo explica a los principiantes?
- ¿Hay alguna diferencia entre los algoritmos estocásticos y los probabilísticos?
- ¿Por qué la complejidad temporal no devuelve el tiempo de ejecución exacto de un algoritmo?
- ¿Cuál es tu recurso favorito para aprender sobre programación competitiva?
- ¿Cómo están sucediendo los campos de entrenamiento de algoritmos?
(2b. Posiblemente lo mismo podría decirse de los codiciosos algoritmos , estoy a punto de incluirlos en esta lista de las cosas más básicas, pero seguramente están cerca. Además, son muy fáciles).
3. Conocer algoritmos básicos de gráficos y árboles como DFS, BFS, clasificación topológica. Conocer la existencia de algoritmos como Strongly Connected Components, Dijkstra, Ford-Bellman para saber qué buscar en Google si lo necesita.
4. Los algoritmos de clasificación no son realmente tan útiles en este nivel (al menos: hay docenas de formas más útiles que no llegaron a mi lista), pero como se consideran “un canon”, debe esperar a los entrevistadores en varias empresas asumirán el conocimiento del tema a un nivel decente, incluso si esto no fuera realmente útil aparte de la etapa de entrevista.
5. Estructuras de datos . No necesita recordar los detalles de la implementación, porque ya están implementados para usted en las bibliotecas, pero debe conocer los conceptos básicos de los conceptos subyacentes para poder responder preguntas sobre el uso de ellos como “En nuestro proyecto reciente, tenía que hacer ………………. ¿Usaría un TreeMap o un HashMap para esta tarea, cuáles serían los pros y los contras? ”
Pero, de nuevo, esta lista realmente no se aplicaría en una variedad de situaciones en función de para qué necesita esta respuesta. Si desea postularse para las mejores compañías como Google, Facebook, Microsoft, etc., que se centran mucho en algoritmos en sus entrevistas, debe saber más (y / o ?: ser mucho más experto con lo que ya sabe), si es que sobre cualquier tipo de especialidad teórica, debe saber mucho más que solo esta lista, etc. Por otro lado, incluso algunos de estos pueden no ser útiles para usted en su trabajo en función de lo que estará haciendo, sabiendo que algunos algoritmos no incluidos aquí lo ayudarían. Pero esto es lo que personalmente (sin ninguna autoridad) considero los conceptos más básicos que todo estudiante debe saber.