¿Cuáles son las diferencias entre NP, NP-Complete y NP-Hard?


1107

¿Cuáles son las diferencias entre NP , NP-Complete y NP-Hard ?

Soy consciente de muchos recursos en toda la web. Me gustaría leer sus explicaciones, y la razón es que pueden ser diferentes de lo que hay ahí fuera, o hay algo de lo que no estoy al tanto.

Respuestas:


1438

Supongo que está buscando definiciones intuitivas, ya que las definiciones técnicas requieren bastante tiempo para comprender. En primer lugar, recordemos un concepto preliminar necesario para comprender esas definiciones.

  • Problema de decisión : un problema con una respuesta de sí o no .

Ahora, definamos esas clases de complejidad .

PAGS

P es una clase de complejidad que representa el conjunto de todos los problemas de decisión que se pueden resolver en tiempo polinómico .

Es decir, dada una instancia del problema, la respuesta sí o no se puede decidir en tiempo polinómico.

Ejemplo

Dado un gráfico conectado G, ¿se pueden colorear sus vértices con dos colores para que ningún borde sea monocromático?

Algoritmo: comience con un vértice arbitrario, coloréelo en rojo y todos sus vecinos en azul y continúe. Deténgase cuando se quede sin vértices o se vea obligado a hacer que un borde tenga sus dos puntos finales del mismo color.


notario público

NP es una clase de complejidad que representa el conjunto de todos los problemas de decisión para los cuales las instancias donde la respuesta es "sí" tienen pruebas que pueden verificarse en tiempo polinómico.

Esto significa que si alguien nos da una instancia del problema y un certificado (a veces llamado testigo) de que la respuesta es sí, podemos verificar que sea correcto en el tiempo polinómico.

Ejemplo

La factorización entera está en NP. Este es el problema que dan los enteros ny m, ¿hay un entero fcon 1 < f < mtal que se fdivida n( fes un pequeño factor de n)?

Este es un problema de decisión porque las respuestas son sí o no. Si alguien nos entrega una instancia del problema (por lo que nos entrega números enteros ny m) y un número entero fcon 1 < f < m, y afirma que fes un factor de n(el certificado), podemos verificar la respuesta en tiempo polinómico realizando la división n / f.


NP-Complete

NP-completo es una clase de la complejidad que representa el conjunto de todos los problemas Xde NP para los que es posible reducir cualquier otro problema NP Yque Xen tiempo polinómico.

Intuitivamente, esto significa que podemos resolver Yrápidamente si sabemos cómo resolverlo Xrápidamente. Precisamente, Yes reducible a X, si hay un algoritmo de tiempo polinómico fpara transformar las instancias yde Ya instancias x = f(y)de Xen tiempo polinómico, con la propiedad de que la respuesta a yes sí, si y sólo si la respuesta a f(y)es sí.

Ejemplo

3-SAT. Este es el problema en el que se nos da una conjunción (AND) de disyunciones de 3 cláusulas (OR), declaraciones de la forma

(x_v11 OR x_v21 OR x_v31) AND 
(x_v12 OR x_v22 OR x_v32) AND 
...                       AND 
(x_v1n OR x_v2n OR x_v3n)

donde cada x_vijuna es una variable booleana o la negación de una variable de una lista predefinida finita (x_1, x_2, ... x_n).

Se puede demostrar que cada problema de NP puede reducirse a 3-SAT . La prueba de esto es técnica y requiere el uso de la definición técnica de NP ( basada en máquinas de Turing no deterministas ). Esto se conoce como el teorema de Cook .

Lo que hace que los problemas NP-completos sean importantes es que si se puede encontrar un algoritmo determinista de tiempo polinomial para resolver uno de ellos, cada problema NP puede resolverse en tiempo polinomial (un problema para gobernarlos a todos).


NP-hard

Intuitivamente, estos son los problemas que son al menos tan difíciles como los problemas NP-completos . Tenga en cuenta que los problemas NP-hard no tienen que estar en NP , y no tienen que ser problemas de decisión .

La definición precisa aquí es que un problema Xes NP-duro, si hay un problema NP-completo Y, tal que Yes reducible a Xtiempo polinómico .

Pero dado que cualquier problema de NP completo se puede reducir a cualquier otro problema de NP completo en tiempo polinómico, todos los problemas de NP completo se pueden reducir a cualquier problema NP-difícil en tiempo polinómico. Entonces, si hay una solución a un problema NP-duro en tiempo polinómico, hay una solución a todos los problemas NP en tiempo polinómico.

Ejemplo

