Para (versiones de búsqueda) de problemas completos de NP , verificar una solución es claramente más fácil que encontrarla, ya que la verificación se puede hacer en tiempo polinómico, mientras que encontrar un testigo lleva (probablemente) tiempo exponencial.
En P , sin embargo, la solución también se puede encontrar en tiempo polinómico, por lo que no parece obvio cuándo es la verificación más rápida que encontrar la solución. De hecho, diferentes problemas parecen comportarse de manera diferente desde este punto de vista. Algunos ejemplos:
3SUM: dados números de entrada, encuentre 3 entre ellos que sumen 0. Por lo que sé, el algoritmo más rápido conocido se ejecuta en el tiempo , y este orden se conjetura como óptimo. Por otro lado, la verificación de una solución es mucho más rápida, ya que todo lo que tenemos que hacer es verificar que los 3 números encontrados sumen 0.O ( n 2 - o ( 1 ) )
Rutas más cortas de todos los pares: dado un gráfico con pesos de borde, calcule su matriz de distancia de ruta más corta. Una vez que se proporciona una matriz de este tipo, ¿se puede verificar más rápido que es la matriz de distancia correcta, en lugar de volver a calcularla? Supongo que la respuesta es quizás sí, pero ciertamente es menos obvio que para 3SUM.
Programación lineal. Si se proporciona una solución óptima reclamada, comprobarla es más fácil que volver a calcularla, cuando también se proporciona información auxiliar (una solución dual óptima). Por otro lado, si solo está disponible la solución primaria, no está claro si se puede verificar más rápido, en lugar de resolver el LP.
Pregunta: ¿qué se sabe sobre este tema? Es decir, ¿cuándo es más fácil verificar una solución para un problema en P que encontrar la solución?
fuente
Respuestas:
se sabe que, dado un gráfico G y un árbol T, se puede verificar en tiempo lineal que T es un árbol de extensión mínima de G. Pero todavía no tenemos un algoritmo determinista de tiempo lineal para calcular el MST. Por supuesto, la brecha es pequeña (1 vs ), pero sigue ahí :))α(n)
fuente
Este documento muestra que existen algoritmos de verificación para las instancias YES y NO para 3 problemas, incluidos Max flow, 3SUM y APSP, que son más rápidos por un factor polinómico que los límites conocidos para calcular la solución en sí.
Hay una clase de problemas, a saber, los que mejoran el tiempo de ejecución es SETH-hard, cuyo tiempo de ejecución para verificar NO es improbable que sea significativamente más rápido que el tiempo para calcular la solución, de lo contrario, la conjetura de este artículo se llama No determinista La hipótesis del tiempo exponencial fuerte fallaría.
fuente
Para algunos problemas parece que no hay diferencia. En particular, Vassilevska Williams & Williams muestran:
para la multiplicación matricial booleana, calcular el producto matricial y verificar el producto subcúbico equivalente de la matriz, lo que significa que ambos tienen algoritmos de tiempo subúbico o ninguno de ellos tiene.
Lo mismo es cierto para el cálculo y la verificación de productos matriciales sobre cualquier "estructura extendida (min, +)" (ver el documento para la definición, pero esto incluye muchos problemas naturales).
(Ahora, por supuesto, es posible que todos estos problemas tengan algoritmos subcúbicos, y luego puede haber una diferencia polinómica entre la computación y la verificación, pero para estos problemas no puede haber una diferencia cúbica. Y me parece plausible que en de hecho, todos requieren esencialmente un tiempo cúbico).
fuente
Decidir si existe un valor en una matriz lleva tiempo (o si la matriz está ordenada).Ω(n) Ω(logn)
Es posible verificar que una matriz contiene el valor dado en una posición dada en el tiempo .O(1)
La ordenación (en el modelo de comparación) lleva tiempo , pero es posible verificar que una matriz o lista esté ordenada en el tiempo .Ω(nlogn) O(n)
fuente
Creo que muchos ejemplos provienen de problemas NP-completos que caen en P cuando arreglamos uno o más parámetros .
Por ejemplo, verificar si un gráfico contiene una camarilla de tamaño es NP-completo si es parte de la entrada, tiempo polinomial solucionable si es fijo.k k k
Para cualquier fija , la verificación lleva un tiempo lineal, pero a menos que , la complejidad del problema de búsqueda (polinomio) depende de ( .k P=NP k Ω(nk))
Otros ejemplos: encontrar una ruta hamiltoniana de longitud , colorear en gráficos de ancho de árbol acotado, ...k
fuente
Decidir la primalidad: la variante más conocida de AKS parece decidir la primalidad en el tiempo , mientras que el clásico certificado de primalidad de Pratt implica que la primalidad se puede decidir en un tiempo no determinista .O~(n6) O~(n3)
fuente
Un artículo de Abboud et al. recientemente aceptado en SODA 2016 muestra que el isomorfismo de subárbol no puede resolverse en tiempo menos que la hipótesis del tiempo exponencial fuerte sea falsa. Por supuesto, podemos verificar un isomorfismo en tiempo lineal.O(n2−ϵ)
En otras palabras, el SETH nos da un problema natural en con una brecha entre encontrar y verificar. Ω ( n 1 - ϵ )P Ω(n1−ϵ)
En particular, se conoce un algoritmo para árboles enraizados de grado constante (para los que todavía se aplican los resultados de límite inferior de Abboud et al.). Entonces, bajo SETH, la brecha de búsqueda-verificación casi lineal es esencialmente estrecha para este problema.O(n2/logn)
fuente