📘 Fiche de cours
L'essentiel du cours
La théorie de la complexité classe les problèmes selon les ressources nécessaires pour les résoudre.
- Classe P : Ensemble des problèmes de décision résolubles en temps polynomial $O(n^k)$. Ils sont considérés comme "faciles" ou "tractables".
- Classe NP : Ensemble des problèmes dont une solution proposée peut être vérifiée en temps polynomial.
- Relation P $\subseteq$ NP : Tout problème dans P est dans NP. La question ouverte est de savoir si P = NP.
- NP-complétude : Un problème $L$ est NP-complet s'il est dans NP et si tout problème de NP peut être réduit à $L$ en temps polynomial.
Méthodes à maîtriser
- Vérification d'un certificat : Savoir démontrer qu'un problème appartient à NP en montrant qu'une solution donnée se vérifie en $O(n^k)$.
- Réduction polynomiale : Utiliser une transformation $f$ telle que $x \in A \iff f(x) \in B$ pour prouver la difficulté relative.
- Analyse de complexité : Identifier si un algorithme est de type exponentiel $O(2^n)$ ou polynomial $O(n^k)$.
Exemples corrigés
- Exemple 1 : Le tri par insertion est dans P car sa complexité est $O(n^2)$.
- Exemple 2 : Le problème du voyageur de commerce (TSP) est dans NP car, étant donné un circuit, on peut sommer les poids des arêtes en $O(n)$ et vérifier s'ils sont inférieurs à $K$.
Erreurs fréquentes
- Confondre "NP" avec "Non-Polynomial" (NP signifie Nondeterministic Polynomial).
- Croire que P = NP est démontré (c'est l'un des problèmes du millénaire non résolu).
- Penser qu'un problème NP-complet est impossible à résoudre (on peut trouver des solutions approchées ou heuristiques).