El problema de detención es un problema NP-difícil. Este es el problema que, dado un programa Py una entrada I, ¿se detendrá? Este es un problema de decisión pero no está en NP. Está claro que cualquier problema de NP completo se puede reducir a este. Como otro ejemplo, cualquier problema NP-complete es NP-hard.

Mi problema NP-complete favorito es el problema del Buscaminas .


P = NP

Este es el problema más famoso en informática, y una de las preguntas pendientes más importantes en las ciencias matemáticas. De hecho, el Instituto Clay está ofreciendo un millón de dólares para una solución al problema (la reseña de Stephen Cook en el sitio web de Clay es bastante buena).

Está claro que P es un subconjunto de NP. La pregunta abierta es si los problemas de NP tienen o no soluciones deterministas de tiempo polinomial. Se cree en gran medida que no lo hacen. Aquí hay un artículo reciente sobresaliente sobre el último (y la importancia) del problema P = NP: El estado del problema P versus NP .

El mejor libro sobre el tema es Computadoras e Intractabilidad de Garey y Johnson.


32
@Paul Fisher: Mostraré que SAT es reducible al problema de detención en el tiempo polinómico. Considere el siguiente algoritmo: dado como entrada una proposición Isobre las nvariables, intente todas 2^nlas asignaciones posibles a las variables y pare si una satisface la proposición y de lo contrario ingrese un bucle infinito. Vemos que este algoritmo se detiene si y solo si Ies satisfactoria. Por lo tanto, si tuviéramos un algoritmo de tiempo polinómico para resolver el problema de detención, entonces podríamos resolver SAT en tiempo polinómico. Por lo tanto, el problema de detención es NP-duro.
Jason

66
@ Jason: no puede reducir un problema decidible a un problema indecidible de esa manera. Los problemas decidibles tienen que dar como resultado una respuesta definitiva de sí o no para ser considerados como decidibles. El problema de detención no tiene una respuesta definitiva de sí o ahora, ya que una respuesta arbitraria podría arrojar cualquier solución en un bucle.
rjzii

11
@Rob: Sí, puedo. La definición de reducible no requiere que el problema se reduzca para ser solucionable. Esto es cierto para reducciones de muchos o reducciones de Turing.
Jason

55
@Rob: Bueno, está bien, si quieres continuar con esto. Primero, "Decidable" no es sinónimo de "problema de decisión" como lo ha usado. "Decidible" significa, aproximadamente, que existe un "método eficaz" para determinar la respuesta. El "método efectivo", por supuesto, tiene una definición técnica. Además, "decidible" también se puede definir en términos de "funciones computables". Entonces, el problema de detención es un problema de decisión ("¿Se detiene este programa?" Es una pregunta de sí / no) pero es indecidible; No existe un método efectivo para determinar si una instancia del problema de detención se detendrá o no.
Jason

21
Usar el problema de detención como un "ejemplo clásico" del problema NP-hard es incorrecto. Esto es como decir: "El Océano Pacífico es un ejemplo clásico de un acuario de agua salada".
Michael

261

He estado mirando y viendo muchas explicaciones largas. Aquí hay un pequeño cuadro que puede ser útil para resumir:

Observe cómo la dificultad aumenta de arriba a abajo: cualquier NP se puede reducir a NP-Complete , y cualquier NP-Complete se puede reducir a NP-Hard , todo en tiempo P (polinomial).

Si puede resolver una clase de problema más difícil en el tiempo P, eso significará que encontró cómo resolver todos los problemas más fáciles en el tiempo P (por ejemplo, demostrando P = NP, si descubre cómo resolver cualquier problema NP-Complete en P tiempo).

____________________________________________________________
El | Tipo de problema | Verificable en tiempo P | Soluble en tiempo P | Dificultad creciente
___________________________________________________________ | El |
El | P | Sí | Sí | El |
El | NP | Sí | Sí o no * | El |
El | NP-Complete | Sí | Desconocido | El |
El | NP-Hard | Sí o no ** | Desconocido *** | El |
____________________________________________________________ V

Notas Yeso Noentradas:

  • * Un problema NP que también es P se puede solucionar en tiempo P.
  • ** Un problema NP-Hard que también es NP-Complete es verificable en tiempo P
  • *** NP-Complete problemas (todos los cuales forman un subconjunto de NP-hard) podrían ser. El resto de NP difícil no lo es.

También encontré este diagrama bastante útil para ver cómo todos estos tipos se corresponden entre sí (preste más atención a la mitad izquierda del diagrama).


Tengo una duda relacionada con tu respuesta. Lo hice en una pregunta separada, pero me pidieron que lo publicara aquí. ¿Me pueden ayudar aquí? stackoverflow.com/questions/21005651/…
Srikanth

