¿Cuáles son los algoritmos significativos para la humanidad en las últimas décadas? [cerrado]

40

¿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 ...

Amir Rezaei
fuente
2
Se está cerrando porque (hasta ahora) cuatro personas lo consideran "no es una pregunta real", probablemente porque no tenemos una idea real de cuál es, de forma aislada, un algoritmo de programación importante.
David Thornley
2
Puede estar fuera de tema, pero es una pregunta real.
Jeremy
1
+1 Buena pregunta. Sugiero volver a preguntar esto en cstheory.stackexchange.com
Aleksandr Levchuk el
1
¿Por qué respondes tus propias preguntas? ¿Varias veces?
2
Sin respuestas incorrectas + número ilimitado de respuestas + un comentario inequívoco que pide "uno por respuesta" + el autor publica varias de sus propias respuestas = caso de libro de texto de una pregunta no constructiva. Sé que es viejo, pero cerremos esto.
Aaronaught

Respuestas:

59

El cifrado de clave pública / privada es bastante importante. El comercio por Internet no sería tan omnipresente sin él.

Jeremy
fuente
44
+1 y para agregar a su respuesta, RSA.
Sange
Hay todo un grupo de algoritmos y mejores prácticas involucrados en convertir los códigos criptográficos (como RSA) en soluciones prácticas.
Donal Fellows
37

Algoritmo de Dijkstra

El algoritmo existe en todos los enrutadores del mundo, para identificar la mejor ruta entre dos nodos en una red.

Amir Rezaei
fuente
¿Estás seguro? La mayoría de los enrutadores saben que el número IP le pertenece y lo reenvía a la máquina en la red local, o conocen un enrutador que conoce mejor, el enrutador predeterminado, en cuyo caso el paquete va a ese enrutador. Los grandes enrutadores pueden saber que para el rango de direcciones IP X1-Y1 el paquete debe ir al enrutador R1, para el rango X2-Y2 el paquete debe ir al enrutador R2, etc. No hay ningún algoritmo de Dijkstras involucrado en esto.
2
@ Thorbjørn Ravn Andersen: Pero para que el enrutador conozca esa información, alguien en algún momento habría tenido que usar el algoritmo de Dijkstra. Sí, no se usa para enrutar realmente cada paquete individual, pero se usa para determinar las tablas de enrutamiento en grandes redes. +1.
Billy ONeal
@Billy, ¿dónde exactamente esperarías que el algoritmo de Dijkstra se use realmente y por quién?
@ Thorbjørn Ravn Andersen: Según tengo entendido, juega un papel en OSPF, que es la base para elegir las rutas correctas para redes pequeñas. Las conexiones entre redes más grandes usan BGP, que se basa más en políticas. No estoy seguro de si BGP usa el algoritmo de Dijkstra o no.
Billy ONeal
3
@Billy, pero mi objeción fue "existe en CADA router en el mundo". Eso es, en mi opinión, claramente incorrecto.
30

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 .

Una transformación rápida de Fourier (FFT) es un algoritmo eficiente para calcular la transformación de Fourier discreta (DFT) y su inversa.

Amir Rezaei
fuente
44
Una vez tuve un jefe que, décadas antes, había escrito una serie de funciones FFT para el PDP-11. Vendió una baraja de tarjetas perforadas con esas funciones con un anuncio en la parte posterior de Popular Science e hizo un banco bastante serio. Evidentemente, tenía personas que usaban su código para todo, desde el procesamiento de señales hasta la predicción del mercado de valores.
Dan Ray
26

Rango de página

PageRank es un algoritmo de análisis de enlaces, llamado así por Larry Page, utilizado por el motor de búsqueda de Google en Internet que asigna una ponderación numérica a cada elemento de un conjunto de documentos con hipervínculos, como la World Wide Web, con el propósito de "medir" su relación importancia dentro del conjunto.

Amir Rezaei
fuente
jaja, nuestras respuestas fueron solo 2 segundos de diferencia, lo siento :)
Maksee
¡no hay problema! :)
Amir Rezaei
36
Nunca me di cuenta de que lleva el nombre de Larry Page. Siempre supuse que el nombre tenía algo que ver con las páginas web.
JohnFx
1
@JohnFx Whoa, no es broma!
Mark C
+1: ¿pero puede calificar si el algoritmo real no es conocido por la humanidad? (IIRC wikipedia es una aproximación)
Steven Evers
22

Algoritmos de compresión de datos

En la ciencia de la computación y la teoría de la información, la compresión de datos o la codificación de fuente es el proceso de codificación de información utilizando menos bits (u otras unidades portadoras de información) que una representación no codificada utilizaría, mediante el uso de esquemas de codificación específicos.

