Un buen desempeño en la competencia de programación no se trata solo de cuántos algoritmos conoces. También se trata de practicar, la capacidad de pensar en el acto y encontrar una solución. Dicho esto, hay una amplia gama de algoritmos que pueden ser útiles para lograr tal tarea. Los siguientes son los que creo más útiles:
- Algoritmos gráficos: BFS, DFS, Dijsktra, Floyd-Warshall, Bellman-Ford, MST (Prim y kruskal), descomposición de luz pesada, SCC y Euler Tour.
- Algoritmos de flujo: flujo máximo, flujo mínimo, flujo máximo, coincidencia bipartita máxima y algoritmo húngaro
- Programación dinámica
- Geometría
- Teoría de los números: MCD, LCM, Euclidiana extendida, función totient de Euler, tamiz de Eratóstenes y Comprobaciones probabilísticas de primalidad.
- Algoritmos de cadena: KMP, Boyre Moore, Z-Function y Aho-Corasik
- Estructura de datos de cadena: matrices y intentos de sufijos.
- Estructuras de datos avanzadas: árboles de segmentos, árboles indexados binarios, Treaps y listas de salto.
- Juegos combinatorios: Nim Game y Grundy Numbers.
- Retroceso y poda.
- Encontrarse en el medio.
Podría agregar a la lista si recuerdo algo.
- ¿Qué son las estructuras de datos y los algoritmos en Java?
- ¿Cuáles son algunos avances en ciencias de la computación realizados por científicos mientras trabajaban en la industria?
- ¿Cuál es la elección ideal de algoritmos, bibliotecas en PNL y aprendizaje automático para construir un bot de chat?
- ¿Cómo empiezo a aprender o fortalecer mi conocimiento de las estructuras de datos y algoritmos?
- Si podemos ordenar datos usando SQL, ¿por qué necesitamos estudiar diferentes algoritmos de ordenación?