Se desconoce si los problemas de NP completo se pueden resolver en tiempo polinómico. Además, los problemas NP-completos son NP-hard, por lo que algunos problemas NP-hard son verificables en tiempo polinomial, y es posible que algunos también sean polinomiales en tiempo solucionable.
Falk Hüffner

Esta tabla es incorrecta y contradictoria. Incluso si supone que NP! = P, que aún no se ha probado, aún sería incorrecto. Por ejemplo, la clase NP-Hard incluye problemas NP-Complete; por lo tanto, su tabla afirma que los problemas de NP-Complete son simultáneamente verificables en tiempo polinómico y no verificables en tiempo polinómico.
Michael

3
@ FalkHüffner Gracias, la tabla se actualizó (fue un error al traducir del diagrama de Venn).
Johnson Wong

1
@PeterRaeves Todos los problemas NP-completos son NP-hard, por definición: NP-complete = (NP y NP-hard). Lo inverso no es cierto: hay problemas (como el problema de detención) en NP-hard que no están en NP-complete. "NP (no solucionable en tiempo polinómico)" - eso no es lo que significa NP. NP es "polinomio no determinista". Todos los problemas en P también están en NP. Se desconoce si lo inverso es cierto.
Jim Balter

73

Esta es una respuesta muy informal a la pregunta formulada.

¿Se puede escribir 3233 como el producto de otros dos números mayores que 1? ¿Hay alguna manera de caminar por un camino alrededor de los Siete Puentes de Königsberg sin tomar ningún puente dos veces? Estos son ejemplos de preguntas que comparten un rasgo común. Puede no ser obvio cómo determinar eficientemente la respuesta, pero si la respuesta es 'sí', entonces hay una prueba breve y rápida de verificar. En el primer caso, una factorización no trivial de 51; en el segundo, una ruta para caminar por los puentes (ajustando las restricciones).

Un problema de decisión es una colección de preguntas con respuestas sí o no que varían solo en un parámetro. Diga el problema COMPUESTO = {"Es ncompuesto": nes un número entero} o EULERPATH = {"¿El gráfico Gtiene una ruta de Euler?": GEs un gráfico finito}.

Ahora, algunos problemas de decisión se prestan a algoritmos eficientes, si no obvios. Euler descubrió un algoritmo eficiente para problemas como los "Siete Puentes de Königsberg" hace más de 250 años.

Por otro lado, para muchos problemas de decisión, no es obvio cómo obtener la respuesta, pero si conoce alguna información adicional, es obvio cómo demostrar que tiene la respuesta correcta. COMPOSITE es así: la división de prueba es el algoritmo obvio, y es lento: para factorizar un número de 10 dígitos, debe intentar algo como 100,000 divisores posibles. Pero si, por ejemplo, alguien le dijo que 61 es un divisor de 3233, la división larga simple es una forma eficiente de ver que son correctos.

La clase de complejidad NP es la clase de problemas de decisión en los que las respuestas 'sí' son breves para indicar, rápidas para verificar las pruebas. Me gusta COMPUESTO. Un punto importante es que esta definición no dice nada sobre cuán difícil es el problema. Si tiene una forma correcta y eficiente de resolver un problema de decisión, simplemente escribir los pasos en la solución es prueba suficiente.

La investigación de algoritmos continúa, y se crean nuevos algoritmos inteligentes todo el tiempo. Un problema que quizás no sepa cómo resolver de manera eficiente hoy puede resultar en tener una solución eficiente (si no obvia) mañana. De hecho, ¡llevó a los investigadores hasta 2002 encontrar una solución eficiente para COMPOSITE! Con todos estos avances, uno realmente tiene que preguntarse: ¿se trata solo de tener pruebas cortas como una ilusión? ¿Quizás cada problema de decisión que se presta a pruebas eficientes tiene una solución eficiente? Nadie lo sabe .

Quizás la mayor contribución a este campo vino con el descubrimiento de una clase peculiar de problemas NP. Al jugar con los modelos de circuitos para el cálculo, Stephen Cook encontró un problema de decisión de la variedad NP que probablemente era tan difícil o más difícil que cualquier otro problema NP. Se podría usar una solución eficiente para el problema de la satisfacción booleana para crear una solución eficiente a cualquier otro problema en NP. Poco después, Richard Karp demostró que varios otros problemas de decisión podrían servir para el mismo propósito. Estos problemas, en cierto sentido los problemas "más difíciles" en NP, se conocieron como problemas NP completos .

