¿Qué algoritmos y estructuras de datos se utilizan más en problemas del mundo real y software de producción?

He estado trabajando como desarrollador de software durante 11 meses y solo he encontrado matrices, conjuntos, diccionarios, colas y un árbol o gráfico ocasional.

En cuanto a los algoritmos, además de la clasificación básica, la eliminación de duplicados, he incursionado un poco en algoritmos de aprendizaje automático como árboles de decisión, modelos ocultos de Markov. Una vez que apliqué el algoritmo Depth First Search con algunas heurísticas para el reconocimiento óptico de caracteres.

Principalmente trabajando en desarrollo web, rara vez he implementado una estructura de datos avanzada desde cero y hay varias herramientas y bibliotecas para ayudarlo con algoritmos y estructuras de datos comunes, como Redis para colas y diccionarios. Dudo que alguien implemente Red-Black Trees o Tries desde cero. Dicho esto, es fundamental estar familiarizado con tantas estructuras de datos y algoritmos como nunca se puede saber qué necesitará y dónde.

Los lenguajes de programación a menudo tienen influencia sobre las estructuras de datos de los programadores. Por ejemplo, en algunos idiomas, las listas ni siquiera existen. Pero en Lisp, revertir una lista vinculada es tan simple como escribir (lista inversa) porque el lenguaje es totalmente compatible con las listas.

Si un programador solo conoce un idioma, puede adaptar fácilmente su pensamiento a las construcciones disponibles, de ahí los síntomas que menciona. Y algunos lenguajes de programación se pueden transformar fácilmente para admitir nuevas construcciones, otros no son tan indulgentes.

Personalmente encuentro toneladas y toneladas de matrices de varios tipos de cosas (a menudo unidimensionales) y, más raramente, algunas tablas hash cuando necesitas buscar algo rápidamente y con frecuencia. La mayoría de los datos están en tablas SQL.

Realmente no recuerdo ninguna vez que me encontré con algo que realmente requería una lista enlazada o algo así, pero en realidad no hice todo lo necesario, construí una araña web + motor de búsqueda en un trabajo anterior y algunos negocios (contabilidad) aplicaciones en la actual más mantenimiento de aplicaciones comerciales antiguas. Hay muchos otros campos con los que no he tenido contacto en absoluto, por lo que no puedo hablar de con qué “la mayoría” están en contacto. En verdad, la contabilidad y las aplicaciones comerciales similares son realmente muy mundanas.

Para todo lo que aprende en los algoritmos, hay una razón y situaciones en las que xyz es aplicable, así que no lo descarte como no importante, si está pensando en ese sentido.

Las estructuras de datos más comunes que he encontrado son matrices, listas de matrices, conjuntos y tablas de hash / mapas de hash. Algunas estructuras de datos rara vez se usan en el entorno de producción, además no es necesario implementarlo usted mismo, ya que las estructuras de datos más comunes están disponibles como API en lenguajes de programación como C ++ y Java, esa es la razón por la cual la mayoría de los programadores tienen dificultades para revertir una lista vinculada .