Skip to main content

Welcome to a Grasp lesson

Create a free account to keep studying and create your own study path.

Lesson 80

Classes P, NP et NP-Complétude

Recommended resources

Bonjour,

Dans notre leçon précédente, nous avons franchi une étape décisive en prouvant que certains problèmes, comme le problème de l'arrêt, sont indécidables. Nous avons ainsi établi une limite fondamentale à ce que les algorithmes peuvent accomplir. Aujourd'hui, nous nous tournons vers les problèmes qui sont, eux, décidables, mais nous leur posons une nouvelle question, tout aussi cruciale pour l'informaticien : pouvons-nous les résoudre efficacement ?

Cette leçon nous amène au cœur de la théorie de la complexité, un domaine essentiel pour l'Agrégation. L'objectif est de définir les classes de complexité P et NP, ainsi que la notion de NP-complétude. Ces concepts permettent de classifier les problèmes décidables selon leur difficulté et de formaliser la distinction entre les problèmes considérés comme "faciles" (tractables) et ceux qui sont présumés "difficiles" (intractables), même pour les ordinateurs les plus puissants.

1. Complexité : De Décidable à Tractable

Un problème peut être décidable, mais l'algorithme qui le résout peut être si lent qu'il est inutilisable en pratique. Prenons l'exemple du problème de 3-coloration d'un graphe : on peut tester toutes les colorations possibles, mais le nombre de possibilités explose de manière exponentielle avec la taille du graphe. Cela nous amène à distinguer les algorithmes "raisonnables" des autres.

[PDF] Complexité en temps. NP-complétude. Le paysage de la calculabilité

Pour commencer, ce document de cours de l'École Polytechnique pose les bases de notre réflexion. Il illustre de manière frappante la différence entre des temps de calcul polynomiaux et exponentiels et motive la définition formelle de ce que nous considérons comme un algorithme 'efficace'.

Lisez les diapositives 2 à 8 de ce document. Portez une attention particulière au tableau de la diapositive 5, qui compare la croissance des fonctions. Retenez la convention adoptée en informatique (diapositive 6) : un temps de calcul 'raisonnable' est un temps polynomial.


2. La Classe P : Les Problèmes Tractables

La convention que nous adoptons est de considérer qu'un problème est tractable s'il existe un algorithme pour le résoudre dont le temps d'exécution est polynomial en la taille de l'entrée. C'est ce qui définit la classe P.

Définition Formelle de P

Un problème de décision est dans la classe P s'il peut être résolu par une machine de Turing déterministe en un temps polynomial par rapport à la taille de l'entrée . Formellement, on note :

où est la classe des problèmes décidés par une machine de Turing en temps .

L'un des atouts de la classe P est sa robustesse : elle reste la même quel que soit le modèle de calcul déterministe raisonnable choisi (machine RAM, machine à k rubans, etc.), à un facteur polynomial près.

Exemples de problèmes dans P :

  • Vérifier si un graphe est correctement coloré (BON-COLORIAGE).
  • Trouver le plus court chemin entre deux points dans un graphe (algorithme de Dijkstra).
  • Trier une liste de nombres.

3. La Classe NP : Les Problèmes Vérifiables

De nombreux problèmes importants ne semblent pas avoir d'algorithme polynomial connu. Cependant, ils partagent une propriété fascinante : si quelqu'un nous donne une solution, nous pouvons vérifier très rapidement (en temps polynomial) si cette solution est correcte. C'est l'intuition derrière la classe NP.

Pour une introduction claire en français à ce concept, je vous propose la vidéo suivante.

Problèmes NP-complets

Cette vidéo de la chaîne 'Informatique Théorique' se concentre sur l'idée clé de la classe NP : la vérification rapide d'une solution proposée, qu'on appelle un 'certificat'.

Regardez le segment de 00:28 à 01:43. Notez bien comment les problèmes de nature existentielle ('existe-t-il...') se prêtent naturellement à cette définition via un 'certificat' ou une 'solution'.

Définition Formelle de NP

Un problème de décision est dans la classe NP (pour Non-deterministic Polynomial time) s'il existe un vérificateur polynomial.
Plus formellement, un langage est dans NP s'il existe un algorithme déterministe (le vérificateur) et un polynôme tels que :

  1. s'exécute en temps polynomial par rapport à la taille de l'entrée principale.
  2. Pour toute instance , on a : si et seulement s'il existe une chaîne de caractères (le certificat) de taille polynomiale () telle que accepte.

Exemples de problèmes dans NP :

  • SAT (Satisfaisabilité) : Étant donnée une formule logique, existe-t-il une assignation des variables qui la rend vraie ? Le certificat est l'assignation.
  • CHEMIN HAMILTONIEN : Existe-t-il un chemin qui visite chaque sommet d'un graphe exactement une fois ? Le certificat est la liste des sommets formant le chemin.
  • 3-COLORABILITÉ : Peut-on colorier un graphe avec 3 couleurs sans que deux voisins aient la même couleur ? Le certificat est la couleur attribuée à chaque sommet.

Une définition équivalente (et historique, donnant son nom à la classe) est que NP est la classe des problèmes pouvant être résolus en temps polynomial par une machine de Turing non-déterministe. Ce modèle peut être vu comme une machine qui "devine" magiquement la bonne suite de choix menant à une solution.

La Question à un Million de Dollars : P = NP ?

Par définition, tout problème dans P est aussi dans NP. Si un problème peut être résolu en temps polynomial, il peut a fortiori être vérifié en temps polynomial (le certificat peut être ignoré).
La question fondamentale est de savoir si l'inclusion est stricte : .

Est-ce que ?

