Recientemente, pasé por la experiencia divertida y dolorosa de explicar informalmente el concepto de complejidad computacional a un programador autodidacta joven y talentoso, que nunca antes había tomado un curso formal sobre algoritmos o complejidad. No es sorprendente que muchas nociones parecieran extrañas al principio, pero tenían sentido con algunos ejemplos (PTIME, intractabilidad, indisputabilidad) , mientras que otras parecen ser más naturales (clasificación de problemas mediante reducciones, tiempo y espacio como recursos, análisis asintótico) . Todo iba bien hasta que accidentalmente admití que SATpuede resolverse eficientemente * en la práctica ... Y así, los perdí. No importa qué tan convincente que estaba tratando de argumentar a favor de la teoría, el niño estaba convencido de que todo era artificial basura matemáticas que no debía cuidar. Bien...
¯ \ _ (ツ) _ / ¯
No, no estaba con el corazón roto, ni realmente me importaba lo que él pensara, ese no es el punto de esta pregunta. Nuestra conversación me hizo pensar en una pregunta diferente,
¿Cuánto sé realmente acerca de los problemas que son teóricamente intratables (complejidad de tiempo superpolinomial) pero prácticamente solucionables (a través de heurísticas, aproximaciones, solucionadores SAT, etc.)?
Me di cuenta, no mucho. Sé que hay algunos solucionadores SAT muy eficientes que resuelven instancias enormes de manera eficiente, que Simplex funciona muy bien en la práctica, y tal vez algunos problemas o algoritmos más. ¿Me pueden ayudar a pintar una imagen más completa? ¿Qué problemas conocidos o incluso clases de problemas están en esta categoría?
TL; DR: ¿Cuáles son los problemas que se resuelven de forma contraintuitiva en la práctica? ¿Hay un recurso (actualizado) para leer más? ¿Tenemos una caracterización para ellos? Y, finalmente, como una pregunta de discusión general, ¿no deberíamos?
EDITAR # 1: Al tratar de responder mi última pregunta de discusión sobre tal caracterización , me presentaron el análisis suavizado de algoritmos, un concepto introducido por Daniel Spielman y Shang-Hua Teng en [1] que continuamente interpola entre el peor de los casos y Análisis de casos promedio de algoritmos. No es exactamente la caracterización discutida anteriormente, pero captura el mismo concepto, y lo encontré interesante.
[1] Spielman, Daniel A. y Shang-Hua Teng. "Análisis suavizado de algoritmos: por qué el algoritmo simplex generalmente toma tiempo polinomial". Revista de la ACM (JACM) 51, no. 3 (2004): 385-463.