Qu'est-ce que "P = NP?", Et pourquoi est-ce une question si célèbre? [fermé]

234

La question de savoir si P = NP est peut-être la plus célèbre de toute l'informatique. Qu'est-ce que ça veut dire? Et pourquoi est-ce si intéressant?

Oh, et pour un crédit supplémentaire, veuillez poster une preuve de la vérité ou du mensonge de la déclaration. :)

raldi
la source
11
Comme joliment présenté par Scott Aaronson, MIT "Si P = NP, alors le monde serait un endroit profondément différent de ce que nous supposons habituellement. Il n'y aurait pas de valeur spéciale dans les" sauts créatifs ", pas d'écart fondamental entre résoudre un problème et reconnaître la solution une fois qu'elle a été trouvée. Tous ceux qui pourraient apprécier une symphonie seraient Mozart; tous ceux qui pourraient suivre un argument étape par étape seraient Gauss ... "extrait de en.wikipedia.org/wiki/Complexity_classes_P_and_NP .
gts

Réponses:

365

P représente le temps polynomial. NP signifie temps polynomial non déterministe.

Définitions:

  • Le temps polynomial signifie que la complexité de l'algorithme est O (n ^ k), où n est la taille de vos données (par exemple le nombre d'éléments dans une liste à trier), et k est une constante.

  • La complexité est le temps mesuré en nombre d'opérations qu'il faudrait, en fonction du nombre d'éléments de données.

  • L'opération est tout ce qui a du sens en tant qu'opération de base pour une tâche particulière. Pour le tri, l'opération de base est une comparaison. Pour la multiplication matricielle, l'opération de base est la multiplication de deux nombres.

Maintenant, la question est de savoir ce que signifie déterministe vs non déterministe? Il existe un modèle de calcul abstrait, un ordinateur imaginaire appelé machine de Turing (TM). Cette machine a un nombre fini d'états et une bande infinie, qui a des cellules discrètes dans lesquelles un ensemble fini de symboles peut être écrit et lu. À tout moment, la TM est dans l'un de ses états et regarde une cellule particulière de la bande. Selon ce qu'il lit dans cette cellule, il peut écrire un nouveau symbole dans cette cellule, déplacer la bande d'une cellule vers l'avant ou vers l'arrière et passer dans un état différent. C'est ce qu'on appelle une transition d'état. Étonnamment, en construisant soigneusement des états et des transitions, vous pouvez concevoir une MT, qui est équivalente à tout programme informatique qui peut être écrit.

Il existe deux types de MT qui nous concernent ici: déterministes et non déterministes. Un TM déterministe n'a qu'une transition de chaque état pour chaque symbole qu'il lit sur la bande. Une MT non déterministe peut avoir plusieurs de ces transitions, c'est-à-dire qu'elle est capable de vérifier plusieurs possibilités simultanément. C'est un peu comme générer plusieurs threads. La différence est qu'une MT non déterministe peut engendrer autant de "threads" qu'elle le souhaite, alors que sur un ordinateur réel, seul un nombre spécifique de threads peut être exécuté à la fois (égal au nombre de CPU). En réalité, les ordinateurs sont essentiellement des MT déterministes avec des bandes finies. D'un autre côté, une MT non déterministe ne peut pas être réalisée physiquement, sauf peut-être avec un ordinateur quantique.

Il a été prouvé que tout problème pouvant être résolu par une MT non déterministe peut être résolu par une MT déterministe. Cependant, on ne sait pas combien de temps cela prendra. L'instruction P = NP signifie que si un problème prend du temps polynomial sur une MT non déterministe, alors on peut construire une TM déterministe qui résoudrait le même problème également en temps polynomial. Jusqu'à présent, personne n'a été en mesure de prouver que cela peut être fait, mais personne n'a été en mesure de prouver que cela ne peut pas être fait non plus.

Un problème NP-complet signifie un problème NP X, de sorte que tout problème NP Y peut être réduit à X par une réduction polynomiale. Cela implique que si quelqu'un propose une solution en temps polynomial à un problème NP-complet, cela donnera également une solution en temps polynomial à tout problème NP. Cela prouverait donc que P = NP. Inversement, si quelqu'un devait prouver que P! = NP, alors nous serions certains qu'il n'y a aucun moyen de résoudre un problème NP en temps polynomial sur un ordinateur conventionnel.