Autrement dit, si une solution à un problème peut être vérifiée efficacement, peut-elle aussi être trouvée efficacement ? C'est le problème ouvert le plus célèbre de l'informatique. La plupart des chercheurs conjecturent que .


4. NP-Complétude : Les Problèmes les plus Difficiles de NP

Au sein de la classe NP, certains problèmes semblent être les "plus difficiles". Si l'un d'entre eux pouvait être résolu en temps polynomial, alors tous les problèmes de NP le pourraient aussi. Ces problèmes sont dits NP-complets.

Pour formaliser cette notion, nous avons besoin de l'outil de réduction polynomiale, qui est analogue à la réduction que nous avons évoquée pour l'indécidabilité, mais avec une contrainte de temps.

Réduction Polynomiale

Un problème se réduit en temps polynomial à un problème , noté , s'il existe une fonction calculable en temps polynomial qui transforme toute instance de en une instance de , de sorte que :

Intuitivement, si , alors est "au moins aussi difficile" que . Si on avait une solution efficace pour , on en aurait une pour .

Définitions de NP-difficulté et NP-complétude

  1. Un problème est NP-difficile (NP-hard) si tout problème se réduit en temps polynomial à ().

    • Ces problèmes sont au moins aussi difficiles que n'importe quel problème de NP. Ils ne sont pas nécessairement dans NP eux-mêmes (le problème de l'arrêt est NP-difficile, par exemple).
  2. Un problème est NP-complet (NP-complete) s'il satisfait deux conditions :

    • est NP-difficile.

Les problèmes NP-complets sont donc les problèmes les plus difficiles de la classe NP.

P Versus NP Complexity Theory
Ce diagramme illustre les relations entre les classes de complexité. L'image de gauche représente la conjecture la plus répandue, P ≠ NP. L'image de droite montre le cas où P = NP, où les trois classes P, NP et NP-complet fusionneraient.

Le professeur Demaine explique ces définitions et leurs implications de manière très claire.

16. Complexity: P, NP, NP-completeness, Reductions

Regardons maintenant comment ces concepts s'articulent. Ce segment de la vidéo du MIT définit formellement la NP-difficulté, la NP-complétude, et explique la stratégie de preuve par réduction.

Regardez de 14:09 à 18:02 pour les définitions, puis de 19:21 à 22:11 et de 24:14 à 27:05 pour comprendre le rôle crucial des réductions et la stratégie de preuve.

Le Premier Problème NP-complet : Le Théorème de Cook-Levin

Comment prouver qu'un premier problème est NP-complet ? Il faudrait montrer que tous les problèmes de NP se réduisent à lui. C'est l'exploit monumental accompli indépendamment par Stephen Cook (1971) et Leonid Levin (1973).

Théorème (Cook-Levin) : Le problème SAT est NP-complet.

La preuve (très complexe) montre que tout calcul d'une machine de Turing non-déterministe peut être encodé en une formule SAT de taille polynomiale.

Une fois que nous avons ce premier problème, nous pouvons en trouver d'autres par "chaînage" : pour prouver qu'un problème est NP-complet, il suffit de :

  1. Montrer que (généralement facile).
  2. Choisir un problème que l'on sait déjà NP-complet (comme SAT).
  3. Prouver que .

Par transitivité des réductions, si est NP-complet, et que , alors est au moins aussi difficile que , et donc est aussi NP-difficile.

Les documents de préparation à l'Agrégation, comme celui de l'ENS Rennes, confirment que cette structure de raisonnement (définitions, théorème de Cook, stratégie de preuve par réduction) est au cœur de ce qui est attendu de vous.

[PDF] Métaplans d'Informatique pour l'Agrégation - ENS Rennes

Pour synthétiser et vous familiariser avec le niveau d'attente de l'Agrégation, parcourez ce plan de leçon type sur les classes de complexité. Il vous donnera une vision structurée des concepts et de leur articulation.

Lisez les sections intitulées 'Plan détaillé' des leçons 915 (page 17) et 928 (page 37). Repérez les définitions de P, NP, réduction polynomiale, NP-dureté, NP-complétude, et le rôle central du théorème de Cook. Cela vous donne un excellent aperçu de la structure d'une réponse attendue au concours.


Conclusion : Le Paysage de la Complexité

Cette leçon a déplacé notre perspective de la calculabilité (ce qui est calculable ou non) vers la complexité (ce qui est tractable ou non).

Points clés à retenir :

  • La classe P contient les problèmes de décision résolubles en temps polynomial par une machine déterministe. Ce sont les problèmes considérés comme "tractables".
  • La classe NP contient les problèmes dont une solution peut être vérifiée en temps polynomial. Elle est définie formellement via la notion de certificat et de vérificateur.
  • La question est le problème ouvert majeur de l'informatique théorique.
  • Un problème est NP-difficile s'il est au moins aussi difficile que tous les problèmes de NP.
  • Un problème est NP-complet s'il est NP-difficile et est lui-même dans NP. Ces problèmes sont les plus difficiles de NP.
  • Le théorème de Cook-Levin a établi que SAT est le premier problème NP-complet, servant de point de départ pour prouver la NP-complétude d'une myriade d'autres problèmes par réduction polynomiale.

Prouver qu'un problème est NP-complet est une information capitale : cela suggère très fortement qu'il est inutile de chercher un algorithme exact et efficace pour le résoudre, et qu'il faut plutôt se tourner vers des heuristiques, des algorithmes d'approximation, ou des solutions pour des cas particuliers.

Dans la prochaine leçon, nous mettrons ces concepts en pratique en explorant le mécanisme de réduction polynomiale pour prouver qu'un autre problème fondamental, 3-SAT, est NP-complet.