- PRESENTATION DES CLASSES
Un problème de décision est un problème dont la réponse est OUI ou NON/ VRAI ou FAUX (il pleut ? 3 est un nombre pair ?). Pour un problème P, notons O(P) l’ensemble des instances de P dont la réponse est OUI. Ainsi selon la difficulté à résoudre efficacement un problème et à vérifier la véracité de sa solution, on distingue :
- La classe P
La classe de complexité P ou classe Polynomiale se compose des problèmes qui sont résolubles en temps polynomial par rapport à la taille de l’entrée. Autrement dit cette classe regroupe les problèmes qui sont résolubles en temps O(nk) pour une certaine constance k ( n est la taille des entrées) . C’est la classe des problèmes dits faciles. On dit aussi, pour abréger, que l'algorithme lui-même est polynomial. Les algorithmes efficaces sont polynomiaux, c’est à dire les algorithmes non polynomiaux sont certainement inefficaces. A titre d’exemple, nous pouvons citer : le problème du plus court chemin (Dijkstra) et le problème de la détermination de l’arbre de recouvrement de poids minimum (Prim et Kruskal).
- La classe NP
La classe NP se compose des problèmes qui sont « vérifiables » en temps polynomial. Cela signifie : si l’on nous donne, d’une façon ou d’une autre, une solution « certifiée », nous pouvons vérifier que cette solution est correcte en temps polynomial par rapport à la taille de l’entrée. Par exemple, dans le problème du circuit hamiltonien, étant donné un graphe orienté G =(S, A), une solution certifiée serait une suite (v1, v2, v3,..., v|S|) de|S| sommets. Il est facile de vérifier en temps polynomial que (vi, vi+1) ∈ A pour i =1, 2,3,..., |S|−1 et que (v|S|, v1) ∈ A aussi.
Théorème : P ⊆ NP
Preuve : Soit p ∈ P et soit A un algorithme polynomial permettant de résoudre chaque instance de P. Pour une instance p ϵ O(P) , on peut vérifier que p ϵ O(P) en appliquant A, qui donne la réponse OUI en un temps0 polynomial. Ceci prouve que P ⊆ NP .
- La classe NP-Complet
La classe NP-complet contient les problèmes les plus difficiles de NP. Ces problèmes semblent vraiment ne pas faire partie de P (bien que à l’heure actuelle on ne possède pas une réponse définitive, voir la question irrésolue P = NP ?). Si nous sommes capables de trouver un moyen de résoudre efficacement (algorithme polynomial) un problème de NP-complet, nous pouvons alors utiliser cet algorithme pour résoudre tous les problèmes de NP.
En effet, un problème X appartient à NP-complet s’il est dans NP et si tout autre problème dans NP peut s’y réduire. On n’en déduit qu’une méthode “assez facile” pour prouver qu’un nouveau problème appartient à NP-complet est de montrer d’abord qu’il est dans NP, ensuite le réduire en un problème connu dans NP-complet. Par conséquent il est très utile de connaître une variété de problèmes NP-complets.