Un exemple de problème NP-complet est le problème de trouver une affectation de vérité qui rendrait vraie une expression booléenne contenant n variables.
Pour le moment dans la pratique, tout problème qui prend du temps polynomial sur la MT non déterministe ne peut être fait qu'en temps exponentiel sur une TM déterministe ou sur un ordinateur conventionnel.
Par exemple, la seule façon de résoudre le problème d'affectation de la vérité est d'essayer 2 ^ n possibilités.

Dima
la source
5
Il n'est pas vrai que la seule façon de résoudre SAT soit l'énumération des cas. Voir en.wikipedia.org/wiki/… pour plus d'informations sur l'algorithme DPLL, qui est en fait très efficace dans de nombreux cas courants.
Doug McClean
44
Derek, je vous prie de ne pas être d'accord. Je ne vois vraiment pas comment vous expliquez P et NP sans les machines Turing. J'étais une fois dans une classe d'algorithmes, qui a essayé ça. Si je ne connaissais pas les MT, je serais totalement perdu.
Dima
4
C'est vrai dans la pratique que la résolution de problèmes NP-complets prend plus de temps que le polynôme sur un ordinateur réel, mais ce n'est pas ce que cela signifie, c'est juste l'état actuel de la technique, en raison du fait que P = NP est inconnu. Si quelqu'un trouvait un algorithme polynomial pour résoudre n'importe quel problème NP-complet, cela prouverait P = NP, et nous savons que cela ne s'est pas produit car ce serait dans les nouvelles! Inversement, s'il était prouvé que P! = NP, alors nous pourrions dire avec confiance qu'aucun problème NP-complet n'est résoluble en temps polynomial.
Steve Jessop
21
Je sais que c'est assez vieux, mais je veux juste dire que la réponse est épique et c'est la première qui a cliqué pour moi! Bon travail
Dimitar Dimitrov
4
Correction dans l'avant-dernier paragraphe: "nous serions certains qu'il n'y a aucun moyen de résoudre un problème NP Complete en temps polynomial sur un ordinateur conventionnel", car P est un sous-ensemble de NP et prouvant P! = NP ne dit pas nécessairement quoi que ce soit sur les problèmes de NP qui ne sont pas NP-Complete sont en fait en P.
Millie Smith
88
  1. Un problème oui ou non est dans P ( P temps olynomial ) si la réponse peut être calculée en temps polynomial.
  2. Un problème oui ou non est NP ( N sur déterministe P temps olynomial) si une réponse oui peut être vérifiée en temps polynomial.

Intuitivement, nous pouvons voir que si un problème est en P , alors il est en NP . Étant donné une réponse potentielle à un problème dans P , nous pouvons vérifier la réponse en recalculant simplement la réponse.

Moins évident, et beaucoup plus difficile de répondre, est de savoir si tous les problèmes NP sont en P . Le fait de pouvoir vérifier une réponse en temps polynomial signifie-t-il que nous pouvons calculer cette réponse en temps polynomial?

