LA SAISISSANTE QUESTION : P = NP ? J F Kentzel – Lycée Pardailhan à Auch (32) [email protected] Rappelant en fin d’année à mes élèves de terminale qu’en cas d’indétermination à l’infini « une lim a x si a 1 ), il me exponentielle l’emporte toujours sur une puissance » ( x x b revient à l’esprit que j’ai l’impression depuis quelques années que la plus jolie énigme mathématique du début du vingt et unième siècle est peut être cette question « P = NP ? » qui va être décrite dans ce qui suit. Explication pour un élève de la classe de première : Une suite géométrique u vérifiant u0 = 1 (autrement dit : définie par un = an , avec a fixé) est la restriction à IN d’une fonction exponentielle. 2n On se persuade facilement avec un tableur que, par exemple : lim 3 . n n 1.001n On démontre en terminale qu’on a aussi, par exemple : lim . n n1000 Quelques définitions incontournables 1 ) Un algorithme résolvant un problème est une suite d’opérations élémentaires menant à coup sur (pour n’importe quelle donnée du problème) en un nombre fini d’étapes à la résolution de ce problème pour la donnée considérée. Voir les exemples qui suivent. 2 ) Soit n un entier (positif). On dit qu’une donnée d’un problème est de taille n si on peut écrire (coder) cette donnée avec n chiffres ou symboles. Par exemple, 3662 est de taille 4. On prouverait facilement, avec les logarithmes de terminale, que le choix de l’ « alphabet » utilisé ( {a, b,…z}, {0,1,…9}, {0, 1},…) ne joue aucun rôle dans la question P / NP. 3 ) On dit qu’un algorithme A résolvant un problème est de complexité polynomiale s’il existe un polynôme f tel que toute donnée de taille n peut être traitée en au plus f ( n ) étapes. On dit aussi que A « travaille » en temps polynomial. On peut traduire le mot « étape » par « opération élémentaire ». Etre plus précis est sans importance pour la question P / NP. Le fonctionnement d’un algorithme demande du temps mais aussi de l’espace (espace -mémoire si l’algorithme fonctionne avec un ordinateur). On ne s’intéresse ici qu’au problème du temps. On dit que l’algorithme est de complexité exponentielle si dans la définition précédente on remplace f par g définie par g ( n ) = C.an avec des nombres a et C fixés (a vérifiant a > 1). Certains auteurs s’autorisent à dire que la complexité d’un algorithme est exponentielle dès qu’il est prouvé qu’elle n’est pas polynomiale. C’est sans importance pour la question P / NP. 4 ) Les problèmes concernés par la question P / NP sont appelés des problèmes de décision, . Résoudre un tel problème signifie répondre à une question par oui ou non pour chaque donnée fixée du problème. Voir les deux exemples qui suivent pour lesquels une donnée est un nombre entier x de n chiffres (au plus). On ne s’intéresse donc pas dans ce qui suit à des algorithmes qui génèrent un résultat numérique, du type « addition » (qui est polynomial « en n »; et peu importe que la complexité obtenue soit 2n 3 ou 4n 5 , ce n’est qu’un détail qui dépend du modèle mathématique de calcul, ou du langage de programmation informatique, 2 utilisé) , « multiplication » (polynomial « en n »)… Exemple 1 : le problème simplet DIVISIBLE PAR 2. Algorithme (vu en classe de sixième) : on lit le nombre x (ce qui fait n étapes au plus ) puis on compare son dernier chiffre à 0, 2, 4, 6 et 8 (5 étapes au maximum). Cet algorithme est polynomial de complexité 2 n + 5. Contre-exemple 2 : le problème PREMIER. 1 Algorithme (vu en classe de seconde) : on divise x par tous les entiers y vérifiant 1 y x . Dans le pire des cas on doit effectuer ( Ent ( x ) 1) divisions avant de savoir si x est premier ( Ent signifiant partie entière). L’écriture de x comporte n chiffres donc x 10 n 1 et Ent ( x ) Ent ( 10 n1 ) 3n1 . Cet algorithme n’est pas polynomial car l’expression 3 n 1 a la forme d’une exponentielle, qui l’emporte sur n’importe quel polynôme quand n devient grand. Raffiner cet algorithme en se limitant aux divisions de x par 2 puis par les nombres impairs (respectivement : par 3 puis par les non multiples de 3…etc) ne fait, en gros, que diviser le nombre de divisions par 2 (respectivement par 3…etc) et ne rend pas l’algorithme polynomial (quel que soit l’entier p premier fixé, le nombre d’opérations à n 1 effectuer, de l’ordre de 3 / 2.... p , est toujours un nombre « de forme exponentielle », en la variable n, c’est à dire non majorable par un polynôme). Les problèmes du type P On dit qu’un problème de décision est du type P lorsqu’on connaît un algorithme polynomial permettant de le résoudre (c’est à dire de déterminer si la réponse est oui ou non pour n’importe quelle donnée). Savoir si un problème est dans P est une question mathématique mais la notion de problème de type P a été introduite par des informaticiens car en pratique, même avec les plus puissants ordinateurs, on ne peut pas traiter les problèmes qui ne sont pas dans P dès que n est trop grand à cause de la croissance très rapide des fonctions exponentielles. Ce phénomène est parfois appelé « l’explosion combinatoire » : si un problème n’est pas dans P, les seuls algorithmes disponibles pour le résoudre doivent envisager un trop grand nombre de cas si les données sont de grande taille et même les meilleurs ordinateurs sont inefficaces. Voir le tableau page 10 de [1]. La question P / NP est a priori un problème théorique car en pratique il faudrait considérer un n très grand pour 3 n qu’une complexité (exponentielle) en 10 .1.01 donne plus d’opérations qu’une complexité (polynomiale) en 10 3. n1000 . Exemple 1 : on a vu que le problème DIVISIBLE PAR 2 est dans P. Exemple 2 : Le problème PREMIER est aussi dans P mais l’algorithme le prouvant n’a été trouvé qu’en 2002 et il est bien trop compliqué pour qu’il soit possible d’en parler ici . Cet algorithme est détaillé dans [2] mais il repose sur des notions d’arithmétiques dépassant nettement le niveau du bac. Les problèmes du type NP Exemples 3 et 4 : pour une configuration (finie bien sur) « villesroutes » du type ci-contre, on considère les problèmes EULERIEN et HAMILTONIEN qui correspondent respectivement aux énoncés : peut on déterminer un parcours fermé qui passe une fois et une seule par chaque route (par chaque ville)1 ? On voit que pour une configuration un peu compliquée, répondre oui ou non à une de ces deux questions est a priori difficile. Ces problèmes semblent, a priori, être de « complexité exponentielle », au sens où, désignant par n la taille des données (on verra plus loin qu’on peut considérer que n est le nombre de villes), on est sur de résoudre le problème en essayant tous les trajets possibles, lesquels sont, si chaque ville est reliée à toutes les autres par une route qui n’est pas à sens unique, au nombre de n ! / 2n (n 1)! / 2 , par exemple avec 4 villes A, B, C et D il y a a priori 4 ! = 24 parcours possibles mais ACBD =CBDA=BDAC=DACB, c’est le même parcours, on peut diviser 4 ! par 4, puis on peut diviser par 2 (sens de parcours), cependant qu’on prouve facilement, en terminale, par récurrence, que (n 1)! / 2 2 n dès que n 8 . Le nombre d’opérations à effectuer est bien, dans le pire des cas, d’ordre exponentiel.. 1 Ces exemples sont très concrets : le problème EULERIEN concerne les facteurs qui remplissent des boites aux lettres situées sur des routes et le problème HAMILTONIEN concerne les représentants de commerce qui visitent des magasins situés dans des villes. 2 En revanche, si on vous donne un parcours prouvant que la réponse est oui pour un des deux problèmes, vérifier que ce parcours est correct, et donc que la réponse est oui, est un jeu d’enfant (jeu d’enfant signifiant précisément que ça peut être fait par un algorithme travaillant en temps polynomial, c’est à dire rapidement et sans difficulté)… On dit que ces deux problèmes sont du type NP (ces initiales N et P sont expliquées au paragraphe suivant). La définition ne stipule pas que quand la réponse est oui on sait effectivement déterminer un parcours; on sait seulement prouver qu’il en existe un. Une preuve permettant d’affirmer que la réponse est oui pour une donnée (c’est à dire une configuration villes-routes) fixée est appelé un certificat de la réponse oui pour cette donnée. Un parcours-solution peut évidemment faire office de certificat. Il faut noter que la définition de NP ne dit rien des données pour lesquelles la réponse est non. Par ailleurs cette définition ne dit pas que quand la réponse est oui on sait trouver un certificat de cette réponse oui : elle dit seulement que si on vous donne un certificat, la vérification est facile et rapide. Exemple 5 : le problème COMPOSE. Ce problème est dit complémentaire du problème PREMIER car pour une donnée fixée (un entier), ils ont des réponses oui / non opposées. COMPOSE est évidemment dans NP : pour un entier x qui est composé, un certificat de la réponse oui pour x est un diviseur d non trivial (c’est à dire autre que 1 et x ) de x et si on vous donne d, la vérification est une simple division de x par d, elle se fait en temps polynomial. Exemple 6 : PREMIER aussi est dans NP mais on ne peut pas dire de façon convaincante en quelques lignes ce qu’est un certificat pour une réponse oui. Remarque : les problèmes COMPOSE et PREMIER sont dits inverses l’un de l’autre (ils échangent les réponses oui et non). Lorsqu’on sait qu’un problème est dans P, il va de soi que son problème inverse y est aussi. Il n’y a rien de tel avec NP car, contrairement à P, les réponses oui et non ne jouent pas un rôle symétrique dans la définition de NP. Conjecture de contre-exemple 7 : le problème K-VOYAGEUR DE COMMERCE. Pour la donnée d’une configuration villes-routes, on suppose connues les distances entre les villes (sans nécessairement que la distance considérée soit euclidienne : ces « poids » attribués aux routes peuvent représenter des durées, penser à des routes de montagne, des coûts, etc…). On peut alors pour tout k positif poser le problème :y a-t-il un unique plus court trajet fermé passant une fois et une seule par chaque ville et de longueur égale à k ? Ce problème ne semble pas être dans NP; sa complexité semble être intrinsèquement exponentielle : dans les pires cas, il peut être nécessaire d’étudier à peu près tous les parcours (qui ne sont pas en nombre polynomial comme on l’a vu à l’exemple 4) pour pouvoir répondre oui. La classe NP est très vaste : pour trouver des problèmes de décision dont on est sur qu’ils ne sont pas dans NP, il faut considérer des problèmes compliqués du type jeu d’échecs généralisé avec n cases sur chaque côté (au lieu de 8) et la question, pour une configuration de jeu donnée, « les noirs ont ils une stratégie gagnante ? » Signification des initiales N et P de NP La suite est tout à fait lisible même si ce paragraphe n’est pas bien compris ! Pour comprendre la signification des initiales N et P il faut faire un effort d’imagination : un « algorithme non déterministe2 » est un algorithme B dans lequel à chaque instruction on peut lancer plusieurs nouvelles séries de calculs (d’instructions) en parallèle (penser à un programme informatique qui à chaque instruction lancerait plusieurs sous-programmes; un tel programme ne pourrait fonctionner pour une donnée de grande taille car les possibilités de n’importe quel ordinateur finiraient par être dépassées !). Pour un problème de décision, la (grosse !) différence avec un algorithme déterministe est qu’il y a plusieurs sorties possibles On dit que B résout un problème en temps polynomial § avec la réponse oui si au moins une sortie (en temps polynomial) est oui. § avec la réponse non si toutes les sorties (en temps polynomial) sont non. Le principe d’un algorithme non déterministe est d’essayer toutes les possibilités…en même temps ! Pour les problèmes EULERIEN et HAMILTONIEN on part d’une ville et à chaque C’est là qu’a lieu l’effort d’imagination car les termes « algorithme » et « non déterministe » semblent se contredire ! 2 3 carrefour on essaie toutes les directions proposées. Pour le problème COMPOSE, on utilise l’algorithme de l’exemple 2 mais en effectuant tous les calculs en parallèle. Si pour une donnée, la réponse est oui, alors une des possibilités (au moins une ) permet d’obtenir un certificat. NP signifie « Non déterministe Polynomial ». Une autre façon de comprendre l’expression « non déterministe » : pour prouver qu’un problème est dans NP, pour une donnée de réponse oui, on n’a pas à déterminer (au sens de : trouver) une preuve de la réponse oui : on doit seulement savoir vérifier que la réponse est oui à l’aide d’un certificat qu’on nous donne. Lien entre les ensembles P et NP On a vu que NP ne signifie pas « Non Polynomial ». Il n’y a pas d’opposition entre P et NP. Reformulons les définitions de P et NP pour se persuader que P NP : Considérons un problème de décision. Si vous pouvez, pour n’importe quelle donnée, en temps polynomial (en la taille n de cette donnée) § prouver que la réponse est oui ou non, le problème est dans P. § prouver, quand la réponse est oui, que la réponse est effectivement oui, à l’aide d’un certificat qu’on vous donne, le problème est dans NP. P NP car {oui} {oui, non} et l’ensemble vide peut être considéré comme un certificat. Certains problèmes de NP sont donc dans P. Un des plus connus est le problème EULERIEN de l’exemple 3 (passer une fois et une seule par chaque route). C’est facile à voir si on a suivi la spécialité mathématiques en terminale ES, on traduit alors la question posée en termes de graphes : une configuration villes-routes est un graphe dont les sommets sont les villes A, B, C…, certains de ces sommets étant reliés par des arêtes, les routes) et il n’y a qu’à utiliser le théorème suivant, théorème historique pour la théorie des graphes, qui donne une condition assez simple pour permettre (en temps polynomial) de prouver qu’une configuration donne la réponse oui ou non. Théorème d’Euler : un graphe G admet un « cycle eulérien » (parcours fermé tel que chaque arête est parcourue une fois et une seule) si et seulement si : G est « connexe » (toute paire de sommets est reliée par une succession d’arêtes) et si tous ses sommets sont de « degré » pair. (C’est le cas ci-contre, tous les sommets sont de degré 2 ou 4. Intuitivement : il faut pouvoir « quitter » un sommet chaque fois qu’on y « arrive » : il est évident que la condition donnée est nécessaire). 0 1 0 0 0 1 1 0 1 0 1 1 0 1 0 1 1 1 0 0 1 0 1 0 0 1 1 1 0 1 1 1 1 0 1 0 2 On peut noter que la définition d’un graphe à n sommets est en fait la donnée de n nombres alors qu’on a dit à l’exemple 3 qu’on peut considérer qu’un tel graphe est une donnée de taille n . Ceci n’a aucune importance 2 dès qu’on ne s’intéresse qu’au caractère, polynomial ou non, des algorithmes : un polynôme en n est un polynôme en n et un polynôme en n est majorable (en prenant la valeur absolue des coefficients et en remplaçant n par n 2 ) par un polynôme en n 2 . En effet, un graphe à n sommets peut être représenté par un tableau à n lignes et n colonnes (on dit : une matrice n - n ) ne comportant3 que des 0 et des 1, voir ci-contre l’exemple du graphe G donné ci-dessus. On détermine s’il contient un cycle eulérien en regardant si chaque ligne, ou colonne, contient au moins un 1 (connexité) et si la somme de chacune des n lignes est paire (degrés pairs). Il est évident que ces ( n n 2 ) calculs peuvent être effectués en temps polynomial. On vient de voir comment répondre, en temps polynomial, au problème EULERIEN. La preuve donnée n’est pas constructive, c’est à dire qu’elle permet de dire si, oui ou non, un cycle eulérien existe mais sans déterminer effectivement un tel cycle (détermination qui n’est pas évidente : en parcourant au hasard les arêtes du graphe on peut être conduit à une impasse). Pour étudier le contre-exemple 7, on remplacerait les 0 par des et les 1 par les « poids » ( ou longueurs) des arêtes. Noter par ailleurs que cette représentation « matricielle » montre que les problèmes relatifs aux graphes peuvent être aisément informatisés : toute l’information relative à un graphe est contenue dans sa matrice. 3 4 Un algorithme de détermination d’un tel cycle existe (les représentants de commerce l’appellent « marguerite », son principe est un tour « central », obtenu en se déplaçant au hasard et en s’arrêtant dès qu’on retombe sur une ville déjà visitée, entouré de pétales; quand on part de A vers B pour former un pétale, comme ci-contre, on est sur de pouvoir revenir en A car le degré de A est pair ). On peut facilement montrer que cette détermination a lieu en temps polynomial mais trouver un tel algorithme est un « problème de recherche », hors-sujet dans le présent texte où il n’est question que de problèmes de décision. .Il n’existe aucun théorème du type de celui d’Euler pour les parcours hamiltoniens (à l’heure actuelle !). Les seuls théorèmes connus sont des conditions suffisantes pour qu’un graphe soit hamiltonien (disant, en gros, et c’est intuitivement compréhensible, qu’un graphe qui a « beaucoup » d’arêtes est hamiltonien). On ne sait donc pas si HAMILTONIEN est dans P. HAMILTONIEN n’est pas « prouvé dans P » parce qu’ « on ne comprend pas vraiment bien ce qu’est un graphe hamiltonien ». On a vu que P NP mais actuellement on ne sait pas si NP P et donc si P = NP. P NP est l’opinion très majoritaire, mais pas unanime, parmi les chercheurs4. Un institut américain propose un million de dollars à qui résoudra ce problème : voir [3]. La conjecture P NP est souvent qualifiée de conjecture majeure de la calculabilité ou de l’informatique théorique. Les problèmes NP-complets Certains problèmes de décision peuvent se ramener (se réduire) à d’autres. On dit que le problème E, d’ensemble de données DE , se ramène au problème F, d’ensemble de données DF , lorsqu’on connaît une application r, de DE dans DF telle que pour toute donnée x de DE : la réponse est oui pour x la réponse est oui pour r (x ). On voit que si pour tout x, r ( x ) peut être calculé en temps polynomial, F est dans P implique que E est dans P. Autrement dit, E est plus facile à résoudre que F5, plus précisément : E n’est pas plus difficile à résoudre que F. En 1971, l’Américain Stephen Cook découvrit une étonnante propriété d’un problème de la classe NP, nommé SAT (qu’il serait trop long de décrire ici) : tous les problèmes de NP peuvent se réduire en temps polynomial à SAT ! Il posa la définition : un tel problème est NPcomplet6. Si on savait résoudre le problème SAT en temps polynomial, on prouverait du même coup que tous les problème de NP sont dans P ! Il y a mieux : on découvrit peu à peu que des centaines de problèmes sont NP-complets. On en connaît actuellement des milliers dans des domaines très variés des mathématiques ou de l’informatique. HAMILTONIEN est un de ces problèmes. Le jeu actuellement si populaire du Sudoku ou les problèmes d’emplois du temps des proviseurs en sont d’autres. Voici deux autres exemples formalisés prouvant eux aussi que ces problèmes sont concrets : Exemple 7 : le problème SAC A DOS : un randonneur capable de porter le poids S voudrait emporter des objets de poids (entiers) x1, x2, …xn. Est ce qu’une somme de certains de ces nombres vaut exactement S ? n n Il y a a priori 2 sommes à essayer car on prouve facilement qu’il y a 2 parties dans un ensemble à n éléments : n n k nk .1 .1 1 1n . Or 2 n est une exponentielle. Cependant, si on vous donne un certificat de la réponse k 0 k oui, vérifier qu’il convient est rapide ! Exemple 8 : la 3-COLORATION. Dans une entreprise, certains salariés se détestent au point de ne pas pouvoir travailler efficacement dans le même bureau. Peut on loger tout le monde dans trois bureaux ? C’est une question de la spécialité math de la terminale ES : reprenant le graphe G à six sommets donné plus haut, chaque salarié étant représenté par un sommet, une inimitié entre deux salariés étant représentée par une arête entre les sommets correspondant, la question se dont certains pensent que cette question est indécidable, c’est à dire qu’on ne peut pas lui donner de réponse. au sens où toute donnée x de DE peut être traitée en temps polynomial par l’algorithme résolvant le problème F. La réciproque n’est pas vraie car une donnée y de DF peut avoir plusieurs antécédents dans DE (ou aucun) par r . 6 Le Russe Léonid Lévin obtint une définition équivalente à la même époque mais on ne l’apprit que plus tard : Internet n’existait pas et on était en pleine guerre froide. 4 5 5 traduit par : peut on colorer tous les sommets du graphe avec trois couleurs en respectant la consigne : deux sommets reliés par une arête doivent être colorés différemment ? (la réponse étant non à cause du « sous –graphe » BCEF qui montre qu’il faut au moins quatre bureaux de couleurs différentes) Contre –exemple 9 (conjecture) : PREMIER n’est pas NP-complet (sauf si P = NP). On savait depuis 1975 que PREMIER est dans NP. Quand PREMIER a été déclaré dans P en 2002, ça a suscité de l’intérêt mais pas d’émoi car il n’avait pas été conjecturé que PREMIER est NP-complet7. Les problèmes NP-difficiles (ou NP-durs) On parle ici d’une conséquence très concrète de la question P / NP. Un problème (pas nécessairement de décision) C est NP- difficile (on dit parfois aussi NP-dur ou NP-hard) si tout problème de la classe NP peut être réduit polynomialement à C. Noter que la définition ne dit pas que C est dans NP. Noter aussi que dans la littérature sur Internet, certains problèmes NP-difficiles sont parfois qualifiés de NP-complets (alors qu’il ne s’agit pas de problèmes de décision). Dans cette catégorie on trouve l’immense variété des très concrets problèmes d’optimisation. Si vous voulez essayer de prouver que P = NP, et accessoirement empocher le million de dollars offert par la fondation américaine évoquée ci-dessus, il vous « suffit » de prouver que votre problème NP-complet favori est dans P. Plus concrètement, pour un informaticien ou un ingénieur, savoir qu’un problème est NP- difficile signifie que les meilleurs algorithmes (connus) de résolution de ce problème sont non polynomiaux; s’il tient à travailler en temps polynomial parce que ses données sont d’assez grande taille, il ne peut (sauf en prouvant, à la surprise générale, que P = NP !) s’intéresser qu’à des cas particuliers simplifiés de son problème, en simplifiant l’énoncé (par exemple, 2-COLORATION est dans P) ou en réduisant l’ensemble des données. Il peut aussi essayer de trouver des algorithmes de solution approchée de son problème. Ces activités occupent évidemment bien plus de monde que la question théorique « P = NP ? » ! Bibliographie [1] Machines de Turing et complexité algorithmique (28 pages) – Olivier Hudry – ENS des télécommunications (tout n’est pas facilement lisible !) ftp://mse.univ-paris1.fr/pub/mse/cahiers2003/B03119.pdf [2] Idée et fonctionnement de l’algorithme AKS – Julien ELIE – élève-ingénieur à l’Ecole centrale http://www.trigofacile.com/maths/curiosite/primarite/aks/idee.htm (Idem!) [3] Stephen Cook (Université de Toronto)- P contre NP. L’état du problème. http://www.claymath.org/millennium/P_vs_NP/Official_Problem_Description.pdf Texte passionnant (en anglais). Depuis son théorème de 1971, l’auteur a eu le temps de réfléchir à la question posée…(Idem!) [3’] http://www.claymath.org/millennium/P_vs_NP/ (sur le même site où on trouve par ailleurs six autres problèmes, tous incompréhensibles !, à un million de dollars) (Idem!) [4] L’étonnante question “P = NP?” J F Kentzel http://pardailhan.entmip.fr/rubrique-des-disciplines/mathematiques/documents-enseignants/documentsenseignants-518.htm Texte du même type que celui ci-dessus mais destiné à des enseignants, donc moins facile à lire a priori, et plus détaillé, donc plus facile à lire pour certains points. La fin de l’annexe contient quelques dizaines de liens Internet, SOUVENT PLUS LISIBLES QUE CEUX QUI PRECEDENT. Cette absence d’émoi vient aussi du fait qu’on peut depuis 2002, grâce à trois chercheurs indiens, déclarer en temps polynomial si un entier x est premier ou non, mais que ça n’implique pas, contrairement à ce qu’on a vu pour le problème EULERIEN, qu’on peut en temps polynomial trouver un facteur de x si la réponse est non. Or cette difficulté de trouver un facteur d’un grand nombre x non premier est la base de beaucoup de procédés de cryptanalyse (codage des messages secrets). 7 6