web-dev-qa-db-fra.com

Quelles sont les différences entre NP, NP-Complete et NP-Hard?

Quelles sont les différences entre NP, NP-Complete et NP-Hard?

Je connais de nombreuses ressources sur le Web. J'aimerais lire vos explications, parce qu'elles pourraient être différentes de ce qui se passe actuellement, ou encore, il y a quelque chose que je ne connais pas.

1044
DarthVader

Je suppose que vous recherchez des définitions intuitives, car les définitions techniques demandent un certain temps à comprendre. Tout d’abord, rappelons-nous un concept préliminaire nécessaire pour comprendre ces définitions.

  • Problème de décision : Un problème avec un oui ou non réponse.

Définissons maintenant ces classes de complexité .

P

P est une classe de complexité qui représente l'ensemble des problèmes de décision pouvant être résolus en temps polynomial .

Autrement dit, étant donné un exemple du problème, la réponse oui ou non peut être décidée en temps polynomial.

Exemple

Avec un graphe connexe G, ses sommets peuvent-ils être colorés à l'aide de deux couleurs afin qu'aucun bord ne soit monochromatique?

Algorithme: commencez avec un sommet arbitraire, colorez-le en rouge et tous ses voisins en bleu et continuez. Arrêtez-vous lorsque vous êtes à court de sommets ou que vous devez obliger un bord à avoir la même couleur aux deux extrémités.


NP

NP est une classe de complexité qui représente l'ensemble des problèmes de décision pour lesquels les instances où la réponse est "oui" ont des preuves vérifiables en temps polynomial.

Cela signifie que si quelqu'un nous donne une instance du problème et un certificat (parfois appelé témoin) à la réponse affirmative, nous pouvons vérifier qu'il est correct en temps polynomial.

Exemple

La factorisation entière est en NP. C’est le problème que les entiers donnés n et m, existe-t-il un entier f avec 1 < f < m, tel que f divise n (f est un petit facteur de n)?

C'est un problème de décision car les réponses sont oui ou non. Si quelqu'un nous donne une instance du problème (pour nous donner des entiers n et m) et un entier f avec 1 < f < m, et déclare que f est un facteur de n (le certificat), nous pouvons vérifier la réponse en temps polynomial en effectuant la division n / f.


NP-complet

NP-Complete est une classe de complexité représentant l'ensemble des problèmes X dans NP pour lesquels il est possible de réduire tout autre NP. problème Y à X en temps polynomial.

Intuitivement, cela signifie que nous pouvons résoudre Y rapidement si nous savons comment résoudre X rapidement. Précisément, Y est réductible à X, s'il existe un algorithme temporel polynomial f pour transformer les instances y de Y en instances x = f(y) de X en temps polynomial, avec la propriété que la réponse à y est oui, si et seulement si la réponse à f(y) est oui.

Exemple

3-SAT. C’est le problème dans lequel on nous donne une conjonction (ET) de disjonctions à 3 clauses (OR), des déclarations de la forme

(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)

où chaque x_vij est une variable booléenne ou la négation d'une variable d'une liste prédéfinie finie (x_1, x_2, ... x_n).

On peut montrer que chaque problème NP peut être réduit à 3-SAT . La preuve en est technique et nécessite l'utilisation de la définition technique de NP ( basée sur des machines de Turing non déterministes ). Ceci est connu sous le nom de théorème de Cook .

Ce qui rend les problèmes NP-complets importants, c’est que s’il est possible de trouver un algorithme déterminant le temps polynomial pour résoudre l’un d’eux, chaque problème NP peut être résolu en temps polynomial (un problème permettant de les régler tous).


NP-dur

Intuitivement, ce sont les problèmes qui sont au moins aussi difficiles que les problèmes NP-complets . Notez que les problèmes NP-difficiles ne doivent pas nécessairement être dans NP et , ils ne doivent pas nécessairement être des problèmes de décision .

La définition précise ici est que un problème X est NP-difficile, s’il existe un problème NP-complet Y, tel que Y puisse être réduit à X en temps polynomial .

Mais comme tout problème NP-complet peut être réduit à tout autre problème NP-complet en temps polynomial, tous les problèmes NP-complet peuvent être réduits à tout problème NP-difficile en temps polynomial. Ensuite, s’il existe une solution à un problème NP-difficile en temps polynomial, il existe une solution à tous les problèmes NP en temps polynomial.

Exemple

Le problème d'arrêt est un problème NP-difficile. C'est le problème qui, étant donné qu'un programme P et une entrée I, s'arrête-t-il? C'est un problème de décision, mais ce n'est pas dans NP. Il est clair que tout problème NP-complet peut être réduit à celui-ci. Autre exemple, tout problème NP-complet est NP-difficile.