Il existe un grand nombre de problèmes importants qui sont connus pour être NP- complétés (en gros, si ces problèmes s'avèrent être en P , alors tous les NP problèmes sont en P ). Si P = NP , il sera prouvé que tous ces problèmes ont une solution efficace (temps polynomial).

La plupart des scientifiques pensent que P ! = NP . Cependant, aucune preuve n'a encore été établie pour P = NP ou P ! = NP . Si quelqu'un fournit une preuve pour l'une ou l'autre conjecture, il gagnera 1 million de dollars .

Parc Derek
la source
23

Pour donner la réponse la plus simple à laquelle je puisse penser:

Supposons que nous ayons un problème qui nécessite un certain nombre d'entrées et qui ait diverses solutions potentielles, qui peuvent ou non résoudre le problème pour des entrées données. Un casse-tête logique dans un magazine de puzzle serait un bon exemple: les entrées sont les conditions ("George ne vit pas dans la maison bleue ou verte"), et la solution potentielle est une liste de déclarations ("George vit dans le jaune maison, cultive des pois et possède le chien "). Un exemple célèbre est le problème des vendeurs ambulants: étant donné une liste de villes, les délais pour se rendre d'une ville à une autre et un délai, une solution potentielle serait une liste de villes dans l'ordre où le vendeur les visite, et cela fonctionnerait si la somme des temps de trajet était inférieure au délai.

Un tel problème est dans NP si nous pouvons vérifier efficacement une solution potentielle pour voir si cela fonctionne. Par exemple, étant donné une liste de villes que le vendeur doit visiter dans l'ordre, nous pouvons additionner les heures de chaque voyage entre les villes et voir facilement si elles sont inférieures à la limite de temps. Un problème est dans P si nous pouvons trouver efficacement une solution si elle existe.

(Efficacement, ici, a une signification mathématique précise. Pratiquement, cela signifie que les gros problèmes ne sont pas excessivement difficiles à résoudre. Lors de la recherche d'une solution possible, une manière inefficace serait de répertorier toutes les solutions potentielles possibles, ou quelque chose de proche. , alors qu'un moyen efficace nécessiterait de rechercher un ensemble beaucoup plus limité.)

Par conséquent, le problème P = NP peut être exprimé de cette façon: si vous pouvez vérifier efficacement une solution pour un problème du type décrit ci-dessus, pouvez-vous trouver une solution (ou prouver qu'il n'y en a pas) efficacement? La réponse évidente est "Pourquoi devriez-vous être en mesure de le faire?", Et c'est à peu près où en est la question aujourd'hui. Personne n'a pu le prouver d'une manière ou d'une autre, et cela dérange beaucoup de mathématiciens et d'informaticiens. C'est pourquoi quiconque peut prouver la solution est à un million de dollars de la Fondation Claypool.

Nous supposons généralement que P n'est pas égal à NP, qu'il n'y a pas de moyen général de trouver des solutions. S'il s'avérait que P = NP, beaucoup de choses changeraient. Par exemple, la cryptographie deviendrait impossible, et avec elle toute sorte de confidentialité ou de vérifiabilité sur Internet. Après tout, nous pouvons efficacement prendre le texte crypté et la clé et produire le texte d'origine, donc si P = NP, nous pourrions trouver efficacement la clé sans le savoir au préalable. Le piratage de mot de passe deviendrait trivial. D'un autre côté, il existe des classes entières de problèmes de planification et d'allocation de ressources que nous pourrions résoudre efficacement.

Vous avez peut-être entendu la description NP-complete. Un problème NP-complet est un problème qui est NP (bien sûr), et a cette propriété intéressante: s'il est dans P, chaque problème NP l'est, et donc P = NP. Si vous pouviez trouver un moyen de résoudre efficacement le problème des vendeurs ambulants ou des puzzles logiques provenant de magazines de puzzles, vous pourriez résoudre efficacement n'importe quoi dans NP. Un problème NP-complet est, en quelque sorte, le type de problème NP le plus difficile.

Donc, si vous pouvez trouver une technique de solution générale efficace pour tout problème NP-complet, ou prouver que cela n'existe pas, la renommée et la fortune vous appartiennent.

David Thornley
la source
1
Dans votre avant-dernier paragraphe, vous avez "en quelque sorte, le tri le plus difficile". Vous devriez dire que NP-complete est le plus difficile car ils sont NP-hard.
grom
1
Je ne suis pas sûr que cette fortune vous appartienne. Le gouvernement voudra peut-être votre tête.
Millie Smith
9

Un bref résumé de mes humbles connaissances:

Il y a quelques problèmes de calcul faciles (comme trouver le chemin le plus court entre deux points dans un graphique), qui peuvent être calculés assez rapidement (O (n ^ k), où n est la taille de l'entrée et k est une constante (dans le cas des graphes, c'est le nombre de sommets ou d'arêtes)).

D'autres problèmes, comme trouver un chemin qui traverse chaque sommet d'un graphe ou obtenir la clé privée RSA à partir de la clé publique est plus difficile (O (e ^ n)).

Mais CS speak dit que le problème est que nous ne pouvons pas «convertir» une machine de Turing non déterministe en une machine déterministe, nous pouvons, cependant, transformer des automates finis non déterministes (comme l'analyseur d'expressions rationnelles) en automates déterministes (enfin, vous peut, mais le temps d'exécution de la machine sera long). Autrement dit, nous devons essayer tous les chemins possibles (généralement, les professeurs CS intelligents peuvent en exclure quelques-uns).

C'est intéressant car personne n'a la moindre idée de la solution. Certains disent que c'est vrai, certains disent que c'est faux, mais il n'y a pas de consensus. Une autre chose intéressante est qu'une solution serait nuisible pour les cryptages de clés publiques / privées (comme RSA). Vous pouvez les casser aussi facilement que la génération d'une clé RSA l'est maintenant.

Et c'est un problème assez inspirant.

terminus
la source
1
Ce n'est pas tout à fait vrai - vous pouvez convertir un NDTM en DTM, mais la nouvelle machine a une durée de fonctionnement exponentielle dans le temps de fonctionnement de l'original (vous effectuez d'abord une recherche approfondie dans le graphique de transition d'état du NDTM).
Adam Wright,
6

Il n'y a pas grand-chose que je puisse ajouter au quoi et pourquoi de la partie P =? NP de la question, mais en ce qui concerne la preuve. Non seulement une preuve mériterait un crédit supplémentaire, mais elle résoudrait l'un des problèmes du millénaire . Un sondage intéressant a été récemment réalisé et les résultats publiés (PDF) valent vraiment la peine d'être lus en ce qui concerne le sujet d'une preuve.

rjzii
la source
5

Tout d'abord, quelques définitions:

  • Un problème particulier est dans P si vous pouvez calculer une solution en moins de temps que n^kpour certains k, où nest la taille de l'entrée. Par exemple, le tri peut être effectué dans n log nlequel est inférieur à n^2, donc le tri est un temps polynomial.

  • Un problème est dans NP s'il existe un ktel qu'il existe au plus une solution de taille n^kque vous pouvez vérifier dans le temps au plus n^k. Prenez 3 coloriages de graphiques: étant donné un graphique, un 3 coloriages est une liste de paires (vertex, couleur) qui a une taille O(n)et vous pouvez vérifier dans le temps O(m)(ou O(n^2)) si tous les voisins ont des couleurs différentes. Un graphique n'est donc tricolore que s'il existe une solution courte et facilement vérifiable.

Une définition équivalente de NP est «problèmes pouvant être résolus par une machine de Turing N non déterministe en P temps olynomial ». Bien que cela vous indique d'où vient le nom, cela ne vous donne pas la même sensation intuitive de ce que sont les problèmes de NP.

Notez que P est un sous-ensemble de NP: si vous pouvez trouver une solution en temps polynomial, il existe une solution qui peut être vérifiée en temps polynomial - vérifiez simplement que la solution donnée est égale à celle que vous pouvez trouver.

Pourquoi la question est-elle P =? NPintéressante? Pour répondre à cela, il faut d'abord voir quels sont les problèmes NP-complets. Mettre tout simplement,

  • Un problème L est NP-complet si (1) L est dans P, et (2) un algorithme qui résout L peut être utilisé pour résoudre tout problème L 'dans NP; c'est-à-dire, étant donné une instance de L ', vous pouvez créer une instance de L qui a une solution si et seulement si l'instance de L' a une solution. Formellement, tout problème L 'dans NP est réductible à L.

Notez que l'instance de L doit être calculable en temps polynomial et avoir une taille polynomiale, de la taille de L '; de cette façon, la résolution d'un problème NP-complet en temps polynomial nous donne une solution de temps polynomial à tous les problèmes NP.

Voici un exemple: supposons que nous savons que la coloration 3 des graphiques est un problème NP-difficile. Nous voulons prouver que décider de la satisfiabilité des formules booléennes est également un problème NP-difficile.

Pour chaque sommet v, ayez deux variables booléennes v_h et v_l, et l'exigence (v_h ou v_l): chaque paire ne peut avoir que les valeurs {01, 10, 11}, que nous pouvons considérer comme la couleur 1, 2 et 3.

Pour chaque arête (u, v), ayez l'exigence que (u_h, u_l)! = (V_h, v_l). C'est,

not ((u_h and not u_l) and (v_h and not v_l) or ...) énumérant toutes les configurations égales et stipulant qu'aucune d'elles n'est le cas.

AND'ensemble toutes ces contraintes donne une formule booléenne qui a une taille polynomiale ( O(n+m)). Vous pouvez également vérifier qu'il faut du temps polynomial pour calculer: vous faites simplementO(1) trucs par sommet et par arête.

Si vous pouvez résoudre la formule booléenne que j'ai faite, vous pouvez également résoudre la coloration du graphique: pour chaque paire de variables v_h et v_l, laissez la couleur de v être celle correspondant aux valeurs de ces variables. Par construction de la formule, les voisins n'auront pas les mêmes couleurs.

Par conséquent, si la 3-coloration des graphiques est NP-complète, il en est de même de la satisfaction de formule booléenne.

Nous savons que la 3-coloration des graphiques est NP-complète; Cependant, historiquement, nous avons appris cela en montrant d'abord l'exhaustivité NP de la satisfiabilité du circuit booléen, puis en la réduisant à la colorabilité 3 (au lieu de l'inverse).

Jonas Kölker
la source