¿Se requiere que un problema NP-hard sea computable?
No lo creo, pero no estoy seguro.
¿Se requiere que un problema NP-hard sea computable?
No lo creo, pero no estoy seguro.
Respuestas:
No, un duro no necesita ser computable. La definición es bastante completa: un problema es -duro si ese problema que tiene una solución de poli-tiempo implica que cada problema en tiene una solución de poli-tiempo (es decir, existe una reducción a para cada problema en ).
Los problemas incontrolables son difíciles de resolver: supongamos que podríamos resolver uno en tiempo polinómico. Luego, usamos la prueba de que es incuestionable deducir que es computable y no computable, una contradicción. De esta falsedad, podemos derivar cualquier cosa, a saber, que existe un algoritmo de tiempo polinómico para cualquier problema de que estemos viendo.
Por ejemplo, consideremos el problema de la parada . Podemos reducir cualquier lenguaje a siguiente manera, suponiendo que tengamos un verificador de polytime que verifica si es un certificado para :
Por lo tanto, con una sola llamada a un algoritmo de poli-tiempo que resuelve el problema de detención, podemos resolver cualquier problema de en tiempo polinómico.
Tal reducción no es útil, porque todo lo que hace es decir si "si es falso, entonces algo". Ya sabemos que no existe un algoritmo de polytime para problemas inconfundibles.
Parece haber una considerable confusión en esta comunidad con respecto a esta pregunta. Daré una respuesta detallada con la esperanza de aclarar el agua e iluminar la relación entre la computabilidad y la dureza NP.
Primero, creo que ser claro y explícito sobre las diversas definiciones involucradas resolverá gran parte de la confusión.
Una cadena es una secuencia finita de caracteres de un alfabeto finito fijo.
Un problema de decisión es un conjunto de cadenas. (Este conjunto es típicamente infinito). Piense en el problema de decisión como pruebas de cadenas para alguna propiedad: las cadenas con la propiedad están en el conjunto y las cadenas sin la propiedad no lo están.
Supongamos que tenemos dos problemas de decisión, y . Digamos que es polinomial reducible en tiempo a si hay algún polinomio y algoritmo algún algoritmo tal que, para todas las cadenas ,
- Si proporciona con la entrada , detiene en menos de pasos (donde es la longitud de la cadena ) y genera una cadena .
- está en si y sólo si M ( s ) es en B .
Un problema de decisión es NP-difícil si, para cada problema de decisión NP A , A es en tiempo polinomio irreducible a B .
Un problema de decisión es computable si hay un algoritmo , que, para todas las cadenas s ,
- Si proporciona con la entrada s , M se detiene y emite "sí" o "no".
- La salida es "sí" si está en A y "no" de lo contrario.
Con las definiciones anteriores, podemos aclarar inmediatamente lo que creo que podría ser la raíz de la confusión en su pregunta: nada en las definiciones de problema de decisión, reducciones o dureza NP requiere que los problemas de decisión sean computables. Las definiciones tienen mucho sentido pensando en los problemas de decisión como conjuntos arbitrarios de cadenas, y estos conjuntos pueden ser muy desagradables.
Eso deja dos preguntas sobre la mesa:
La pregunta 1 es más fácil de responder. Hay dos formas particularmente importantes de encontrar problemas de decisión no computables que son NP-hard. El primero es el problema de la parada: el problema de la parada, , tiene la propiedad de que cada computable problema de decisión es en tiempo polinomio irreducible a H . Dado que los problemas de NP son computables, cada problema de NP es reducible en tiempo polinomial a H , entonces H es NP-duro.
La otra forma importante de construir un problema NP-hard no computable es observar que podemos combinar cualquier problema NP-hard conocido con cualquier problema no computable conocido. Deje que sea NP-hard y B sea no computable. Forme el problema de decisión A ⊕ B de la siguiente manera: A ⊕ B contiene esas cadenas de la forma "0, seguidas de una cadena en A " y las de la forma "1, seguida de una cadena en B ". A ⊕ B es NP-duro porque podemos convertir cualquier reducción (de cualquier problema) a A en una reducción a A ⊕ B: simplemente modifique el algoritmo para generar un "0" adicional al frente de su cadena de salida. no es computable, ya que calcular A ⊕ B requiere decidir qué cadenas que comienzan con "1" están en el conjunto; Esto es imposible, ya que B no es computable.
La pregunta 2 es considerablemente más complicada, pero de hecho hay problemas de decisión no computables que no son NP-hard (suponiendo P NP). La buena respuesta de Yuval construye tal problema de decisión explícitamente. (Para cualquier teórico de la computabilidad en la sala, cualquier "Cohen Π 0 1- genérico" también funcionará). Analizaré por qué la intuición de que "los problemas NP-difíciles son difíciles, los problemas no computables son más difíciles " Está Mal.
La dureza NP y la no computabilidad dicen que un problema es "difícil" en un sentido muy general, pero son muy diferentes y no deberían agruparse como el mismo tipo de fenómeno. Específicamente, la dureza NP es una propiedad "positiva": un problema NP difícil es difícil en el sentido de que, dado el acceso a una hoja de trucos para A , puede resolver una clase difícil de problemas . Por otro lado, la no computabilidad es una propiedad "negativa": un problema no computable difícil en el sentido de que no se puede resolver A con una clase dada de recursos .
( "Forzar", por cierto, es la técnica utilizada para producir el "Cohen genérico" que he mencionado. Para ser muy muy vaga, forzando está de manera general para producir cosas que son "genérico" en que tienen sin propiedades positivas y todas las propiedades negativas, por eso forzar puede producir directamente un problema que no es computable ni NP-hard).
No NP-Hard significa que es tan difícil o más difícil que los problemas NP más difíciles. Intuitivamente, ser incuestionable hará que sea mucho más difícil que NP.
Wikipedia:
Hay problemas de decisión que son NP-hard pero no NP-complete, por ejemplo, el problema de detención.
Todos saben que no es computable
problem()
función que podamos llamar.
Para completar, demostremos el siguiente teorema:
Creo que lo que hace que las personas piensen que no hay un problema NP-hard incuestionable es que pierden el punto de que la dureza NP es un límite inferior de la dureza de un problema, no un límite superior de su dureza como P o NP.
Un lenguaje L siendo NP-hard significa que está por encima del lenguaje en NP y eso es. Ahora, si comprende esto, lo que necesita es demostrar que hay un problema arbitrario más difícil.