Mon problème NP-complet préféré est le problème de dragueur de mines .


P = NP

Celui-ci est le problème le plus célèbre en informatique, et l'une des questions en suspens les plus importantes en sciences mathématiques. En fait, le Clay Institute offre un million de dollars pour trouver une solution au problème (le commentaire de Stephen Cook résumé sur le site Web de Clay est plutôt bon).

Il est clair que P est un sous-ensemble de NP. La question ouverte est de savoir si NP problèmes ont ou non des solutions déterministes en fonction du temps polynomial. On croit en grande partie que ce n'est pas le cas. Voici un remarquable article récent sur le dernier (et l’importance) du problème P = NP: Le statut du problème P versus NP .

Le meilleur livre sur le sujet est Computers and Intractability de Garey et Johnson.

1342
jason

J'ai regardé autour de moi et vu de nombreuses explications longues. Voici un petit tableau qu'il peut être utile de résumer:

Remarquez comment la difficulté augmente de haut en bas: tout NP peut être réduit à NP-Complet , et tout NP-Complet peut être réduit à NP-dur , tout en temps P (polynôme).

Si vous pouvez résoudre une classe de problèmes plus difficile en temps P, cela signifie que vous aurez trouvé comment résoudre tous les problèmes plus faciles en temps P (par exemple, prouver P = NP, si vous trouvez comment résoudre tout problème NP-Complete dans P temps).

 ____________________________________________________________ 
 | Type de problème | Vérifiable en temps P | Solvable en temps P | Difficulté croissante 
 ___________________________________________________________ | | 
 | P | Oui | Oui | | 
 | NP | Oui | Oui ou non * | | 
 | NP-Complete | Oui | Inconnu | | 
 | NP-dur | Oui ou non ** | Inconnu *** | | 
 ____________________________________________________________ V 

Remarques sur les entrées Yes ou No:

  • * Un problème NP qui est aussi P peut être résolu en P temps.
  • ** Un problème NP-Hard qui est aussi NP-Complete est vérifiable dans le temps imparti.
  • *** Les problèmes NP-Complete (qui forment tous un sous-ensemble de NP-difficile) pourraient être. Le reste de NP difficile n'est pas.

J'ai aussi trouvé ce diagramme très utile pour voir comment tous ces types se correspondent (faites plus attention à la moitié gauche du diagramme).

240
Johnson Wong

C'est une réponse très informelle à la question posée.

Peut-on écrire 3233 comme le produit de deux autres nombres plus grands que 1? Y a-t-il un moyen de marcher sur un sentier autour de tous les Sept ponts de Königsberg sans prendre aucun pont deux fois? Ce sont des exemples de questions qui partagent un trait commun. Il n’est peut-être pas évident de savoir comment déterminer efficacement la réponse, mais si la réponse est "oui", la preuve de vérification est courte et rapide. Dans le premier cas, une factorisation non triviale de 51; dans le second, un itinéraire pour marcher sur les ponts (en respectant les contraintes).

Un problème de décision est un ensemble de questions avec des réponses oui ou non qui ne varient que d’un paramètre à l’autre. Dites le problème COMPOSITE = {"_ est n composite": n est un entier} ou EULERPATH = {"Le graphe G a-t-il un chemin d'Euler?": G est un graphe fini}.

Maintenant, certains problèmes de décision se prêtent à des algorithmes efficaces, voire évidents. Euler a découvert un algorithme efficace pour des problèmes tels que les "Sept ponts de Königsberg" il y a plus de 250 ans.

Par ailleurs, pour de nombreux problèmes de décision, la réponse n’est pas évidente, mais si vous connaissez des informations supplémentaires, il est évident de savoir comment prouver que vous avez la bonne réponse. COMPOSITE, c'est comme ça: la division d'essai est l'algorithme évident, et c'est lent: pour factoriser un nombre à 10 chiffres, vous devez essayer quelque chose comme 100 000 diviseurs possibles. Mais si, par exemple, quelqu'un vous a dit que 61 est un diviseur de 3233, une simple division longue est un moyen efficace de voir si elles sont correctes.

La classe de complexité NP est la classe de problèmes de décision où les réponses "oui" doivent être courtes à indiquer, rapides pour vérifier les preuves. Comme COMPOSITE. Un point important est que cette définition ne dit rien sur la difficulté du problème. Si vous avez un moyen correct et efficace de résoudre un problème de décision, il suffit de noter les étapes de la solution.

