Cómo aprender qué algoritmo usar en un conjunto de problemas en particular

Es una mezcla de intuición (1), experiencia (2), notar patrones similares en problemas (3), conocer un conjunto diverso de algoritmos (4), conocer las clases de algoritmos (5), conocer la historia (6) de algoritmos (por qué necesitaban ser descubiertos es la misma razón por la que los necesita), y conocer bien sus idiomas de elección (7) para que sepa qué utilidades le brindan.

Te daré un ejemplo de cómo es esto. En mi tercer año en la universidad, a los estudiantes del segundo año se les asignó una tarea para implementar la codificación y decodificación Huffman. Les dije a dos de ellos: puedo hacer todo tu proyecto (menos la reseña) en treinta minutos. Ellos también lo intentaron.

Lo que hizo que Huffman Encoding fuera un descubrimiento único fue que Huffman se dio cuenta de que era más fácil construir el árbol de codificación de abajo hacia arriba que de arriba hacia abajo al tomar los subárboles menos utilizados en cada paso (6), su profesor había fallado en cada paso de arriba hacia abajo construcciones Para implementarlo de manera eficiente y rápida, necesitaba una estructura de datos de la que pueda recuperar el elemento más pequeño (no elementos) de (3). ¡Un montón mínimo hace eso (3)! En Java, su implementación de montón se llama PriorityQueue (7). Con esos puntos, lo más avanzado que necesitaba hacer era implementar un árbol simple, un comparador para la Cola y algo de escritura / lectura de archivos (2).

Tuve tiempo de sobra. En Graph Theory (un curso de matemáticas), (5) y (4) es útil si no conoce una solución, no puede pensar en una, por lo que solo tiene que repetir si “¿Funciona?”