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. :)
Réponses:
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.
la source
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 .
la source
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.
la source
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.
la source
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.
la source
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^k
pour certainsk
, oùn
est la taille de l'entrée. Par exemple, le tri peut être effectué dansn log n
lequel est inférieur àn^2
, donc le tri est un temps polynomial.Un problème est dans NP s'il existe un
k
tel qu'il existe au plus une solution de taillen^k
que vous pouvez vérifier dans le temps au plusn^k
. Prenez 3 coloriages de graphiques: étant donné un graphique, un 3 coloriages est une liste de paires (vertex, couleur) qui a une tailleO(n)
et vous pouvez vérifier dans le tempsO(m)
(ouO(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 =? NP
intéressante? Pour répondre à cela, il faut d'abord voir quels sont les problèmes NP-complets. Mettre tout simplement,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,
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).
la source