La recherche sur les algorithmes se poursuit et de nouveaux algorithmes intelligents sont créés tout le temps. Un problème que vous ne savez peut-être pas comment résoudre efficacement aujourd'hui peut s'avérer être une solution efficace (sinon évidente) pour demain. En fait, il a fallu aux chercheurs jusqu’à 2002 pour trouver une solution efficace à COMPOSITE! Avec toutes ces avancées, il faut vraiment se demander: est-ce que le fait d’avoir de courtes preuves n’est qu’une illusion? Peut-être que chaque problème de décision qui se prête à des preuves efficaces a une solution efficace? Personne ne le sait .

Peut-être la plus grande contribution à ce domaine est-elle venue avec la découverte d'une classe particulière de NP problèmes. En jouant avec les modèles de circuit pour le calcul, Stephen Cook a découvert un problème de décision de la variété NP qui était manifestement aussi difficile ou plus difficile que chaque autre NP problème. Une solution efficace pour le problème problème de satisfiabilité booléenne pourrait être utilisée pour créer une solution efficace à tout autre problème dans NP. Peu de temps après, Richard Karp a montré qu'un certain nombre d'autres problèmes de décision pouvaient servir le même objectif. Ces problèmes, en un sens les problèmes "les plus difficiles" de NP, ont été appelés problèmes NP-complets .

Bien sûr, NP n'est qu'une classe de problèmes de décision. De nombreux problèmes ne sont pas naturellement énoncés de cette manière: "trouve les facteurs de N", "trouve le chemin le plus court dans le graphe G qui visite chaque sommet", "donne un ensemble d'assignations de variables rendant vraie l'expression booléenne suivante". Bien que l'on puisse parler de manière informelle de certains problèmes de ce type comme étant "dans NP", techniquement, cela n'a pas beaucoup de sens - ce ne sont pas des problèmes de décision. Certains de ces problèmes pourraient même avoir le même genre de pouvoir qu'un problème NP-complet: une solution efficace à ces problèmes (sans décision) conduirait directement à une solution efficace à tout problème NP. Un problème comme celui-ci s'appelle NP-hard .

74
Managu

En plus des autres bonnes réponses, voici le schéma typique utilisé par les gens pour montrer la différence entre NP, NP-Complete et NP-Hard:

enter image description here

56
Franck Dernoncourt

P (Temps polynomial): Comme son nom l'indique, ce sont les problèmes qui peuvent être résolus en temps polynomial.

NP (Temps non déterministe-polynomial): Ce sont les problèmes de décision qui peuvent être vérifiés en temps polynomial. Cela signifie que si je prétends qu'il existe une solution polynomiale pour un problème particulier, vous me demandez de le prouver. Ensuite, je vous donnerai une preuve que vous pourrez facilement vérifier en temps polynomial. Ces types de problèmes sont appelés problèmes NP. Notez que nous ne parlons pas ici de savoir s’il existe ou non une solution polynomiale pour résoudre ce problème. Mais nous parlons de vérifier la solution à un problème donné en temps polynomial.

NP-Hard: Ce sont au moins aussi difficiles que les problèmes les plus difficiles dans NP. Si nous pouvons résoudre ces problèmes en temps polynomial, nous pouvons résoudre tout problème NP qui peut éventuellement exister. Notez que ces problèmes ne sont pas nécessairement NP. Cela signifie que nous pouvons ou ne pouvons pas vérifier la solution à ces problèmes en temps polynomial.

NP-Complete: Ce sont les problèmes qui sont à la fois NP et NP-Hard. Cela signifie que si nous pouvons résoudre ces problèmes, nous pourrons résoudre tout autre problème NP et les solutions à ces problèmes pourront être vérifiées en temps polynomial.

55

Le moyen le plus simple d’expliquer P v. NP et autres sans entrer dans les détails techniques consiste à comparer les "problèmes de Word" aux "problèmes à choix multiples".

Lorsque vous essayez de résoudre un "problème Word", vous devez trouver la solution à partir de zéro. Lorsque vous essayez de résoudre un "problème à choix multiples", vous avez le choix: résolvez-le comme vous le feriez avec un "problème de Word" ou essayez de brancher chacune des réponses qui vous sont données et de choisir la réponse candidate qui vous convient.

Il arrive souvent qu’un "problème à choix multiples" soit beaucoup plus facile que le "problème de Word" correspondant: substituer les réponses du candidat et vérifier si elles s’intègrent peut demander beaucoup moins d’efforts que de trouver la bonne réponse à partir de rien.

Maintenant, si nous convenons que l'effort qui prend le temps polynomial est "facile", la classe P sera composée de "problèmes de Word faciles" et la classe NP sera composée de "problèmes faciles à choix multiples".

L'essence de P v. NP est la question suivante: "Existe-t-il des problèmes faciles à choix multiples qui ne sont pas faciles à résoudre en tant que problèmes de Word"? Autrement dit, existe-t-il des problèmes pour lesquels il est facile de vérifier la validité d'une réponse donnée, mais il est difficile de trouver cette réponse à partir de zéro?