Por supuesto, NP es solo una clase de problemas de decisión. Muchos problemas no se expresan naturalmente de esta manera: "encuentra los factores de N", "encuentra la ruta más corta en el gráfico G que visita cada vértice", "da un conjunto de asignaciones de variables que hacen que la siguiente expresión booleana sea verdadera". Aunque se puede hablar informalmente de que algunos de estos problemas están "en NP", técnicamente eso no tiene mucho sentido, no son problemas de decisión. Algunos de estos problemas podrían incluso tener el mismo tipo de potencia que un problema de NP completo: una solución eficiente a estos problemas (sin decisión) conduciría directamente a una solución eficiente a cualquier problema de NP. Un problema como este se llama NP-hard .


67

P (Tiempo polinomial): como su propio nombre lo indica, estos son los problemas que se pueden resolver en tiempo polinomial.

NP (Tiempo polinomial no determinista): estos son los problemas de decisión que se pueden verificar en el tiempo polinomial. Eso significa que, si afirmo que hay una solución de tiempo polinomial para un problema en particular, me pides que lo pruebe. Luego, te daré una prueba que puedes verificar fácilmente en tiempo polinómico. Este tipo de problemas se denominan problemas NP. Tenga en cuenta que, aquí no estamos hablando de si hay una solución de tiempo polinomial para este problema o no. Pero estamos hablando de verificar la solución a un problema dado en el tiempo polinómico.

NP-Hard: estos son al menos tan difíciles como los problemas más difíciles en NP. Si podemos resolver estos problemas en tiempo polinómico, podemos resolver cualquier problema de NP que pueda existir. Tenga en cuenta que estos problemas no son necesariamente problemas de NP. Eso significa que podemos / no podemos verificar la solución a estos problemas en el tiempo polinómico.

NP-Complete: estos son los problemas que son NP y NP-Hard. Eso significa que, si podemos resolver estos problemas, podemos resolver cualquier otro problema de NP y las soluciones a estos problemas pueden verificarse en tiempo polinómico.


¿Entonces decidiste copiar las definiciones de alguna parte?
Arun Satyarth

1
¡La respuesta tiene sentido!
Konstantin

2
@ArunSatyarth ¿De dónde?
significado-asuntos

3
La mejor respuesta, ya que es corta, usa la terminología suficiente, tiene oraciones humanas normales (no es difícil de leer, seamos lo más correctos posible) y, sorprendentemente, es la única respuesta que escribe lo que N representa.
significado importa el

62

Además de las otras excelentes respuestas, aquí está el esquema típico que las personas usan para mostrar la diferencia entre NP, NP-Complete y NP-Hard:

ingrese la descripción de la imagen aquí


1
¿Está comprobado que existe un problema en NP-Hard que no está en NP-Complete? Porque esta imagen lo sugiere. Gracias.
Hilder Vitor Lima Pereira

99
@VitorLima sí, por ejemplo , los problemas de EXPSPACE-complete son NP-hard pero se ha comprobado que no son NP-complete.
Franck Dernoncourt

2
Ok, gracias. Encontré algunas referencias hablando de eso. Por ejemplo, este: princeton.edu/~achaney/tmve/wiki100k/docs/NP-hard.html
Hilder Vitor Lima Pereira

47

La forma más fácil de explicar P v. NP y tal sin entrar en tecnicismos es comparar los "problemas de palabras" con los "problemas de opción múltiple".

Cuando intenta resolver un "problema de palabras", tiene que encontrar la solución desde cero. Cuando intenta resolver un "problema de opción múltiple" tiene una opción: resolverlo como lo haría con un "problema de palabras", o tratar de conectar cada una de las respuestas que se le dieron y elegir la respuesta candidata que se ajuste.

A menudo sucede que un "problema de opción múltiple" es mucho más fácil que el "problema de palabras" correspondiente: sustituir las respuestas del candidato y verificar si encajan puede requerir un esfuerzo significativamente menor que encontrar la respuesta correcta desde cero.

Ahora, si estuviéramos de acuerdo en que el esfuerzo que lleva el tiempo polinómico es "fácil", entonces la clase P consistiría en "problemas de palabras fáciles", y la clase NP consistiría en "problemas fáciles de opción múltiple".

La esencia de P v. NP es la pregunta: "¿Existen problemas fáciles de opción múltiple que no sean tan fáciles como los problemas verbales"? Es decir, ¿hay problemas para los cuales es fácil verificar la validez de una respuesta dada pero es difícil encontrar esa respuesta desde cero?

