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 certains k
, où n
est la taille de l'entrée. Par exemple, le tri peut être effectué dans n 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 taille n^k
que 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 =? NP
inté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).