Quels problèmes peut-on résoudre efficacement ?
Mathematic Park
Sylvain Perifel (
LIAFA, université Paris Diderot)
Le 12 mars 2016
Quels problèmes peut-on résoudre efficacement ?
«PvsNP», ou Faut-il licencier les mathématiciens ?
Mathematic Park
Sylvain Perifel (
LIAFA, université Paris Diderot)
Le 12 mars 2016
Introduction
Classification des problèmes en fonction de leur « difficulté » :
▶
Facile : la résolution prend peu de temps
(mais la méthode peut être très compliquée !)
→
Il existe un algorithme rapide (« efficace ») pour résoudre le problème.
▶
Difficile : pas de méthode rapide.
→
Tous les algorithmes pour résoudre le problème
sont lents.
Introduction
Classification des problèmes en fonction de leur « difficulté » :
▶
Facile : la résolution prend peu de temps
(mais la méthode peut être très compliquée !)
→
Il existe un algorithme rapide (« efficace ») pour résoudre le problème.
▶
Difficile : pas de méthode rapide.
→
Tous les algorithmes pour résoudre le problème
sont lents.
Introduction
Classification des problèmes en fonction de leur « difficulté » :
▶
Facile : la résolution prend peu de temps
(mais la méthode peut être très compliquée !)
→
Il existe un algorithme rapide (« efficace ») pour résoudre le problème.
▶
Difficile : pas de méthode rapide.
→
Tous les algorithmes pour résoudre le problème
sont lents.
Introduction
Classification des problèmes en fonction de leur « difficulté » :
▶
Facile : la résolution prend peu de temps
(mais la méthode peut être très compliquée !)
→
Il existe un algorithme rapide (« efficace ») pour résoudre le problème.
▶
Difficile : pas de méthode rapide.
→
Tous les algorithmes pour résoudre le problème
sont lents.
Introduction
Classification des problèmes en fonction de leur « difficulté » :
▶
Facile : la résolution prend peu de temps
(mais la méthode peut être très compliquée !)
→
Il existe un algorithme rapide (« efficace ») pour résoudre le problème.
▶
Difficile : pas de méthode rapide.
→
Tous les algorithmes pour résoudre le problème
sont lents.
Introduction
Facile Difficile
Parité Sudoku
Addition Voyageur de commerce Trier une liste Hello world Chemin le plus court Échecs
Primalité
Problème :
Décider si un nombre est pair
Introduction
Facile Difficile
Parité
Sudoku
Addition Voyageur de commerce Trier une liste Hello world Chemin le plus court Échecs
Primalité
Problème :
Ajouter deux entiers
Introduction
Facile Difficile
Parité
Sudoku
Addition
Voyageur de commerce Trier une liste Hello world Chemin le plus court Échecs
Primalité
Problème :
Trier une liste d’entiers par ordre croissant
Introduction
Facile Difficile
Parité
Sudoku
Addition
Voyageur de commerce
Trier une liste
Hello world Chemin le plus court Échecs
Primalité
Problème :
Résoudre un sudoku ou un kakuro
Introduction
Problème :
Résoudre un sudoku ou un kakuro
Introduction
Facile Difficile
Parité Sudoku
Addition
Voyageur de commerce
Trier une liste
Hello world Chemin le plus court Échecs
Primalité
Problème :
Trouver le chemin le plus court entre deux villes
Introduction
Quel est le chemin le plus court pour aller de Paris à Toulouse ?
Problème :
Trouver le chemin le plus court entre deux villes
Introduction
Facile Difficile
Parité Sudoku
Addition
Voyageur de commerce
Trier une liste
Hello world
Chemin le plus court
Échecs Primalité
Problème :
Trouver le plus court chemin passant par une liste de villes
Introduction
Quel est le chemin le plus court passant par Paris, Toulouse, Avignon, Bordeaux, Lyon, Lille et Mar- seille ?
Problème :
Trouver le plus court chemin passant par une liste de villes
Introduction
Facile Difficile
Parité Sudoku
Addition Voyageur de commerce Trier une liste
Hello world
Chemin le plus court
Échecs Primalité
Problème :
Décider si un programme affiche «
Hello world!»
Introduction
Facile Difficile
Parité Sudoku
Addition Voyageur de commerce Trier une liste Hello world Chemin le plus court
Échecs Primalité
Problème :
Une position aux échecs est-elle gagnante ?
Introduction
Facile Difficile
Parité Sudoku
Addition Voyageur de commerce Trier une liste Hello world Chemin le plus court Échecs
Primalité
Problème :
Un entier est-il premier ?
Introduction
Facile Difficile
Parité Sudoku
Addition Voyageur de commerce Trier une liste Hello world Chemin le plus court Échecs
Primalité
Problème :
Plan
1. Rappel historique :
un ordinateur peut-il résoudre tous les problèmes ?
2. Qu’est-ce qu’un algorithme efficace (rapide) ?
3. Classer les problèmes en fonction de leur difficulté
4. Et après ?
Plan
1. Rappel historique :
un ordinateur peut-il résoudre tous les problèmes ?
2. Qu’est-ce qu’un algorithme efficace (rapide) ?
3. Classer les problèmes en fonction de leur difficulté
4. Et après ?
Historique
Préhistoire des algorithmes :
▶
Babyloniens (-2000)
▶
Euclide (-300)
▶
Al Khuwarizmi (900)
▶
Pascal/Leibniz (1650) Hilbert, 1900 :
▶
fondements des mathématiques
▶
peut-on tout résoudre par un algorithme ?
Turing, Church 1936 :
▶
formalisation de la notion d’algorithme
(machine de Turing)
Historique
Préhistoire des algorithmes :
▶
Babyloniens (-2000)
▶
Euclide (-300)
▶
Al Khuwarizmi (900)
▶
Pascal/Leibniz (1650) Hilbert, 1900 :
▶
fondements des mathématiques
▶
peut-on tout résoudre par un algorithme ?
Turing, Church 1936 :
▶
formalisation de la notion d’algorithme
(machine de Turing)
Historique
Préhistoire des algorithmes :
▶
Babyloniens (-2000)
▶
Euclide (-300)
▶
Al Khuwarizmi (900)
▶
Pascal/Leibniz (1650) Hilbert, 1900 :
▶
fondements des mathématiques
▶
peut-on tout résoudre par un algorithme ?
Turing, Church 1936 :
▶
formalisation de la notion d’algorithme
(machine de Turing)
Historique
Préhistoire des algorithmes :
▶
Babyloniens (-2000)
▶
Euclide (-300)
▶
Al Khuwarizmi (900)
▶
Pascal/Leibniz (1650)
Hilbert, 1900 :
▶
fondements des mathématiques
▶
peut-on tout résoudre par un algorithme ?
Turing, Church 1936 :
▶
formalisation de la notion d’algorithme
(machine de Turing)
Historique
Préhistoire des algorithmes :
▶
Babyloniens (-2000)
▶
Euclide (-300)
▶
Al Khuwarizmi (900)
▶
Pascal/Leibniz (1650) Hilbert, 1900 :
▶
fondements des mathématiques
▶
peut-on tout résoudre par un algorithme ?
Turing, Church 1936 :
▶
formalisation de la notion d’algorithme
(machine de Turing)
Historique
Préhistoire des algorithmes :
▶
Babyloniens (-2000)
▶
Euclide (-300)
▶
Al Khuwarizmi (900)
▶
Pascal/Leibniz (1650) Hilbert, 1900 :
▶
fondements des mathématiques
▶
peut-on tout résoudre par un algorithme ? Turing, Church 1936 :
▶
formalisation de la notion d’algorithme
(machine de Turing)
Qu’est-ce qu’un algorithme ?
▶
Question cruciale : notion intuitive jusqu’en 1936 !
▶
Programme sur ordinateur : capable de répéter un grand nombre de fois des instructions (boucle)
▶
Répond
OUIou
NONou ne s’arrête pas (boucle infinie)
Qu’est-ce qu’un algorithme ?
▶
Question cruciale : notion intuitive jusqu’en 1936 !
▶
Programme sur ordinateur : capable de répéter un grand nombre de fois des instructions (boucle)
▶
Répond
OUIou
NONou ne s’arrête pas (boucle infinie)
Qu’est-ce qu’un algorithme ?
▶
Question cruciale : notion intuitive jusqu’en 1936 !
▶
Programme sur ordinateur : capable de répéter un grand nombre de fois des instructions (boucle)
▶
Répond
OUIou
NONou ne s’arrête pas (boucle infinie)
Qu’est-ce qu’un algorithme ?
▶
Question cruciale : notion intuitive jusqu’en 1936 !
▶
Programme sur ordinateur : capable de répéter un grand nombre de fois des instructions (boucle)
▶
Répond
OUIou
NONou ne s’arrête pas (boucle infinie) Exemples :
Pour
i
allant de 2 àn
−1
faire Sii
divisen
Alors répondre NON Fin BoucleRépondre OUI
Qu’est-ce qu’un algorithme ?
▶
Question cruciale : notion intuitive jusqu’en 1936 !
▶
Programme sur ordinateur : capable de répéter un grand nombre de fois des instructions (boucle)
▶
Répond
OUIou
NONou ne s’arrête pas (boucle infinie) Exemples :
Tant que
n
̸=0
faire Ajouter 1 àn
Fin BoucleRépondre NON
Qu’est-ce qu’un algorithme ?
▶
Question cruciale : notion intuitive jusqu’en 1936 !
▶
Programme sur ordinateur : capable de répéter un grand nombre de fois des instructions (boucle)
▶
Répond
OUIou
NONou ne s’arrête pas (boucle infinie)
Un problème
=une question sur une entrée donnée Réponse attendue : oui ou non
Exemples :
Qu’est-ce qu’un algorithme ?
▶
Question cruciale : notion intuitive jusqu’en 1936 !
▶
Programme sur ordinateur : capable de répéter un grand nombre de fois des instructions (boucle)
▶
Répond
OUIou
NONou ne s’arrête pas (boucle infinie)
Un problème
=une question sur une entrée donnée Réponse attendue : oui ou non
Exemples :
Entrée : n
Question : le nombre n est-il premier ?
Qu’est-ce qu’un algorithme ?
▶
Question cruciale : notion intuitive jusqu’en 1936 !
▶
Programme sur ordinateur : capable de répéter un grand nombre de fois des instructions (boucle)
▶
Répond
OUIou
NONou ne s’arrête pas (boucle infinie)
Un problème
=une question sur une entrée donnée Réponse attendue : oui ou non
Exemples :
Entrée : une carte, une liste de villes, une longueur d
Question : existe-t-il un chemin de longueur
≤d passant par
toutes les villes ?
Qu’est-ce qu’un algorithme ?
▶
Question cruciale : notion intuitive jusqu’en 1936 !
▶
Programme sur ordinateur : capable de répéter un grand nombre de fois des instructions (boucle)
▶
Répond
OUIou
NONou ne s’arrête pas (boucle infinie)
Un problème
=une question sur une entrée donnée Réponse attendue : oui ou non
Exemples :
Entrée : le code d’un programme
Question : le programme affiche-t-il «
Hello world!» ?
Qu’est-ce qu’un algorithme ?
▶
Question cruciale : notion intuitive jusqu’en 1936 !
▶
Programme sur ordinateur : capable de répéter un grand nombre de fois des instructions (boucle)
▶
Répond
OUIou
NONou ne s’arrête pas (boucle infinie)
Un problème
=une question sur une entrée donnée Réponse attendue : oui ou non
=
un langage L
=
l’ensemble des entrées dont la réponse est oui.
Peut-on tout résoudre ?
1900–1930 : tous les problèmes sont-ils résolubles par un algorithme ? (Hilbert : « oui »)
1936 : Turing, Church, Gödel… : non !
Peut-on tout résoudre ?
1900–1930 : tous les problèmes sont-ils résolubles par un algorithme ? (Hilbert : « oui »)
1936 : Turing, Church, Gödel… : non !
Ça devient barbant
Russell, 1901
Un barbier rase les personnes qui ne se rasent pas elles-mêmes.
→
Qui rase le barbier ?
▶
Si le barbier se rase lui-même, il ne se rase pas lui-même.
▶
Si le barbier ne se rase pas lui-même, il se rase lui-même.
Si les programmes jouent le rôle du rasage : un programme
donné p
0peut-il décider si un autre programme q répond
NON?
Ça devient barbant
Russell, 1901
Un barbier rase les personnes qui ne se rasent pas elles-mêmes.
→
Qui rase le barbier ?
▶
Si le barbier se rase lui-même, il ne se rase pas lui-même.
▶
Si le barbier ne se rase pas lui-même, il se rase lui-même.
Si les programmes jouent le rôle du rasage : un programme
donné p
0peut-il décider si un autre programme q répond
NON?
Ça devient barbant
Russell, 1901
Un barbier rase les personnes qui ne se rasent pas elles-mêmes.
→
Qui rase le barbier ?
▶
Si le barbier se rase lui-même, il ne se rase pas lui-même.
▶
Si le barbier ne se rase pas lui-même, il se rase lui-même.
Si les programmes jouent le rôle du rasage : un programme
donné p
0peut-il décider si un autre programme q répond
NON?
Ça devient barbant
Russell, 1901
Un barbier rase les personnes qui ne se rasent pas elles-mêmes.
→
Qui rase le barbier ?
▶
Si le barbier se rase lui-même, il ne se rase pas lui-même.
▶
Si le barbier ne se rase pas lui-même, il se rase lui-même.
Si les programmes jouent le rôle du rasage : un programme
donné p
0peut-il décider si un autre programme q répond
NON?
Un problème non résoluble
Soit
Hle problème suivant :
Entrée : le code d’un programme p
(p agit sur le code d’un programme) Question : p sur l’entrée
code(p
)répond-il
NON?
(c.-à-d. est-ce que p
(code(p
))répond
NON?)
Démonstration
Supposons qu’un programme h résolve le problème H. Alors pour tout programme p,
si h
(code(h))répond
OUIalors
h(code(h))répond
NONsi h
(code(h))répond
NONalors
h(code(h))ne répond pas
NON.
Contradiction.
Un problème non résoluble
Soit
Hle problème suivant :
Entrée : le code d’un programme p
(p agit sur le code d’un programme) Question : p sur l’entrée
code(p
)répond-il
NON?
(c.-à-d. est-ce que p
(code(p
))répond
NON?)
THÉORÈMEAucun algorithme ne peut résoudre H.
Démonstration
Supposons qu’un programme h résolve le problème H. Alors pour tout programme p,
si h
(code(h))répond
OUIalors
h(code(h))répond
NONsi h
(code(h))répond
NONalors
h(code(h))ne répond pas
NON.
Contradiction.
Un problème non résoluble
Soit
Hle problème suivant :
Entrée : le code d’un programme p
(p agit sur le code d’un programme) Question : p sur l’entrée
code(p
)répond-il
NON?
(c.-à-d. est-ce que p
(code(p
))répond
NON?)
DémonstrationSupposons qu’un programme h résolve le problème H.
Alors pour tout programme p,
si h
(code(p
))répond
OUIalors p
(code(p
))répond
NONsi h
(code(p
))répond
NONalors p
(code(p
))ne répond pas
NON.
Contradiction.
Un problème non résoluble
Soit
Hle problème suivant :
Entrée : le code d’un programme p
(p agit sur le code d’un programme) Question : p sur l’entrée
code(p
)répond-il
NON?
(c.-à-d. est-ce que p
(code(p
))répond
NON?)
DémonstrationSupposons qu’un programme h résolve le problème H.
Alors pour tout programme p,
si h
(code(h))répond
OUIalors
h(code(h))répond
NONsi h
(code(h))répond
NONalors
h(code(h))ne répond pas
NON.
Contradiction.
Dans la suite, on va s’intéresser uniquement à des problèmes résolubles par ordinateur
(contrairement à H).
Plan
1. Rappel historique :
un ordinateur peut-il résoudre tous les problèmes ?
2. Qu’est-ce qu’un algorithme efficace (rapide) ?
3. Classer les problèmes en fonction de leur difficulté
4. Et après ?
Efficacité
▶
1960–1970 : les ordinateurs se démocratisent mais ont des capacités limitées.
(Eniac, 1946) (Apple II, 1977)
▶
La question « que peut-on résoudre efficacement » voit le jour.
▶
On s’intéresse à des algorithmes rapides (« efficaces »).
▶
Comment mesurer l’efficacité ? Par le temps mis par le programme ?
• Dépend de la vitesse de l’ordinateur
• Dépend de l’entrée
→
Mesurer le nombre d’instructions exécutées par l’algorithme comme
une fonction f
(n
)de la taille de l’entrée
Efficacité
▶
1960–1970 : les ordinateurs se démocratisent mais ont des capacités limitées.
▶
La question « que peut-on résoudre efficacement » voit le jour.
▶
On s’intéresse à des algorithmes rapides (« efficaces »).
▶
Comment mesurer l’efficacité ? Par le temps mis par le programme ?
• Dépend de la vitesse de l’ordinateur
• Dépend de l’entrée
→
Mesurer le nombre d’instructions exécutées par l’algorithme comme
une fonction f
(n
)de la taille de l’entrée
Efficacité
▶
1960–1970 : les ordinateurs se démocratisent mais ont des capacités limitées.
▶
La question « que peut-on résoudre efficacement » voit le jour.
▶
On s’intéresse à des algorithmes rapides (« efficaces »).
▶
Comment mesurer l’efficacité ? Par le temps mis par le programme ?
• Dépend de la vitesse de l’ordinateur
• Dépend de l’entrée
→
Mesurer le nombre d’instructions exécutées par l’algorithme comme
une fonction f
(n
)de la taille de l’entrée
Efficacité
▶
1960–1970 : les ordinateurs se démocratisent mais ont des capacités limitées.
▶
La question « que peut-on résoudre efficacement » voit le jour.
▶
On s’intéresse à des algorithmes rapides (« efficaces »).
▶
Comment mesurer l’efficacité ? Par le temps mis par le programme ?
• Dépend de la vitesse de l’ordinateur
• Dépend de l’entrée: décider si une suite de 3 entiers est triée par ordre croissant sera plus rapide que pour une suite de 1 000 000 d’éléments.
→
Mesurer le nombre d’instructions exécutées par l’algorithme comme
une fonction f
(n
)de la taille de l’entrée
Efficacité
▶
1960–1970 : les ordinateurs se démocratisent mais ont des capacités limitées.
▶
La question « que peut-on résoudre efficacement » voit le jour.
▶
On s’intéresse à des algorithmes rapides (« efficaces »).
▶
Comment mesurer l’efficacité ? Par le temps mis par le programme ?
• Dépend de la vitesse de l’ordinateur
• Dépend de l’entrée
→
Mesurer le nombre d’instructions exécutées par l’algorithme comme
une fonction f
(n
)de la taille de l’entrée
Exemples
Entrée : une suite x
1, . . . ,x
nde n entiers
Question : la suite est-elle triée par ordre croissant ?
Pouri
allant de 1 àn
−1
faireSi
x
i>x
i+1 Alors répondre NON Fin BoucleRépondre OUI
Nombre d’opérations :
f(n)≃nExemples
Entrée : une suite x
1, . . . ,x
nde n entiers
Question : y a-t-il deux éléments identiques dans la suite ?
Pouri
allant de 1 àn
−1
fairePour
j
allant dei
+1
àn
faire Six
i=x
j Alors répondre OUI Fin BoucleFin Boucle Répondre NON
Nombre d’opérations :
f(n)≃n2Exemples
Entrée: un ensembleEd’entiers Question: existe-t-il
unsous-ensembleS
dont la somme des éléments estnulle?
P. ex.
E={−10,−4,−2,3,5,9} S={−10,−4,5,9} (−10) + (−4) +5+9=0
Exemples
Entrée: un ensembleEd’entiers Question: existe-t-il
unsous-ensembleS
dont la somme des éléments estnulle?
P. ex.
E={−10,−4,−2,3,5,9} S={−10,−4,5,9} (−10) + (−4) +5+9=0
Pour tout sous-ensemble
S
deE
faires
←somme des éléments deS
Si
s
=0
Alors répondre OUI Fin BoucleRépondre NON
Nombre d’opérations :
f(n)≃2
nTemps d’exécution
(À la vitesse de 10
9opérations par seconde) Taille de l’entrée f
(n
) =n f
(n
) =n
2f
(n
) =2
n10 10
−8s 10
−7s 10
−6s
20 2
.10
−8s 4
.10
−7s 10
−3s 30 3
.10
−8s 9
.10
−7s 1 s
40 4
.10
−8s 1
,6
.10
−6s 17 min 50 5
.10
−8s 2
,5
.10
−6s 11 jours 60 6
.10
−8s 3
,6
.10
−6s 30 ans 70 7
.10
−8s 4
,9
.10
−6s 30 000 ans
1 000 10
−6s 10
−3s
. . .10
610
−3s 17 min
. . .10
91 s 30 ans
. . .▶
Efficace
=polynomial ( f
(n
) =n
k)
▶
Pas efficace
=non polynomial (p. ex. f
(n
) =2
n)
Temps d’exécution
(À la vitesse de 10
9opérations par seconde) Taille de l’entrée f
(n
) =n f
(n
) =n
2f
(n
) =2
n10 10
−8s 10
−7s 10
−6s
20 2
.10
−8s 4
.10
−7s 10
−3s 30 3
.10
−8s 9
.10
−7s 1 s 40 4
.10
−8s 1
,6
.10
−6s 17 min
50 5
.10
−8s 2
,5
.10
−6s 11 jours 60 6
.10
−8s 3
,6
.10
−6s 30 ans 70 7
.10
−8s 4
,9
.10
−6s 30 000 ans
1 000 10
−6s 10
−3s
. . .10
610
−3s 17 min
. . .10
91 s 30 ans
. . .▶
Efficace
=polynomial ( f
(n
) =n
k)
▶
Pas efficace
=non polynomial (p. ex. f
(n
) =2
n)
Temps d’exécution
(À la vitesse de 10
9opérations par seconde) Taille de l’entrée f
(n
) =n f
(n
) =n
2f
(n
) =2
n10 10
−8s 10
−7s 10
−6s
20 2
.10
−8s 4
.10
−7s 10
−3s 30 3
.10
−8s 9
.10
−7s 1 s 40 4
.10
−8s 1
,6
.10
−6s 17 min 50 5
.10
−8s 2
,5
.10
−6s 11 jours
60 6
.10
−8s 3
,6
.10
−6s 30 ans 70 7
.10
−8s 4
,9
.10
−6s 30 000 ans
1 000 10
−6s 10
−3s
. . .10
610
−3s 17 min
. . .10
91 s 30 ans
. . .▶
Efficace
=polynomial ( f
(n
) =n
k)
▶
Pas efficace
=non polynomial (p. ex. f
(n
) =2
n)
Temps d’exécution
(À la vitesse de 10
9opérations par seconde) Taille de l’entrée f
(n
) =n f
(n
) =n
2f
(n
) =2
n10 10
−8s 10
−7s 10
−6s
20 2
.10
−8s 4
.10
−7s 10
−3s 30 3
.10
−8s 9
.10
−7s 1 s 40 4
.10
−8s 1
,6
.10
−6s 17 min 50 5
.10
−8s 2
,5
.10
−6s 11 jours 60 6
.10
−8s 3
,6
.10
−6s 30 ans
70 7
.10
−8s 4
,9
.10
−6s 30 000 ans
1 000 10
−6s 10
−3s
. . .10
610
−3s 17 min
. . .10
91 s 30 ans
. . .▶
Efficace
=polynomial ( f
(n
) =n
k)
▶
Pas efficace
=non polynomial (p. ex. f
(n
) =2
n)
Temps d’exécution
(À la vitesse de 10
9opérations par seconde) Taille de l’entrée f
(n
) =n f
(n
) =n
2f
(n
) =2
n10 10
−8s 10
−7s 10
−6s
20 2
.10
−8s 4
.10
−7s 10
−3s 30 3
.10
−8s 9
.10
−7s 1 s 40 4
.10
−8s 1
,6
.10
−6s 17 min 50 5
.10
−8s 2
,5
.10
−6s 11 jours 60 6
.10
−8s 3
,6
.10
−6s 30 ans 70 7
.10
−8s 4
,9
.10
−6s 30 000 ans
1 000 10
−6s 10
−3s
. . .10
610
−3s 17 min
. . .10
91 s 30 ans
. . .▶
Efficace
=polynomial ( f
(n
) =n
k)
▶
Pas efficace
=non polynomial (p. ex. f
(n
) =2
n)
Temps d’exécution
(À la vitesse de 10
9opérations par seconde) Taille de l’entrée f
(n
) =n f
(n
) =n
2f
(n
) =2
n10 10
−8s 10
−7s 10
−6s
20 2
.10
−8s 4
.10
−7s 10
−3s 30 3
.10
−8s 9
.10
−7s 1 s 40 4
.10
−8s 1
,6
.10
−6s 17 min 50 5
.10
−8s 2
,5
.10
−6s 11 jours 60 6
.10
−8s 3
,6
.10
−6s 30 ans 70 7
.10
−8s 4
,9
.10
−6s 30 000 ans
1 000 10
−6s 10
−3s
. . .10
610
−3s 17 min
. . .10
91 s 30 ans
. . .▶
Efficace
=polynomial ( f
(n
) =n
k)
▶
Pas efficace
=non polynomial (p. ex. f
(n
) =2
n)
Temps d’exécution
(À la vitesse de 10
9opérations par seconde) Taille de l’entrée f
(n
) =n f
(n
) =n
2f
(n
) =2
n10 10
−8s 10
−7s 10
−6s
20 2
.10
−8s 4
.10
−7s 10
−3s 30 3
.10
−8s 9
.10
−7s 1 s 40 4
.10
−8s 1
,6
.10
−6s 17 min 50 5
.10
−8s 2
,5
.10
−6s 11 jours 60 6
.10
−8s 3
,6
.10
−6s 30 ans 70 7
.10
−8s 4
,9
.10
−6s 30 000 ans
1 000 10
−6s 10
−3s
. . .10
610
−3s 17 min
. . .10
91 s 30 ans
. . .▶
Efficace
=polynomial ( f
(n
) =n
k)
▶
Pas efficace
=non polynomial (p. ex. f
(n
) =2
n)
Temps d’exécution
(À la vitesse de 10
9opérations par seconde) Taille de l’entrée f
(n
) =n f
(n
) =n
2f
(n
) =2
n10 10
−8s 10
−7s 10
−6s
20 2
.10
−8s 4
.10
−7s 10
−3s 30 3
.10
−8s 9
.10
−7s 1 s 40 4
.10
−8s 1
,6
.10
−6s 17 min 50 5
.10
−8s 2
,5
.10
−6s 11 jours 60 6
.10
−8s 3
,6
.10
−6s 30 ans 70 7
.10
−8s 4
,9
.10
−6s 30 000 ans
1 000 10
−6s 10
−3s
. . .10
610
−3s 17 min
. . .10
91 s 30 ans
. . .▶
Efficace
=polynomial ( f
(n
) =n
k)
▶
Pas efficace
=non polynomial (p. ex. f
(n
) =2
n)
Temps d’exécution
Taille de l’entrée f
(n
) =n f
(n
) =n
2f
(n
) =2
n10 10
−8s 10
−7s 10
−6s
20 2
.10
−8s 4
.10
−7s 10
−3s 30 3
.10
−8s 9
.10
−7s 1 s 40 4
.10
−8s 1
,6
.10
−6s 17 min 50 5
.10
−8s 2
,5
.10
−6s 11 jours 60 6
.10
−8s 3
,6
.10
−6s 30 ans 70 7
.10
−8s 4
,9
.10
−6s 30 000 ans
1 000 10
−6s 10
−3s
. . .10
610
−3s 17 min
. . .10
91 s 30 ans
. . .▶
Efficace
=polynomial ( f
(n
) =n
k)
▶
Pas efficace
=non polynomial (p. ex. f
(n
) =2
n)
Plan
1. Rappel historique :
un ordinateur peut-il résoudre tous les problèmes ?
2. Qu’est-ce qu’un algorithme efficace (rapide) ?
3. Classer les problèmes en fonction de leur difficulté
4. Et après ?
Comment classer les problèmes ?
Pour classer un problème, il faut savoir quel est le meilleur algorithme qui le résout.
▶
Pour montrer qu’un problème peut se résoudre
en
≤f
(n
)opérations, il suffit de donner un algorithme qui effectue au plus f
(n
)opérations.
▶
Pour montrer qu’un problème ne peut pas se résoudre en
≤g
(n
)opérations, il faut démontrer
qu’aucun algorithme p effectuant
≤g
(n
)opérations
ne le résout.
Comment classer les problèmes ?
Pour classer un problème, il faut savoir quel est le meilleur algorithme qui le résout.
▶
Pour montrer qu’un problème peut se résoudre
en
≤f
(n
)opérations, il suffit de donner un algorithme qui effectue au plus f
(n
)opérations.
▶
Pour montrer qu’un problème ne peut pas se résoudre en
≤g
(n
)opérations, il faut démontrer
qu’aucun algorithme p effectuant
≤g
(n
)opérations
ne le résout.
Comment classer les problèmes ?
Pour classer un problème, il faut savoir quel est le meilleur algorithme qui le résout.
▶
Pour montrer qu’un problème peut se résoudre
en
≤f
(n
)opérations, il suffit de donner un algorithme qui effectue au plus f
(n
)opérations.
▶
Pour montrer qu’un problème ne peut pas se résoudre en
≤g
(n
)opérations, il faut démontrer
qu’aucun algorithme p effectuant
≤g
(n
)opérations
ne le résout.
Comment classer les problèmes ?
▶
On ne connaît presque aucune méthode pour démontrer qu’aucun algorithme ne convient pour un problème (les algorithmes peuvent être très astucieux !)
▶
Pour la plupart des problèmes,
on ne connaît pas d’algorithme rapide qui le résolve, mais on ne sait pas montrer qu’il n’en existe pas !
▶
Tout l’art consiste à contourner cette complication…
Comment classer les problèmes ?
▶
On ne connaît presque aucune méthode pour démontrer qu’aucun algorithme ne convient pour un problème (les algorithmes peuvent être très astucieux !)
▶
Pour la plupart des problèmes,
on ne connaît pas d’algorithme rapide qui le résolve, mais on ne sait pas montrer qu’il n’en existe pas !
▶
Tout l’art consiste à contourner cette complication…
Comment classer les problèmes ?
▶
On ne connaît presque aucune méthode pour démontrer qu’aucun algorithme ne convient pour un problème (les algorithmes peuvent être très astucieux !)
▶
Pour la plupart des problèmes,
on ne connaît pas d’algorithme rapide qui le résolve, mais on ne sait pas montrer qu’il n’en existe pas !
▶
Tout l’art consiste à contourner cette complication…
Vérifier ou trouver une solution
Problème
FACTORISATION: Entrée : un entier n
Question : décomposer n en produit de facteurs premiers Exemple : sur l’entrée 221, trouver 13 et 17
(car 221
=13
×17)
▶
Si on nous donne les diviseurs, on peut vérifier que c’est une solution (13
×17
=221).
▶
Problème facile à vérifier.
▶
Problème difficile (pas d’algorithme efficace à ce jour)
Vérifier ou trouver une solution
Problème
VOYAGEUR DE COMMERCE: Entrée : une carte, des villes et une longueur d
Question : existe-t-il un chemin de longueur
≤d passant par toutes les villes ?
▶
Si on nous donne le chemin, on peut vérifier que c’est une solution (vérifier que la somme des distances est
≤d).
▶
Problème facile à vérifier.
▶
Problème difficile (pas d’algorithme efficace à ce jour)
Vérifier ou trouver une solution
Problème
SUDOKU:
Entrée : une grille de Sudoku de taille n
×n
Question : existe-t-il une solution à la grille ?
Vérifier ou trouver une solution
Problème
SUDOKU:
Entrée : une grille de Sudoku de taille n
×n
Question : existe-t-il une solution à la grille ?
Vérifier ou trouver une solution
Problème
SUDOKU:
Entrée : une grille de Sudoku de taille n
×n
Question : existe-t-il une solution à la grille ?
Vérifier ou trouver une solution
Problème
SUDOKU:
Entrée : une grille de Sudoku de taille n
×n
Question : existe-t-il une solution à la grille ?
Vérifier ou trouver une solution
Problème
SUDOKU:
Entrée : une grille de Sudoku de taille n
×n Question : existe-t-il une solution à la grille ?
▶
Si on nous donne la grille remplie, on peut vérifier que c’est une solution (les nombres sont distincts).
▶
Problème facile à vérifier.
▶
Problème difficile (pas d’algorithme efficace à ce jour)
Vérifier ou trouver une solution
▶ P
: ensemble des problèmes résolubles en temps
polynomial ( f
(n
) =n
kpour un certain k)
= problèmes résolubles « efficacement »
(
P= Polynomial time)
▶ NP
: ensemble des problèmes qu’on peut vérifier en temps polynomial
= problèmes vérifiables « efficacement »
(
NP= Nondeterministic Polynomial time)
▶ P⊆NP
Vérifier ou trouver une solution
▶ P
: ensemble des problèmes résolubles en temps
polynomial ( f
(n
) =n
kpour un certain k)
= problèmes résolubles « efficacement »
(
P= Polynomial time)
▶ NP
: ensemble des problèmes qu’on peut vérifier en temps polynomial
= problèmes vérifiables « efficacement »
(
NP= Nondeterministic Polynomial time)
▶ P⊆NP
Vérifier ou trouver une solution
▶ P
: ensemble des problèmes résolubles en temps
polynomial ( f
(n
) =n
kpour un certain k)
= problèmes résolubles « efficacement »
(
P= Polynomial time)
▶ NP
: ensemble des problèmes qu’on peut vérifier en temps polynomial
= problèmes vérifiables « efficacement »
(
NP= Nondeterministic Polynomial time)
▶ P⊆NP
NP
L
∈NPx
∈L ? x certificat y
V
(x
,y
)x
∈L
⇐⇒ ∃y
(x
,y
)∈A
où A
∈P.
NP -complétude
Parmi les problèmes de
NP,
certains sont de difficulté maximale :
il s’agit des problèmes
NP-complets (Cook, Levin 1971)
NP-complets
NP
Très nombreux problèmes importants en pratique.
Réduction
▶ A≤B
si on peut transformer une entrée de A en une entrée de B en préservant l’appartenance au langage
▶
Formellement : il existe f calculable en temps polynomial telle que
x
∈A
⇐⇒f
(x
)∈B
▶ NP
-complétude : B est
NP-complet si
∀
A
∈NP,A
≤B
.Réduction
▶ A≤B
si on peut transformer une entrée de A en une entrée de B en préservant l’appartenance au langage
▶
Formellement : il existe f calculable en temps polynomial telle que
x
∈A
⇐⇒f
(x
)∈B
▶ NP
-complétude : B est
NP-complet si
∀
A
∈NP,A
≤B
.Satisfaisabilité
Problème
SAT:
▶
Entrée : une formule booléenne
ϕ(x
1, . . . ,x
n)▶
Question : existe-t-il a
1, . . . ,a
n∈ {0
,1
}tq
ϕ(a
1, . . . ,a
n) =1 ?
THÉORÈME(Cook, Levin, 1971)
Le problème
SATest
NP-complet.
Problèmes NP -complets
▶
Pour montrer que A est
NP-complet :
• montrer queA∈NP;
• montrer queSAT≤A.
▶
Très nombreux problèmes importants en pratique. Exemples :
sudoku, voyageur de commerce, ordonnancement…
Problèmes NP -complets
▶
Pour montrer que A est
NP-complet :
• montrer queA∈NP;
• montrer queSAT≤A.
▶
Très nombreux problèmes importants en pratique.
Exemples :
sudoku, voyageur de commerce, ordonnancement…
P vs NP
▶
Question fondamentale : est-ce que
P=NP?
Les problèmes faciles à vérifier sont-ils faciles à résoudre ?
▶
Question ouverte (depuis 1970). Réponse probable : non. Meilleurs algorithmes connus pour les
problèmes
NP-complets :
f(n)≃2
n.
▶
Beaucoup de problèmes importants sont
NP-complets,
des algorithmes efficaces ont été cherchés en vain.
Un algorithme efficace pour l’un d’entre eux donnerait
des algorithmes efficaces pour tous !
P vs NP
▶
Question fondamentale : est-ce que
P=NP?
Les problèmes faciles à vérifier sont-ils faciles à résoudre ?
▶
Question ouverte (depuis 1970). Réponse probable : non.
Meilleurs algorithmes connus pour les problèmes
NP-complets :
f(n)≃2
n.
▶
Beaucoup de problèmes importants sont
NP-complets,
des algorithmes efficaces ont été cherchés en vain.
Un algorithme efficace pour l’un d’entre eux donnerait
des algorithmes efficaces pour tous !
P vs NP
▶
Question fondamentale : est-ce que
P=NP?
Les problèmes faciles à vérifier sont-ils faciles à résoudre ?
▶
Question ouverte (depuis 1970). Réponse probable : non.
Meilleurs algorithmes connus pour les problèmes
NP-complets :
f(n)≃2
n.
▶
Beaucoup de problèmes importants sont
NP-complets, des algorithmes efficaces ont été cherchés en vain.
Un algorithme efficace pour l’un d’entre eux donnerait
des algorithmes efficaces pour tous !
Théorème de Ladner
P=NP
ou
NP-complets
P NP
ou
NP-complets
P NP
?
THÉORÈME(Ladner, 1975)
Si
P̸=NP, alors il existe A
∈NPtel que :
▶
A
̸∈P;
▶
A n’est pas
NP-complet.
Théorème de Ladner
P=NP
ou
NP-complets
P NP
ou
NP-complets
P NP
?
THÉORÈME(Ladner, 1975)
Si
P̸=NP, alors il existe A
∈NPtel que :
▶
A
̸∈P;
▶
A n’est pas
NP-complet.
P vs NP
▶
Bien qu’on ne sache pas montrer que
P̸=NP,
le fait qu’un problème soit
NP-complet est pris comme une « preuve » que ce problème est difficile :
personne ne connaît d’algorithme efficace.
▶
Que faire face à un problème
NP-complet ?
• Simplifierle problème,
• chercher unesolution approchée
• etc.
P vs NP
▶
Bien qu’on ne sache pas montrer que
P̸=NP,
le fait qu’un problème soit
NP-complet est pris comme une « preuve » que ce problème est difficile :
personne ne connaît d’algorithme efficace.
▶
Que faire face à un problème
NP-complet ?
• Simplifierle problème,
• chercher unesolution approchée
• etc.