Ahora que entendemos intuitivamente qué es NP, tenemos que desafiar nuestra intuición. Resulta que hay "problemas de opción múltiple" que, en cierto sentido, son los más difíciles de todos: si uno encontrara una solución a uno de esos problemas "más difíciles de todos", sería capaz de encontrar una solución para TODOS NP problemas! Cuando Cook descubrió esto hace 40 años, fue una completa sorpresa. Estos problemas "más difíciles de todos" se conocen como NP-hard. Si encuentra una "solución de problemas de palabras" para uno de ellos, ¡encontrará automáticamente una "solución de problemas de palabras" para cada "problema de opción múltiple fácil"!

Finalmente, los problemas NP-completos son aquellos que son NP y NP-simultáneamente. Siguiendo nuestra analogía, son simultáneamente "fáciles como problemas de opción múltiple" y "los más difíciles de todos como problemas verbales".


18

Los problemas NP-completos son aquellos problemas que son tanto NP-Hard como en la clase de complejidad NP. Por lo tanto, para mostrar que cualquier problema dado es NP-completo, debe demostrar que el problema está en NP y que es NP-hard.

Los problemas que se encuentran en la clase de complejidad NP pueden resolverse de manera no determinista en tiempo polinómico y una posible solución (es decir, un certificado) para un problema en NP puede verificarse para su corrección en tiempo polinómico.

Un ejemplo de una solución no determinista al problema k-clique sería algo así como:

1) seleccione al azar k nodos de un gráfico

2) verifique que estos k nodos formen una camarilla.

La estrategia anterior es polinómica en el tamaño del gráfico de entrada y, por lo tanto, el problema k-clique está en NP.

Tenga en cuenta que todos los problemas resolubles resolubles en tiempo polinómico también están en NP.

Mostrar que un problema es NP-hard generalmente implica una reducción de algún otro problema NP-hard a su problema utilizando un mapeo de tiempo polinómico: http://en.wikipedia.org/wiki/Reduction_(complexity)


No es que vea algo en esta respuesta que sea incorrecto, pero no sé por qué fue aceptado. Realmente no ofrece mucho a lo que pedía el OP. Ni siquiera es realmente diferente de las explicaciones estándar de estos problemas, y no hay explicaciones claras sobre lo que hace que estos problemas en estas clases. No merece un voto negativo, pero ciertamente no vale la pena aceptar la respuesta.
San Jacinto

18

Creo que podemos responderlo mucho más sucintamente. Respondí una pregunta relacionada y copié mi respuesta desde allí.

Pero primero, un problema NP-duro es un problema para el cual no podemos probar que existe una solución de tiempo polinomial. La dureza NP de algún "problema-P" generalmente se prueba al convertir un problema NP-difícil ya probado en el "problema-P" en el tiempo polinómico.

Para responder el resto de la pregunta, primero debe comprender qué problemas NP-hard también son NP-complete. Si un problema NP-hard pertenece al conjunto NP, entonces es NP-complete. Para pertenecer al conjunto NP, un problema debe ser

(i) un problema de decisión,
(ii) el número de soluciones al problema debe ser finito y cada solución debe ser de longitud polinómica, y
(iii) dada una solución de longitud polinómica, deberíamos poder decir si la respuesta a el problema es sí / no

Ahora, es fácil ver que podría haber muchos problemas difíciles de NP que no pertenecen al conjunto de NP y son más difíciles de resolver. Como ejemplo intuitivo, la versión de optimización del vendedor ambulante donde necesitamos encontrar un horario real es más difícil que la versión de decisión del vendedor ambulante donde solo necesitamos determinar si existe o no un horario con longitud <= k.


5

Hay respuestas realmente buenas para esta pregunta en particular, por lo que no tiene sentido escribir mi propia explicación. Así que intentaré contribuir con un excelente recurso sobre diferentes clases de complejidad computacional.

Para alguien que piensa que la complejidad computacional se trata solo de P y NP, este es el recurso más exhaustivo sobre diferentes problemas de complejidad computacional. Además de los problemas solicitados por OP, enumeró aproximadamente 500 clases diferentes de problemas computacionales con descripciones agradables y también la lista de documentos de investigación fundamentales que describen la clase.


3

Según tengo entendido, un problema np-hard no es "más difícil" que un problema np-complete . De hecho, por definición, cada problema np-complete es:

  1. en NP
  2. np-hard

ingrese la descripción de la imagen aquí

- Introducción a Algorithms (3ed) por Cormen, Leiserson, Rivest y Stein, pg 1069


3
Tu comprensión es incorrecta. Su definición de NP-complete es correcta pero no tiene relación con su primera declaración. Todos los problemas en NP-hard son al menos tan difíciles como los de NP-complete; algunos (por ejemplo, el problema de detención, que es infinitamente difícil, y en.wikipedia.org/wiki/EXPSPACE ) son probablemente más difíciles.
Jim Balter

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.