¿Qué algoritmos más importantes del mundo han contribuido más a la humanidad en las últimas décadas?
Pensé que este es un buen conocimiento general para un desarrollador.
Actualización:
si es posible, guarde la respuesta a un algoritmo de programación específico .
Me gustaría obtener una lista de los más importantes, solo un algoritmo por respuesta.
Considere indicar por qué el algoritmo es significativo e importante ...
algorithms
problem-solving
knowledge
Amir Rezaei
fuente
fuente
Respuestas:
El cifrado de clave pública / privada es bastante importante. El comercio por Internet no sería tan omnipresente sin él.
fuente
Algoritmo de Dijkstra
El algoritmo existe en todos los enrutadores del mundo, para identificar la mejor ruta entre dos nodos en una red.
fuente
Transformada rápida de Fourier (FFT)
El FFT es un método extremadamente importante y ampliamente utilizado para extraer información útil de las señales muestreadas .
fuente
Rango de página
fuente
Algoritmos de compresión de datos
fuente
Smith-Waterman (y Needleman-Wunsch)
Esto puede ser demasiado descabellado, así que por favor comente.
Smith-Waterman: el algoritmo de alineación de secuencias
Creo que uno de esos ejemplos son los algoritmos Smith-Waterman y Needleman-Wunsch y sus aproximaciones. Todos ellos están esencialmente haciendo lo mismo: alinean dos o más cadenas (secuencias) . Hay un significado en biología. Cuando las secuencias de ADN o proteínas están alineadas, se revelan regiones de similitud estructural, funcional y evolutiva.
BLAST como descendiente de Smith-Waterman
Una heurística que se aproxima a Smith-Waterman es BLAST. Permite buscar secuencias de grandes bases de datos para similitud biológica. La popularidad de BLAST es realmente genial: es muy probable que sea el algoritmo más utilizado en biología. Las áreas más nuevas en Bioinformática y Genómica tienen aproximaciones más nuevas y mejores de los algoritmos Smith-Waterman / Needleman-Wunsch que son más precisos que BLAST.
Asamblea del genoma como descendiente de Smith-Waterman
Las aproximaciones de alto rendimiento de Smith-Waterman y Needleman-Wunsch que son más rápidas que BLAST se utilizan para ensamblar Genomas a partir de la secuencia de escopeta, donde el producto de la máquina secuenciadora es una gran cantidad de lecturas de ADN (miles de millones) de partes arbitrarias del Genoma que son muy corto (50 a 100 nucleótidos). El enfoque se utilizó para completar el Proyecto Genoma Humano. Toda la secuencia moderna se realiza de esta manera.
Alineación de secuencia múltiple, una extensión de Smith-Waterman
Existen numerosos algoritmos de alineación de secuencia múltiple: se están aproximando a una versión de secuencia múltiple de Smith-Waterman / Needleman-Wunsch. Múltiples secuencias se alinean como un grupo simultáneamente entre sí. Es un problema mucho más difícil que su contraparte en pares, pero las soluciones proporcionan una visión mucho más profunda de la función biológica, la estructura y el historial evolutivo de secuencias relacionadas.
fuente
Siam nombró los siguientes algoritmos más importantes del siglo XX:
1946: El algoritmo de Metrópolis para Montecarlo . Mediante el uso de procesos aleatorios, este algoritmo ofrece una forma eficiente de encontrar respuestas a problemas que son demasiado complicados para resolverlos con exactitud.
1947: Método simplex para programación lineal . Una solución elegante a un problema común en la planificación y la toma de decisiones.
1950: Método de iteración del subespacio de Krylov . Una técnica para resolver rápidamente las ecuaciones lineales que abundan en la computación científica.
1951: El enfoque de descomposición de los cálculos matriciales . Un conjunto de técnicas para álgebra lineal numérica.
1957: El compilador de optimización de Fortran . Convierte el código de alto nivel en un código eficiente legible por computadora.
1959: Algoritmo QR para calcular valores propios . Otra operación de matriz crucial se hizo rápida y práctica.
1962: Algoritmos de clasificación rápida para ordenar . Para el manejo eficiente de grandes bases de datos.
1965: Transformada rápida de Fourier . Quizás el algoritmo más ubicuo en uso hoy en día, descompone las formas de onda (como el sonido) en componentes periódicos.
1977: Detección de relación de enteros . Un método rápido para detectar ecuaciones simples satisfechas por colecciones de números aparentemente no relacionados.
1987: Método multipolar rápido . Un avance en el tratamiento de la complejidad de los cálculos de n cuerpos, aplicado en problemas que van desde la mecánica celeste hasta el plegamiento de proteínas.
Personalmente, reemplazaría la detección de relación de enteros con PageRank .
fuente
PageRank, lo amas o lo odias, pero afecta las decisiones y acciones de millones de personas en todo el mundo que buscan en Google a diario.
fuente
Si tuviera que enumerar los 3 algoritmos más importantes en uso hoy en día en las computadoras, diría:
El algoritmo de búsqueda binaria se usa constantemente para limitar un elemento dentro de una lista ordenada, la mayoría de las búsquedas de índice usarán algo en este sentido en algún momento. Este algoritmo proporciona una búsqueda de una lista ordenada en tiempo o (log n).
El algoritmo Quicksort finalmente logró clasificarlo en O (n log n) caso promedio y O (n ^ 2) peor caso. La clasificación es una de las tareas de datos más comunes en una computadora y una de las más caras, mejorar la clasificación de casos promedio fue un gran paso adelante en eficiencia.
El algoritmo de Dijkstra, como se ha dicho, produce un camino más corto entre los puntos dentro de un gráfico. Esto se usa ampliamente para todo tipo de aplicaciones de enrutamiento, más ampliamente con respecto a Internet en sí mismo, asegurando que se use la ruta más rápida a través de la red enredada de enrutadores interconectados.
fuente
Teorema de Bayes
Probablemente ha contribuido más a mantener la cantidad de spam que pierde tiempo en mi bandeja de entrada a un nivel manejable.
Por supuesto, creo que se ha utilizado en muchas otras aplicaciones que valen la pena, pero matar el spam es mi favorito.
fuente
TimSort
Este es el algoritmo de clasificación que ahora se usa en Python , Java 7 y Android
Básicamente:
N-1
exactamente en la lista ya ordenada)¿Y la belleza de eso? Es estable ! Y por lo tanto, adecuado para la clasificación de múltiples pasos de acuerdo con varios criterios.
Por cierto, si alguien tiene a mano una implementación optimizada de C ++ ...
fuente
Todos los algoritmos que se usaron para resolver el problema de visibilidad en la animación 3D por computadora me parecen cruciales.
Algoritmo del pintor
Z-buffering
Determinación de superficie oculta
fuente
Cualquiera que necesite para resolver su problema actual.
fuente
Soundex es un algoritmo fonético para indexar nombres por sonido.
fuente
Algoritmo de Viterbi
Originalmente utilizado para decodificar códigos de corrección de errores convolucionales, ahora se utiliza para resolver una amplia clase de problemas de reconocimiento (que van desde el reconocimiento de voz hasta la bioinformática). Puede encontrarlo en varios dispositivos de comunicación y almacenamiento.
fuente
MP3
Aunque es un término más general que un algoritmo específico, mencionaría MP3 como la agregación de los diferentes algoritmos y técnicas que trabajan en cooperación para generar este formato de audio con pérdida.
Seguramente ha sido muy significativo en la "era digital".
fuente
Integración numérica Runge-Kutta . Sin ella, muchas simulaciones no serían posibles. Sin programa espacial, sin energía nuclear, sin balística, sin simulaciones deportivas, sin chalecos antibalas, sin simulación de prueba de choque, sin simulación de movimiento de fluidos, sin simulaciones de interacción química, sin edificios resistentes a terremotos ... la lista continúa.
fuente
Algoritmo de clasificación.
fuente
Ordenación rápida
fuente
Tipo de inserción
Fácil de implementar, muy rápido en listas pequeñas y utilizado en implementaciones de Merge Sort / Quicksort para acelerarlas. Es estable y funciona en O (n) en listas ordenadas (cuando se ordena en orden ascendente).
fuente
Gauss-Jordan en computación matricial
fuente
Filtro Kalman
Se usa mucho en navegación, seguimiento de objetivos (para casi cualquier sensor: radar, sonar, FLIR, ladar). Un libro de texto muestra una aplicación en un controlador de unidad de disco. Los sistemas de control robótico utilizan con frecuencia filtros Kalman.
fuente
Lenguaje hablado y escrito.
Actualmente son uno de los algoritmos más eficientes para transferir conocimiento de una cosa a otra. Sin lenguaje, la sociedad civil no podría existir, y la información no podría ser transmitida.
fuente
El montón estructura de datos del y sus algoritmos asociados para la construcción y el mantenimiento del montón.
Y muestra algo de respeto por la clasificación rápida. Incluso si no es siempre el tipo de elección, es uno de los algoritmos fundamentales en el desarrollo histórico de la informática, y es un gran vehículo para comprender la recurrencia y el análisis de algoritmos. Es hermoso, y sí, me encanta.
fuente
Algoritmos de indexación como B-tree, B + -tree, hash index, binary tree index, etc. Para indexar una gran cantidad de datos.
fuente
MapReduce como una forma de dividir, conquistar y paralelizar el procesamiento de grandes conjuntos de datos.
fuente
Algoritmo de fuerza bruta!
Muchas personas subestiman este algoritmo de fuerza bruta. En realidad, se usa principalmente para resolver problemas que no tienen patrón. Me encanta mucho!
fuente
Ordenamiento de burbuja !
El tipo de burbuja no es tan malo como Bogosort . Por eso voto por el tipo Bubble.
fuente