Amir Rezaei
fuente
2
Exactamente y creo que el algoritmo de compresión básico LZW puede considerarse uno de los algoritmos más bellos en ingeniería de software.
mojuba
"si es posible, proporcione el nombre del algoritmo específico"
14

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.

revs Aleksandr Levchuk
fuente
Hola y bienvenidos a los programadores! Es posible que desee dividir esta respuesta en una para cada uno de los algoritmos que está presentando aquí, como es habitual para las preguntas de la lista como esta para facilitar la votación y la clasificación.
Yi Jiang el
@Yi Jiang: ¡Mi panteón! Leí mal su comentario como "facilitar el vómito". : - /
Dr. Hannibal Lecter
Aquí
defiendo
13

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 .

jason
fuente
1
A esta lista, agregaría 2 libros, aunque eran más sobre los "teoremas más importantes" del siglo XX: Cinco Reglas de Oro amazon.com/Five-Golden-Rules-20th-Century-Mathematics/dp/… , y Cinco reglas de oro más. amazon.com/Five-More-Golden-Rules-20th-Century/dp/0471395285
Tangurena
Las técnicas de Monte Carlo todavía se utilizan, más o menos en la forma original. Esto también es cierto para FFT y Quicksort. La mayoría del resto simplemente no estoy familiarizado. El método Simplex para LP no escala bien, en comparación con los métodos más modernos.
David Thornley
9

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.

Maksee
fuente
9

Si tuviera que enumerar los 3 algoritmos más importantes en uso hoy en día en las computadoras, diría:

  1. Búsqueda binaria
  2. Ordenación rápida
  3. Algoritmo de Dijkstra

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.

Orbling
fuente
La búsqueda binaria tendría que ser muy, muy antigua ... Quiero decir, se formuló 'en el pasado' y estaba en una 'década', pero habría existido durante cientos de años.
Kirk Broadhurst
@Kirk Broadhurst: Aún así, es un algoritmo increíblemente importante para las computadoras. Independientemente de cuando un humano lo concibió por primera vez.
Orbling
8

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.

JohnFx
fuente
Le daría un pulgar hacia arriba, pero este es un teorema (uno de los mejores) y no un algoritmo. Sin embargo, muchos algoritmos se basan en este teorema.
Amir Rezaei
Solo estaba tratando de agruparlos en una categoría general de algoritmos, pero técnicamente estás en lo correcto.
JohnFx
@AmirR Técnicamente correcto, el mejor tipo de correcto!
Mark C
7

TimSort

Este es el algoritmo de clasificación que ahora se usa en Python , Java 7 y Android

