¿Cuáles son algunos algoritmos de utilidad legítima que son simplemente demasiado complejos para implementar?
Permítanme ser claro: no estoy buscando algoritmos como el algoritmo de multiplicación de matriz óptima asintótica actual (Coppersmith-Winograd), que es razonable de implementar pero tiene una constante que lo hace inútil en la práctica. Estoy buscando algoritmos que posiblemente tengan un valor práctico, pero que sean tan difíciles de codificar que nunca se hayan implementado, solo se hayan implementado en entornos extremadamente artificiales o solo para aplicaciones extraordinariamente especiales.
También son bienvenidos los algoritmos casi imposibles de implementar que tienen buenos asintóticos pero que probablemente tengan un rendimiento real deficiente.
fuente
Respuestas:
Chazelle dio un algoritmo de tiempo lineal para triangular un polígono simple . Skiena escribió (p. 575, Algorithm Design Manual) que es "lo suficientemente desesperado para implementar que califica más como una prueba de existencia"
fuente
El algoritmo de Risch para calcular antiderivadas elementales. Según Wikipedia, no se conoce ningún paquete de software para implementar el algoritmo completo debido a su complejidad.
fuente
Cualquier algoritmo que use los resultados de Robertson-Seymour para inferir un algoritmo "polytime" para cosas que involucran gráficos que excluyen a un menor fijo está pidiendo problemas. La constante oculta en su resultado es "galáctica".
fuente
El "Algoritmo de control de densidad de Dan Willard para realizar inserciones y eliminaciones en un archivo ordenado secuencialmente en el peor de los casos" describe un algoritmo para mantener un conjunto ordenado en una matriz de tamaño con inserción y eliminación en peor de los casos, donde es el tamaño de la página.O ( log 2 nO(n) BO(log2nB) B
El documento tiene 55 páginas y su conclusión señala varias mejoras en las constantes que el autor no describe por razones de espacio. Esto me hace sospechar que quizás las constantes no son tan galácticas, y que esta estructura de datos sería de "utilidad legítima", especialmente porque se ha citado muchas veces.
fuente
El algoritmo de unificación de patrones de orden superior de tiempo lineal de Qian nunca se ha implementado debido a su complejidad AFAIK.
fuente
Algoritmo de tiempo lineal para verificar si un gráfico se puede incrustar en una superficie fija.
Ken-ichi Kawarabayashi, Bojan Mohar, Bruce A. Reed: un algoritmo de tiempo lineal más simple para incrustar gráficos en una superficie arbitraria y el género de gráficos de ancho de árbol acotado. FOCS 2008: 771-780.
Bojan Mohar: Un algoritmo de tiempo lineal para incrustar gráficos en una superficie arbitraria. SIAM J. Matemáticas discretas. 12 (1): 6-26 (1999)
fuente
No estoy seguro de lo útil que podría ser en la práctica (aunque estoy pensando en el plegamiento y la comparación de proteínas, así como en la predicción de la estructura secundaria de ARN), pero Wolfgang Haken dio el primer algoritmo de
tiempo polinómicopara decidir si un nudo es un bucle simple ( Theorie der Normalflächen. Acta Math. 105, 1961, pp. 245-375). Según recuerdo, todavía es demasiado complicado para implementarse todas esas décadas más tarde.Si se debe creer en Wikipedia, más tarde se proporcionaron varios otros algoritmos, y "Comprender la complejidad de estos algoritmos es un campo de estudio activo".
fuente
Descomposición de los árboles
, y quizás montones de Fibonacci.fuente
La construcción hash perfecta ( https://en.wikipedia.org/wiki/Perfect_hash_function#Construction ) se aplicaría a cualquier caso de uso con claves estáticas o que cambian con poca frecuencia (por ejemplo, nombres de dominio de nivel superior en enrutadores, palabras clave en compiladores o nombres de funciones en bibliotecas estándar) pero la última vez que busqué no pude encontrar ninguna implementación.
La búsqueda paramétrica puede resolver muchos problemas difíciles de optimización, incluidos algunos que podrían parecer NP-hard, en tiempo polinómico. La bien conocida búsqueda paramétrica en papel hecha práctica implementa una variante de búsqueda paramétrica, pero aún no creo que se haya implementado en un software práctico.
El algoritmo óptimo para la intersección del segmento de línea por Chazelle y Edelsbrunner encuentra todas las intersecciones de segmentos de línea en el tiempo , pero es complejo. CGAL es una sofisticada biblioteca de algoritmos de geometría, pero implementa un algoritmo más simple que es .n O ( n log n + k ) O ( ( n + k ) log n )k n O(nlogn+k) O((n+k)logn)
fuente