¿Qué problemas alguna vez se pensó que no podían resolverse en el tiempo polinómico, pero finalmente lo fueron?

Mi ejemplo favorito es la programación lineal : el problema se ha estudiado desde principios del siglo XX, genios como John von Neumann trabajaron en él, pero todos los algoritmos iniciales tomaron tiempo exponencial en el peor de los casos, a pesar de que son bastante eficientes en la práctica. Y si lo piensa por un momento, es totalmente plausible que tal vez no tenga una solución de tiempo polinomial; por ejemplo, el politopo factible podría tener exponencialmente muchos vértices, bordes y caras.

Luego, en 1979, Khachiyan demostró el algoritmo elíptico. No es del todo práctico, pero es polinómico. =) El algoritmo de Karmarkar (1984) y los otros métodos de punto interior que siguieron son tanto de tiempo polinómico como prácticos.

Otro ejemplo es la prueba de primalidad : el problema data de la antigüedad, pero Agrawal, Kayal y Saxena completaron el primer algoritmo de polytime en 2002. Por otro lado, si crees en (a) la ERH o (b) la aleatorización, entonces habría considerado el problema moralmente resuelto a finales de los años 70.

Recientemente, ha habido un impulso hacia el aprendizaje automático demostrable dentro de CS teórico. Dos resultados que sobresalen como resultados seminales en el campo son:

  • Probar que encontrar los parámetros exactos para una mezcla de modelo gaussiano (por ejemplo, ¡no el algoritmo EM!) Es polytime
  • Probar que la factorización matricial no negativa admite un algoritmo de tiempo polinómico

Otro algoritmo que la gente pensaba que era “imposible” (aunque no está claro si hay fuentes que afirman que el problema no era polytime) es el cifrado totalmente homomórfico. (vea la respuesta del usuario de Quora a ¿Ha habido nuevos algoritmos brillantes de informática en los últimos 10 años?)

Mezcla de gaussianos
Una mezcla de gaussianos es una distribución [math] \ rho = \ sum_i w_i \ mathcal {N} (\ mu_i, \ Sigma_i) [/ math], donde

  • [math] \ mathcal {N} (\ mu_i, \ Sigma_i) [/ math] es una normal multivariada con media [math] \ mu_i [/ ​​math] y covarianza [math] \ Sigma_i [/ ​​math]
  • [math] w_i [/ ​​math] es un peso de mezcla (proporción de muestras de este gaussiano)

El objetivo es recuperar los pesos de la mezcla [matemática] w_i [/ ​​matemática] con polinomios muchas muestras de [matemática] \ rho [/ matemática]. Si bien se puede obtener una estimación muy rápida y sucia de los pesos ejecutando el algoritmo EM, estas soluciones son solo mínimos locales y no globales de su función de pérdida (por ejemplo, [matemática] \ ell ^ 2 [/ matemática] función de pérdida, o al menos cuadrícula)

En 2010, Moitra y Valiant [0] demostraron que este problema es definitivamente un tiempo polinómico. Lo hacen al mostrar que primero puede reducir el problema a inferir los parámetros de un conjunto de valores normales univariados (tiempo claramente polinómico) y luego usar un método de agrupamiento jerárquico para combinar los parámetros de estos valores normales univariados. Hay muchos casos degenerados / de esquina que hacen que sea muy difícil mostrar que este método funciona. En lugar de manejar cada caso individualmente, Moitra y Valiant construyeron un inteligente algoritmo de corrección de errores que se ejecuta en la parte superior del árbol de clúster de enlace único. Al mostrar que la sobrecarga de la corrección de errores es polinómica, pudieron deducir la complejidad de polimetro del algoritmo de inferencia completo.

Factorización de matriz no negativa
La factorización matricial no negativa es el proceso de descomposición de una matriz [matemática] A [/ matemática] en el producto de dos matrices [matemática] B, C [/ matemática] de modo que ambos [matemática] B, C [/ matemática] solamente tener entradas no negativas. En particular, uno puede ver [matemáticas] C [/ matemáticas] como una matriz de ‘distribuciones de probabilidad’ (temas) y [matemáticas] B [/ matemáticas] como una matriz de parámetros de mezcla para estos temas (la analogía con LDA es correcta : NMF es lo mismo que Asignación de Dirichlet Latente, ver [1]). Esto efectivamente se reduce a calcular una factorización matricial con una restricción. Dado que se sabe que muchas otras factorizaciones restringidas son NP completas (por ejemplo, la factorización de tensor, que está relacionada con NMF), la mayoría de los investigadores pensaron que la NMF exacta era un problema NP-completo. Tenga en cuenta que los usuarios más prácticos de NMF usan aproximaciones.

En 2012, Arora, Ge, Kannan y Moitra [AGKM] demostraron que la factorización matricial no negativa admite un algoritmo de tiempo polinómico [2]. Las técnicas que usan son bastante complicadas (realizan cierto tipo de optimización sobre conjuntos semi-algebraicos que codifican las restricciones no negativas), pero el resultado fue bastante sorprendente para muchos en el campo.

[0] [1004.4223v1] Establecimiento de la capacidad de aprendizaje polinomial de mezclas de gaussianos
[1] [1204.6703] Algoritmo espectral para la asignación de Dirichlet latente
[2] [1111.0952] Cálculo de una factorización matricial no negativa – Probablemente

Un ejemplo reciente es el algoritmo de Nikhil Bansal [1002.2259] Algoritmos constructivos para la minimización de discrepancias para el famoso resultado existencial de Joel Spencer “Seis desviaciones estándar son suficientes”. Puede encontrar la conjetura sobre la dureza del problema en el libro de Alon-Spencer ‘El método probabilístico’.

Otro resultado que se consideró un gran avance en la combinatoria probabilística fue el algoritmo constructivo del lema local de Moser-Tardos Algorithmic Lovász para el lema local. Incluso si no estoy cien por ciento seguro de que la gente creyera que esto era difícil, creo que varios lo hicieron.

More Interesting

¿Es P vs NP el problema más difícil e importante del Premio del Milenio?

Cómo implementar esto en Python: dada una matriz, encuentre tres números a, byc de modo que a ^ 2 + b ^ 2 = c ^ 2

¿Debo dejar de tomar cursos de teoría en Matemáticas / CS teórico, etc.?

¿Cuáles son los mejores libros sobre teoría de grafos?

¿Las funciones del tipo x ^ 2, x ^ 3, x ^ n se consideran de naturaleza recursiva?

¿La función de módulo es distributiva, asociativa o conmutativa? Explicar con ejemplos y pruebas. ¿Cómo uso este concepto en la programación competitiva?

¿Se pueden programar las computadoras con 0,1 y 2? ¿Qué tal 0,1,2 y 3? ¿O son todos los programas manipulaciones de 0 y 1? Nuevos detalles añadidos para explicar.

¿Cuál es la justificación rigurosa de la exactitud de la segunda formulación de la solución DP de corte de varillas en CLRS?

Cómo WAP para encontrar el máximo de todos los elementos del tamaño de matriz 'n'

Cómo imprimir el conjunto de potencia de un conjunto finito de enteros en Java usando recursividad

¿De qué se trata exactamente la conjetura P / NP? ¿Por qué es tan importante demostrarlo?

Cómo calcular el área debajo de y = cosx [0, pi / 2] en C

¿Qué es un decodificador Viterbi?

¿Es la teoría de la computación el tema 'inferior' de la informática?

Quiero aprender matemáticas programando. ¿Cuáles son los proyectos de programación simples pero geniales que requerirían conocimiento de álgebra, cálculo, probabilidad, etc.?