Básicamente:

  • O (N log N) peor de los casos (no se degenera)
  • O (N) para la lista casi ordenada (de hecho, N-1exactamente 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 ++ ...

Matthieu M.
fuente
No puede ser Θ (NlogN), ya que tiene ese mejor comportamiento en una lista ya ordenada. O (NlogN) es la notación correcta aquí.
Donal Fellows
Si bien este es bueno, ciertamente no lo llamaría "uno de los mejores algoritmos inventados en las últimas décadas". Mergesort, en el que se basa Timsort, es el verdadero logro.
Billy ONeal
6

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

El algoritmo del pintor, también conocido como relleno de prioridad, es una de las soluciones más simples para el problema de la visibilidad en los gráficos 3D por computadora. Al proyectar una escena 3D en un plano 2D, es necesario en algún momento decidir qué polígonos son visibles y cuáles están ocultos.

Z-buffering

En gráficos de computadora, el almacenamiento en búfer z es la gestión de coordenadas de profundidad de imagen en gráficos tridimensionales (3-D), generalmente realizados en hardware, a veces en software. Es una solución al problema de visibilidad, que es el problema de decidir qué elementos de una escena renderizada son visibles y cuáles están ocultos. El algoritmo del pintor es otra solución común que, aunque menos eficiente, también puede manejar elementos de escena no opacos. El buffer Z también se conoce como buffer de profundidad.

Determinación de superficie oculta

En los gráficos 3D por computadora, la determinación de superficie oculta (también conocida como eliminación de superficie oculta (HSR), eliminación de oclusión (OC) o determinación de superficie visible (VSD)) es el proceso utilizado para determinar qué superficies y partes de superficies no son visibles desde cierto punto de vista Un algoritmo de determinación de superficie oculta es una solución al problema de visibilidad, que fue uno de los primeros problemas importantes en el campo de los gráficos 3D por computadora. El proceso de determinación de superficie oculta a veces se llama ocultación, y dicho algoritmo a veces se llama ocultador. El análogo para el renderizado de líneas es la eliminación de líneas ocultas. La determinación de la superficie oculta es necesaria para renderizar una imagen correctamente, por lo que no se puede mirar a través de las paredes en la realidad virtual, por ejemplo.

Dane
fuente
3

Cualquiera que necesite para resolver su problema actual.

mipadi
fuente
1
Eso es lo que iba a decir. Ahora no tengo que decirlo.
Robert Harvey
Lo que no sea una buena respuesta. Cualesquiera algoritmos no son significativos para la humanidad.
Amir Rezaei
66
Este no es un algoritmo específico e incluso si lo fuera, probablemente no sea importante para la humanidad.
Jason
3

Soundex es un algoritmo fonético para indexar nombres por sonido.

sal
fuente
¿Cómo contribuyó soundex a la humanidad?
barjak
Mejoró la capacidad de usar el lenguaje natural, corrigiendo las diferencias menores de ortografía y pronunciación regional.
sal
3

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.

Giacomo Verticale
fuente
El algoritmo de +1 Viterbi es muy importante. @ [Giacomo Verticale] tal vez debería mencionar su relación con Hidden Markov Models (HMMs).
Aleksandr Levchuk
3

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".

Jens Hoffmann
fuente
3

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.

ja72
fuente
+1 @ j172 Lo sé, es realmente útil en análisis numéricos y simulaciones.
Amir Rezaei
2

Algoritmo de clasificación.

tia
fuente
55
sin embargo, este no es un algoritmo específico ...
Justin L.
Sí, lo que dijo Justin L., ¿qué algoritmo de clasificación?
Dr. Hannibal Lecter
El "algoritmo específico" debe ser mergesort, el primero de los n lg n géneros.
Billy ONeal
2
@dr Hannibal Lecter: Bubble Sort, por supuesto. Todo lo demás es optimización prematura.
peterchen
2

Ordenación rápida

revs ysolik
fuente
1
¡Qué asco! Ciertamente espero que la gente no esté usando QuickSort en el código de producción. Más importante aún, mergesort llegó antes y es casi tan rápido. (Esperemos que la mayoría del código use alguna variante en Introsort)
Billy ONeal
2
@Billy ONeal, ordenar en .NET es todo Quicksort. Entonces, cualquier programa que llame a List <T> .Sort () usa quicksort en producción.
Steven Evers
@SnOrfus: ¿Tienes prueba de esa declaración? Según tengo entendido, List <t> .Sort se basa en introsort.
Billy ONeal
3
@Billy ONeal: directamente desde msdn - msdn.microsoft.com/en-us/library/b0zbh7b6.aspx
ysolik
3
@ Thorbjørn: Todavía no es un buen algoritmo de propósito general. Introsort es quicksort, pero cambia a clasificación de montón si va más allá de una profundidad de recursión dada. Esto le permite a uno tener las buenas características de la clasificación rápida, pero siempre evita los casos patológicos, incluso si el algoritmo elige pivotes malos.
Billy ONeal
1

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).

Oliver Weiler
fuente
1

Gauss-Jordan en computación matricial

xport
fuente
1

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.

John R. Strohm
fuente
0

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.

Malfist
fuente
55
-1: Los algoritmos se pueden expresar usando lenguaje natural, pero los lenguajes naturales no son algoritmos.
Steven Evers
2
¿Diría que los algoritmos de compresión no son algoritmos entonces? Todo lo que hace el lenguaje es comprimir información que se transmite de una fuente a una receptiva. Tiene reglas específicas que deben seguirse (gramática) al igual que cualquier otro algoritmo, y toma una entrada (sus experiencias) y produce una salida diferente (conocimiento). No veo cómo no puedes considerar el lenguaje como un algoritmo.
Malfist
Falla en todas las definiciones estándar de algoritmo en muchos frentes.
James reinstala a Monica Polk el
0

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.

James reinstala a Monica Polk
fuente
0

Algoritmos de indexación como B-tree, B + -tree, hash index, binary tree index, etc. Para indexar una gran cantidad de datos.

xyz
fuente
0

MapReduce como una forma de dividir, conquistar y paralelizar el procesamiento de grandes conjuntos de datos.

Jay Elston
fuente
-1

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!

xport
fuente
55
Eso no es un algoritmo. Es una especie de algoritmos.
Adam Lear
Es un método para romper el cifrado.
Amir Rezaei
Creo que también está categorizado como un algoritmo. "Comienza de x a y haz algo". <--- algoritmo ¿verdad?
xport
Un algoritmo es una serie de pasos para realizar una tarea específica . Eso no es específico.
Anto
-5

Ordenamiento de burbuja !

El tipo de burbuja no es tan malo como Bogosort . Por eso voto por el tipo Bubble.

xport
fuente
1
Considere indicar por qué el algoritmo es significativo e importante, las personas parecen estar en desacuerdo sobre por qué Bubble Sort podría ser significativo e importante.
Tamara Wijsman
55
Incluso Barack Obama sabe que el tipo de burbuja es el camino equivocado .
Joey Adams
@TomWij, @Joey: mira mi actualización.
xport