Maintenant que nous comprenons intuitivement ce que NP est, nous devons remettre en question notre intuition. Il s’avère qu’il existe des "problèmes à choix multiples" qui, d’une certaine manière, sont les plus difficiles de tous: si l’on trouvait une solution à l’un de ces problèmes, le plus difficile de tous, on pourrait trouver une solution à TOUS NP problèmes! Lorsque Cook a découvert cela il y a 40 ans, cela a été une surprise totale. Ces "problèmes les plus difficiles" sont connus sous le nom de NP-hard. Si vous trouvez une "solution à un problème Word" pour l'un d'entre eux, vous trouverez automatiquement une "solution à un problème Word" pour chaque "problème simple à choix multiples"!

Enfin, les problèmes NP-complets sont ceux qui sont simultanément NP et NP-hard. Suivant notre analogie, ils sont à la fois "simples à problèmes à choix multiples" et "les plus difficiles à résoudre, tous en tant que problèmes de Word".

44
Michael

Je pense que nous pouvons y répondre beaucoup plus succinctement. J'ai répondu à question connexe , et j'ai copié ma réponse à partir de là

Mais d’abord, un problème NP-difficile est un problème pour lequel nous ne pouvons pas prouver qu’une solution temporelle polynomiale existe. La dureté NP de certains "problèmes-P" est généralement prouvée en convertissant un problème déjà éprouvé NP-difficile en "problème-P" en temps polynomial.

Pour répondre à la suite de la question, vous devez d’abord comprendre quels problèmes NP-difficiles sont également NP-complets. Si un problème NP-difficile appartient à l'ensemble NP, il est NP-complet. Pour appartenir à l'ensemble NP, un problème doit être

(i) un problème de décision,
(ii) le nombre de solutions au problème devrait être fini et chaque solution devrait avoir une longueur polynomiale, et
(iii) avec une solution à longueur polynomiale, nous devrions pouvoir dire si la réponse au problème est oui/non

Maintenant, il est facile de voir qu'il pourrait y avoir beaucoup de problèmes NP-difficiles qui n'appartiennent pas à l'ensemble NP et qui sont plus difficiles à résoudre. À titre d’exemple intuitif, la version d’optimisation du voyageur voyageur pour laquelle nous devons trouver un emploi du temps réel est plus difficile que la version décisionnelle de l’employé voyageur pour laquelle nous devons simplement déterminer si un emploi du temps de longueur <= k existe ou non.

18
Sushant Sharma

Les problèmes NP-complets sont les problèmes qui sont à la fois NP-Difficile et de la classe de complexité NP. Par conséquent, pour montrer que tout problème donné est NP-complet, vous devez montrer que le problème se trouve à la fois dans NP et qu'il est NP-difficile.

Les problèmes qui appartiennent à la classe de complexité NP peuvent être résolus de manière non déterministe en temps polynomial et une solution possible (par exemple, un certificat) pour un problème dans NP peut être vérifiée pour en assurer l'exactitude dans Temps polynomial.

Voici un exemple de solution non déterministe au problème de la k-clique:

1) sélectionner au hasard k nœuds d'un graphique

2) vérifiez que ces k nœuds forment une clique.

La stratégie ci-dessus est polynomiale dans la taille du graphe en entrée et le problème de k-clique est donc dans NP.

Notez que tous les problèmes résolvables de manière déterministe en temps polynomial sont également en NP.

Montrer qu'un problème est NP-difficile implique généralement une réduction de votre problème à l'aide d'un mappage temporel polynomial: http://en.wikipedia.org/wiki/Reduction_ (complexité) =

16
awesomo

Il y a vraiment de bonnes réponses à cette question particulière, il est donc inutile d'écrire ma propre explication. Je vais donc essayer de contribuer avec une excellente ressource sur différentes classes de complexité informatique.

Pour quelqu'un qui pense que la complexité de calcul ne concerne que P et NP, voici la ressource la plus exhaustive à propos de différents problèmes de complexité de calcul. Outre les problèmes soulevés par OP, il a répertorié environ 500 catégories différentes de problèmes de calcul avec des descriptions de Nice, ainsi que la liste des documents de recherche fondamentale décrivant la classe.

5
Salvador Dali

Si je comprends bien, un problème np-hard n'est pas "plus difficile" qu'un problème np-complet. En fait, par définition, chaque problème de np-complete est:

  1. en NP
  2. np-hard

enter image description here

- Intro. to Algorithms (3ed) de Cormen, Leiserson, Rivest et Stein, pg 1069

3
MrDrews

Trouvez une définition intéressante:

enter image description here

1
sendon1982