¿Cuáles son algunos algoritmos que todo programador debe aprender / saber?

Sí, hay muchos de ellos. Solo enumeraré algunos que vale la pena aprender solo para comprender la técnica. La pedagogía no se trata de conocer el algoritmo en sí, sino de cómo logra sus resultados. Esto determinará la forma en que escribe el código y cómo piensa acerca de los problemas de descomposición. Entonces, el objetivo no es memorizar, el objetivo es pensar más ampliamente sobre la descomposición del problema y las soluciones.

  • Ordenar fusión : enseña la clasificación eficiente y comparativa a través de la recursividad.
  • Clasificación de ráfaga: clasificación sin comparación que es altamente eficiente. Te enseña que puedes usar creativamente la manipulación eficiente de datos para producir los efectos secundarios deseados. En este caso, construye un Trie para ordenar.
  • Árbol B de equilibrio automático : le enseña el rendimiento y la construcción de la estructura de datos para una búsqueda, inserción y eliminación de alto rendimiento. Recomendar implementación AVL
  • LCA de Tarjan : enseña la manipulación de árboles y las funciones de unión. Se puede implementar en tiempo lineal.
  • Diffie-Hellman : enseña la clave pública básica y es la introducción fundamental y fundamental a las comunicaciones seguras. Alice y Bob cambiarán tu forma de pensar sobre la comunicación y los secretos.
  • El camino más corto de Dijkstra : aquí es donde comienzas a ver algoritmos en la vida real. Las redes de carreteras, el envío, la conmutación de paquetes, la IA / costo uniforme y muchos más se pueden entender mejor al comprender este algoritmo y sus variantes.
  • Algoritmo bancario: enseña una forma elegante de pensar acerca de los diferentes actores que compiten por los recursos y cómo pensar en compartir entre ellos.
  • Tamiz cuadrático : enseña el rendimiento y la teoría de números. Una gran demostración de todas las herramientas que tienes a tu disposición para jugar con números.

Estos te ayudarán a comenzar. Algunos podrían objetar los ejemplos específicos y recomendar un algoritmo diferente en la misma familia. Eso también es bueno. Para aprender más, me enfocaría en, en orden, algoritmos de álgebra lineal y sistemas distribuidos (cualquiera de los trabajos de Leslie Lamport: Paxos, exclusión mutua). Luego, me sumergiría en algunos de los algoritmos para resolver problemas generales como el matrimonio estable, los filósofos, la promesa, etc.

Además, obtenga y lea The Art of Computer Programming de Knuth, así como A Disciple of Programming de Dijkstra. Ambos son densos y pesados ​​en matemática, y trabajan para leer, pero son fundamentales y vale la pena.

Si trabajo con usted, espero que conozca la mayoría de las estructuras de datos comunes y los algoritmos necesarios para trabajar con ellas. Listas de enlaces, tablas hash, árboles, etc. Espero que sepa algo sobre la clasificación y la búsqueda de algoritmos.

No, no quiero que puedas escribirlas, tenemos bibliotecas escritas por personas que hicieron tesis y disertaciones sobre ellas. Pero quiero que sepa lo suficiente sobre ellos para saber cuándo usar uno u otro.

Quiero que hayas estudiado algoritmos para saber cómo pensar y analizar problemas. Esto te convertirá en un mejor ingeniero de software. Sin esto, eres un codificador. Si sabe cómo pensar profundamente sobre el software, puede diseñar código y sistemas y ser un desarrollador o ingeniero.

Los algoritmos muy básicos que se enseñan a todos los novatos y que todos los programadores deben conocer son:

  • palíndromo
  • clasificación
  • buscando
  • raíz cuadrada
  • multiplicación y suma de matrices

Buen conocimiento de if, else, while, for loop.

Saber cómo definir un problema recursivamente y cómo convertir un algoritmo recursivo en un bucle son herramientas valiosas del oficio, pero creo que podrían llamarse con mayor precisión técnicas de programación que algoritmos.