¿Cuáles son algunos de los algoritmos más ingeniosos en informática? Bonificación si el algoritmo se ejecuta en tiempo constante.

Cualquier lista como esta es implícitamente personal; Las cosas que me parecen ingeniosas pueden ser mundanas para otros.

  • Saltar listas . Si bien estos son menos importantes prácticamente de lo que desearía que fueran, los encuentro sorprendentes y hermosos; La combinación de algoritmos probabilísticos con lo que efectivamente es un árbol de búsqueda equilibrado inclinado hacia un lado es realmente ingeniosa. Esta es también una contribución relativamente reciente.
  • Paxos Resuelve un problema de consecuencias tanto teóricas como prácticas, tanto de manera teórica como prácticamente satisfactoria. También es extraño tratar de entenderlo, incluso para los estándares de los sistemas distribuidos. Se siente un poco como una pintura de Escher; cada objeción que conjures termina resolviéndose ordenadamente, como una mano dibujándose a sí misma. Si bien se descubrió de forma independiente al menos dos veces, fácilmente podría imaginar que no se había descubierto durante décadas más.
  • La familia de “máquinas de estado” de algoritmos sin bloqueo . El acceso simultáneo escalable a datos mutables sin bloqueo de sincronización parece imposible cuando se entera por primera vez. Dada una primitiva de comparar e intercambiar, puede razonar sobre estas estructuras utilizando una máquina de estados, donde las flechas son intercambios. Cliff Click ha hecho algunas excelentes presentaciones popularizando este enfoque general, aunque todavía lo asocio más con Maurice Herlihy. Ver, por ejemplo, http://www.azulsystems.com/event…

Para mí, el algoritmo más ingenioso es la tabla hash distribuida (DHT) y, en particular, el establecimiento y mantenimiento de su tabla de enrutamiento.

En una palabra,

  1. Elige una ID aleatoria para usted, por ejemplo, un hash de una clave pública que posee.
  2. Se conecta a cualquier miembro del DHT y busca su ID + 1, incluida su propia información de ruta. Esto anuncia su información de punto final y la completa en el DHT.
  3. Todos los que manejan una consulta agregan probabilísticamente su información a su tabla de enrutamiento, así como la entrada para la respuesta que se devuelve a lo largo de la misma ruta
  4. Un ‘conjunto de hojas’ de nodos con ID más cercano al suyo siempre aprende su mapeo de ID / dirección, y si aún no lo sabían, le envían su propio mapeo de ID / dirección.

La tabla de enrutamiento es típicamente [math] \ log_b (N) [/ math] filas, donde una fila tiene entradas [math] b [/ math], y [math] N [/ math] es el número de nodos activos. Una operación de enrutamiento tarda [math] \ log_b (N) [/ math] saltos para resolverse.

Por ejemplo, un DHT con [math] b = 10 [/ math] con 1,000,000 de nodos requeriría que cada nodo recuerde hasta 10 * 6 = 60 entradas de la tabla de enrutamiento, y podría resolver casi cualquier ID de nodo a una dirección IP en 6 saltos por trayecto. ¡Para mí esto es muy impresionante!

Un algoritmo ingenioso para mí es HASHLIFE de Bill Gosper. Cuando crees que tienes tu simulación optimizada de Bitboard del Juego de la Vida de Conway, Gosper aparece con una aceleración exponencial en la ejecución del algoritmo, por lo que en un abrir y cerrar de ojos, puedes presenciar el Juego después de miles de millones o billones de generaciones. Utiliza quad-trees y el almacenamiento en caché de una manera notablemente novedosa.

Probablemente aún más importante, también debido a Gosper, es su procedimiento para la suma hipergeométrica indefinida . Este tipo de problema era anteriormente difícil y ad hoc, similar a hacer integrales como estudiante universitario de primer año. Pero hizo un algoritmo infalible que devolverá la suma de forma cerrada si existe, o devolverá con certeza que no. Fue un paso importante en el campo del álgebra computacional, y es la razón por la cual programas como Mathematica, Wolfram | Alpha, Maxima (¡el algoritmo se implementó por primera vez en Macsyma!), Y el resto puede hacer sumas. También fue la base del algoritmo de Doron Zeilberger para la suma definitiva.

More Interesting

¿Cómo se comparan entre sí los departamentos / escuelas de informática en CMU, MIT, Stanford y UC Berkeley?

¿Qué problemas informáticos difíciles o sin resolver tienen más probabilidades de ser ignorados por aquellos nuevos en la programación?

Cómo aprender las habilidades de investigación necesarias para producir investigación rigurosa en robótica, visión por computadora o aprendizaje automático

¿Dónde debería comenzar investigando las recomendaciones sociales?

Soy un estudiante de ciencias de la computación interesado en HCI como tema para mi proyecto final. Mi habilidad de programación no es tan buena. ¿Cuáles son algunas ideas de proyectos que podría emprender?

¿Por qué no hay más personas trabajando para mejorar la inteligencia artificial?

¿Qué tan bueno es el grupo de visión por computadora de Dropbox?

¿Qué tan difícil es hacer la transición de la industria al profesor titular?

¿Cuáles son los temas candentes actuales para la investigación en redes de computadoras?

Cómo comenzar el trabajo de investigación sobre aprendizaje automático y cómo puedo elegir un tema o problema en el aprendizaje automático

¿Fue la sofisticación de los algoritmos o los límites del poder computacional lo que limitó la investigación de IA en los años 70 y 80?

¿Cómo puede ayudar un estudiante universitario con la investigación del aprendizaje automático?

¿Cómo los estudiantes de posgrado mejoran su código, ya que no existe un proceso formal?

¿Qué tipo de investigación en informática se realiza para abordar problemas de la vida real?

¿Cuáles son algunos algoritmos de alineación de secuencia?