Regla general para saber si un problema podría ser NP-completo

26

Esta pregunta fue inspirada por un comentario en StackOverflow .

Además de conocer los problemas NP-completos del libro de Garey Johnson, y muchos otros; ¿Existe una regla general para saber si un problema se parece a un NP completo?

No busco algo riguroso, sino algo que funcione en la mayoría de los casos.

Por supuesto, cada vez que tenemos que demostrar que un problema es NP completo, o una ligera variante de un NP completo; pero antes de apresurarse a la prueba sería genial tener cierta confianza en el resultado positivo de la prueba.

Виталий Олегович
fuente
8
Mi regla general es simple: si no huele a un problema con el que ya estoy familiarizado, probablemente sea NP-duro (o peor).
JeffE
12
@JeffE, por supuesto, ya está familiarizado con bastantes problemas ... es posible que los recién llegados a CS no puedan usar la misma regla.
Joe
1
@ Joe: Cierto. Tal vez sería mejor decir: si no obtuvo el problema de un libro de texto, probablemente sea NP-hard.
JeffE
2
Otra forma de decir esto: es sorprendente cuando un problema no es NP-hard, en lugar de cuando un problema es NP-hard.
Joe

Respuestas:

15

Este es mi enfoque personal para determinar si un problema (es decir, un lenguaje ) es NP-completo o no. Si se verifican ambas condiciones:L

  • Siento que probar si una instancia en la que en L implica que necesito verificar todas las combinaciones de algún tipoIL
  • y que no hay forma de dividir esa combinación en dos más pequeñas

L

SSS1S2S1S2

ACBABBC

Francamente, este enfoque es muy básico: trato de encontrar un algoritmo (polinómico) para el problema dado. Si no puedo encontrar uno, el problema se vuelve "difícil" en mi punto de vista. Luego viene todo el razonamiento de NP-completeness: ¿podré codificar un problema NP-complete existente en este? (Y dado que esto suele ser mucho más difícil, intento una vez más encontrar un algoritmo polinomial ...)

Sospecho que esta es la forma habitual de pensar. Sin embargo, sigue siendo bastante difícil de aplicar en problemas desconocidos. Personalmente recuerdo que me sorprendió uno de los primeros ejemplos de integridad de NP que me dijeron: el problema de la camarilla . ¡Parecía tan simple de verificar! Así que supongo que esa experiencia tiene mucho que ver con eso. También la intuición puede ser inútil a veces. Recuerdo que me dijeron varias veces dos problemas casi idénticos, pero uno estaba en P y el otro con una pequeña variación era NP completo.

Todavía tengo que encontrar un buen ejemplo (necesito ayuda aquí), pero esto es como el problema de la correspondencia posterior : este es un problema indecidible pero algunas variantes son decidibles.

jmad
fuente
77
+1
2
Una excepción interesante a la regla general son los problemas de optimización que se pueden resolver con programación lineal. Si no ha oído hablar del truco, puede ser difícil ver cómo se pueden resolver problemas como el problema de asignación o la coincidencia de gráficos en el tiempo polivinílico, ya que los trucos como dividir y conquistar y la programación dinámica no parecen aplicarse.
hugomg
Un ejemplo es el problema de la subsecuencia común más larga que está en P para 2 secuencias pero entra en NP-Hard con más.
Christian Vielma
14

Otra perspectiva sobre la dureza del problema proviene de la comunidad de juegos y acertijos, donde la regla general es que "los problemas son tan difíciles como pueden ser" (y las excepciones provienen de estructuras ocultas en el problema - el ejemplo de Massimo del determinante en comentarios es una buena instancia de esto); El truco es comprender cuán difícil puede ser un problema:

  • n
  • Los acertijos que involucran una secuencia de movimientos dentro de un espacio de estado acotado están en PSPACE (ya que el 'árbol de movimientos' generalmente se puede explorar en profundidad de manera estándar primero, necesitando solo almacenamiento para un número polinómico de configuraciones), y tienden a ser PSPACE completos; Un ejemplo clásico de esto es Rush Hour.
  • Los juegos con una profundidad polinómicamente limitada también están en PSPACE; esto utiliza la caracterización de PSPACE como APTIME, ya que la caracterización min-max habitual de estrategias imita perfectamente una máquina de Turing alterna con su caracterización como 'existe un movimiento para el jugador A de tal manera que para cada movimiento de respuesta del jugador B, existe una respuesta moverse para el jugador A tal que ... ', etc. También tienden a ser PSPACE completos; Hex y juegos generalizados de Tic-Tac-Toe son ejemplos de esto.
  • Los juegos sin límite en la profundidad del árbol pero jugados en un espacio acotado (polinomialmente) son EXPTIME, ya que hay exponencialmente muchas posiciones totales y todo el gráfico se puede construir y explorar en el tiempo polinomial en el número de posiciones (y, por lo tanto, exponencial en general) ; estos juegos son generalmente EXPTIME-complete. Chess, Checkers y Go entran en esta categoría.
Steven Stadnicki
fuente