• Aucun résultat trouvé

Quels problèmes peut-on résoudre efficacement ?

N/A
N/A
Protected

Academic year: 2022

Partager "Quels problèmes peut-on résoudre efficacement ?"

Copied!
114
0
0

Texte intégral

(1)

Quels problèmes peut-on résoudre efficacement ?

Mathematic Park

Sylvain Perifel (

LIAFA

, université Paris Diderot)

Le 12 mars 2016

(2)

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

(3)

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.

(4)

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.

(5)

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.

(6)

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.

(7)

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.

(8)

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

(9)

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

(10)

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

(11)

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

(12)

Introduction

Problème :

Résoudre un sudoku ou un kakuro

(13)

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

(14)

Introduction

Quel est le chemin le plus court pour aller de Paris à Toulouse ?

Problème :

Trouver le chemin le plus court entre deux villes

(15)

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

(16)

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

(17)

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!

»

(18)

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 ?

(19)

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 ?

(20)

Introduction

Facile Difficile

Parité Sudoku

Addition Voyageur de commerce Trier une liste Hello world Chemin le plus court Échecs

Primalité

Problème :

(21)

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 ?

(22)

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 ?

(23)

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)

(24)

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)

(25)

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)

(26)

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)

(27)

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)

(28)

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)

(29)

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

OUI

ou

NON

ou ne s’arrête pas (boucle infinie)

(30)

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

OUI

ou

NON

ou ne s’arrête pas (boucle infinie)

(31)

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

OUI

ou

NON

ou ne s’arrête pas (boucle infinie)

(32)

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

OUI

ou

NON

ou ne s’arrête pas (boucle infinie) Exemples :

Pour

i

allant de 2 à

n

1

faire Si

i

divise

n

Alors répondre NON Fin Boucle

Répondre OUI

(33)

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

OUI

ou

NON

ou ne s’arrête pas (boucle infinie) Exemples :

Tant que

n

̸=

0

faire Ajouter 1 à

n

Fin Boucle

Répondre NON

(34)

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

OUI

ou

NON

ou 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 :

(35)

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

OUI

ou

NON

ou 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 ?

(36)

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

OUI

ou

NON

ou 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 ?

(37)

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

OUI

ou

NON

ou 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!

» ?

(38)

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

OUI

ou

NON

ou 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.

(39)

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 !

(40)

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 !

(41)

Ç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

0

peut-il décider si un autre programme q répond

NON

?

(42)

Ç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

0

peut-il décider si un autre programme q répond

NON

?

(43)

Ç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

0

peut-il décider si un autre programme q répond

NON

?

(44)

Ç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

0

peut-il décider si un autre programme q répond

NON

?

(45)

Un problème non résoluble

Soit

H

le 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

OUI

alors

h(code(h))

répond

NON

si h

(code(h))

répond

NON

alors

h(code(h))

ne répond pas

NON

.

Contradiction.

(46)

Un problème non résoluble

Soit

H

le 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ÈME

Aucun 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

OUI

alors

h(code(h))

répond

NON

si h

(code(h))

répond

NON

alors

h(code(h))

ne répond pas

NON

.

Contradiction.

(47)

Un problème non résoluble

Soit

H

le 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(

p

))

répond

OUI

alors p

(code(

p

))

répond

NON

si h

(code(

p

))

répond

NON

alors p

(code(

p

))

ne répond pas

NON

.

Contradiction.

(48)

Un problème non résoluble

Soit

H

le 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

OUI

alors

h(code(h))

répond

NON

si h

(code(h))

répond

NON

alors

h(code(h))

ne répond pas

NON

.

Contradiction.

(49)

Dans la suite, on va s’intéresser uniquement à des problèmes résolubles par ordinateur

(contrairement à H).

(50)

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 ?

(51)

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

(52)

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

(53)

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

(54)

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

(55)

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

(56)

Exemples

Entrée : une suite x

1, . . . ,

x

n

de n entiers

Question : la suite est-elle triée par ordre croissant ?

Pour

i

allant de 1 à

n

1

faire

Si

x

i>

x

i+1 Alors répondre NON Fin Boucle

Répondre OUI

Nombre d’opérations :

f(n)≃n

(57)

Exemples

Entrée : une suite x

1, . . . ,

x

n

de n entiers

Question : y a-t-il deux éléments identiques dans la suite ?

Pour

i

allant de 1 à

n

1

faire

Pour

j

allant de

i

+

1

à

n

faire Si

x

i=

x

j Alors répondre OUI Fin Boucle

Fin Boucle Répondre NON

Nombre d’opérations :

f(n)≃n2

(58)

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

(59)

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

de

E

faire

s

somme des éléments de

S

Si

s

=

0

Alors répondre OUI Fin Boucle

Répondre NON

Nombre d’opérations :

f(n)

2

n

(60)

Temps d’exécution

(À la vitesse de 10

9

opérations par seconde) Taille de l’entrée f

(

n

) =

n f

(

n

) =

n

2

f

(

n

) =

2

n

10 10

8

s 10

7

s 10

6

s

20 2

.

10

8

s 4

.

10

7

s 10

3

s 30 3

.

10

8

s 9

.

10

7

s 1 s

40 4

.

10

8

s 1

,

6

.

10

6

s 17 min 50 5

.

10

8

s 2

,

5

.

10

6

s 11 jours 60 6

.

10

8

s 3

,

6

.

10

6

s 30 ans 70 7

.

10

8

s 4

,

9

.

10

6

s 30 000 ans

1 000 10

6

s 10

3

s

. . .

10

6

10

3

s 17 min

. . .

10

9

1 s 30 ans

. . .

Efficace

=

polynomial ( f

(

n

) =

n

k

)

Pas efficace

=

non polynomial (p. ex. f

(

n

) =

2

n

)

(61)

Temps d’exécution

(À la vitesse de 10

9

opérations par seconde) Taille de l’entrée f

(

n

) =

n f

(

n

) =

n

2

f

(

n

) =

2

n

10 10

8

s 10

7

s 10

6

s

20 2

.

10

8

s 4

.

10

7

s 10

3

s 30 3

.

10

8

s 9

.

10

7

s 1 s 40 4

.

10

8

s 1

,

6

.

10

6

s 17 min

50 5

.

10

8

s 2

,

5

.

10

6

s 11 jours 60 6

.

10

8

s 3

,

6

.

10

6

s 30 ans 70 7

.

10

8

s 4

,

9

.

10

6

s 30 000 ans

1 000 10

6

s 10

3

s

. . .

10

6

10

3

s 17 min

. . .

10

9

1 s 30 ans

. . .

Efficace

=

polynomial ( f

(

n

) =

n

k

)

Pas efficace

=

non polynomial (p. ex. f

(

n

) =

2

n

)

(62)

Temps d’exécution

(À la vitesse de 10

9

opérations par seconde) Taille de l’entrée f

(

n

) =

n f

(

n

) =

n

2

f

(

n

) =

2

n

10 10

8

s 10

7

s 10

6

s

20 2

.

10

8

s 4

.

10

7

s 10

3

s 30 3

.

10

8

s 9

.

10

7

s 1 s 40 4

.

10

8

s 1

,

6

.

10

6

s 17 min 50 5

.

10

8

s 2

,

5

.

10

6

s 11 jours

60 6

.

10

8

s 3

,

6

.

10

6

s 30 ans 70 7

.

10

8

s 4

,

9

.

10

6

s 30 000 ans

1 000 10

6

s 10

3

s

. . .

10

6

10

3

s 17 min

. . .

10

9

1 s 30 ans

. . .

Efficace

=

polynomial ( f

(

n

) =

n

k

)

Pas efficace

=

non polynomial (p. ex. f

(

n

) =

2

n

)

(63)

Temps d’exécution

(À la vitesse de 10

9

opérations par seconde) Taille de l’entrée f

(

n

) =

n f

(

n

) =

n

2

f

(

n

) =

2

n

10 10

8

s 10

7

s 10

6

s

20 2

.

10

8

s 4

.

10

7

s 10

3

s 30 3

.

10

8

s 9

.

10

7

s 1 s 40 4

.

10

8

s 1

,

6

.

10

6

s 17 min 50 5

.

10

8

s 2

,

5

.

10

6

s 11 jours 60 6

.

10

8

s 3

,

6

.

10

6

s 30 ans

70 7

.

10

8

s 4

,

9

.

10

6

s 30 000 ans

1 000 10

6

s 10

3

s

. . .

10

6

10

3

s 17 min

. . .

10

9

1 s 30 ans

. . .

Efficace

=

polynomial ( f

(

n

) =

n

k

)

Pas efficace

=

non polynomial (p. ex. f

(

n

) =

2

n

)

(64)

Temps d’exécution

(À la vitesse de 10

9

opérations par seconde) Taille de l’entrée f

(

n

) =

n f

(

n

) =

n

2

f

(

n

) =

2

n

10 10

8

s 10

7

s 10

6

s

20 2

.

10

8

s 4

.

10

7

s 10

3

s 30 3

.

10

8

s 9

.

10

7

s 1 s 40 4

.

10

8

s 1

,

6

.

10

6

s 17 min 50 5

.

10

8

s 2

,

5

.

10

6

s 11 jours 60 6

.

10

8

s 3

,

6

.

10

6

s 30 ans 70 7

.

10

8

s 4

,

9

.

10

6

s 30 000 ans

1 000 10

6

s 10

3

s

. . .

10

6

10

3

s 17 min

. . .

10

9

1 s 30 ans

. . .

Efficace

=

polynomial ( f

(

n

) =

n

k

)

Pas efficace

=

non polynomial (p. ex. f

(

n

) =

2

n

)

(65)

Temps d’exécution

(À la vitesse de 10

9

opérations par seconde) Taille de l’entrée f

(

n

) =

n f

(

n

) =

n

2

f

(

n

) =

2

n

10 10

8

s 10

7

s 10

6

s

20 2

.

10

8

s 4

.

10

7

s 10

3

s 30 3

.

10

8

s 9

.

10

7

s 1 s 40 4

.

10

8

s 1

,

6

.

10

6

s 17 min 50 5

.

10

8

s 2

,

5

.

10

6

s 11 jours 60 6

.

10

8

s 3

,

6

.

10

6

s 30 ans 70 7

.

10

8

s 4

,

9

.

10

6

s 30 000 ans

1 000 10

6

s 10

3

s

. . .

10

6

10

3

s 17 min

. . .

10

9

1 s 30 ans

. . .

Efficace

=

polynomial ( f

(

n

) =

n

k

)

Pas efficace

=

non polynomial (p. ex. f

(

n

) =

2

n

)

(66)

Temps d’exécution

(À la vitesse de 10

9

opérations par seconde) Taille de l’entrée f

(

n

) =

n f

(

n

) =

n

2

f

(

n

) =

2

n

10 10

8

s 10

7

s 10

6

s

20 2

.

10

8

s 4

.

10

7

s 10

3

s 30 3

.

10

8

s 9

.

10

7

s 1 s 40 4

.

10

8

s 1

,

6

.

10

6

s 17 min 50 5

.

10

8

s 2

,

5

.

10

6

s 11 jours 60 6

.

10

8

s 3

,

6

.

10

6

s 30 ans 70 7

.

10

8

s 4

,

9

.

10

6

s 30 000 ans

1 000 10

6

s 10

3

s

. . .

10

6

10

3

s 17 min

. . .

10

9

1 s 30 ans

. . .

Efficace

=

polynomial ( f

(

n

) =

n

k

)

Pas efficace

=

non polynomial (p. ex. f

(

n

) =

2

n

)

(67)

Temps d’exécution

(À la vitesse de 10

9

opérations par seconde) Taille de l’entrée f

(

n

) =

n f

(

n

) =

n

2

f

(

n

) =

2

n

10 10

8

s 10

7

s 10

6

s

20 2

.

10

8

s 4

.

10

7

s 10

3

s 30 3

.

10

8

s 9

.

10

7

s 1 s 40 4

.

10

8

s 1

,

6

.

10

6

s 17 min 50 5

.

10

8

s 2

,

5

.

10

6

s 11 jours 60 6

.

10

8

s 3

,

6

.

10

6

s 30 ans 70 7

.

10

8

s 4

,

9

.

10

6

s 30 000 ans

1 000 10

6

s 10

3

s

. . .

10

6

10

3

s 17 min

. . .

10

9

1 s 30 ans

. . .

Efficace

=

polynomial ( f

(

n

) =

n

k

)

Pas efficace

=

non polynomial (p. ex. f

(

n

) =

2

n

)

(68)

Temps d’exécution

Taille de l’entrée f

(

n

) =

n f

(

n

) =

n

2

f

(

n

) =

2

n

10 10

8

s 10

7

s 10

6

s

20 2

.

10

8

s 4

.

10

7

s 10

3

s 30 3

.

10

8

s 9

.

10

7

s 1 s 40 4

.

10

8

s 1

,

6

.

10

6

s 17 min 50 5

.

10

8

s 2

,

5

.

10

6

s 11 jours 60 6

.

10

8

s 3

,

6

.

10

6

s 30 ans 70 7

.

10

8

s 4

,

9

.

10

6

s 30 000 ans

1 000 10

6

s 10

3

s

. . .

10

6

10

3

s 17 min

. . .

10

9

1 s 30 ans

. . .

Efficace

=

polynomial ( f

(

n

) =

n

k

)

Pas efficace

=

non polynomial (p. ex. f

(

n

) =

2

n

)

(69)

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 ?

(70)

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.

(71)

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.

(72)

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.

(73)

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…

(74)

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…

(75)

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…

(76)

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)

(77)

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)

(78)

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 ?

(79)

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 ?

(80)

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 ?

(81)

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 ?

(82)

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)

(83)

Vérifier ou trouver une solution

P

: ensemble des problèmes résolubles en temps

polynomial ( f

(

n

) =

n

k

pour 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)

PNP

(84)

Vérifier ou trouver une solution

P

: ensemble des problèmes résolubles en temps

polynomial ( f

(

n

) =

n

k

pour 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)

PNP

(85)

Vérifier ou trouver une solution

P

: ensemble des problèmes résolubles en temps

polynomial ( f

(

n

) =

n

k

pour 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)

PNP

(86)

NP

L

NP

x

L ? x certificat y

V

(

x

,

y

)

x

L

⇐⇒ ∃

y

(

x

,

y

)

A

A

P

.

(87)

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.

(88)

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

.

(89)

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

.

(90)

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

SAT

est

NP

-complet.

(91)

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…

(92)

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…

(93)

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 !

(94)

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 !

(95)

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 !

(96)

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

NP

tel que :

A

̸∈P

;

A n’est pas

NP

-complet.

(97)

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

NP

tel que :

A

̸∈P

;

A n’est pas

NP

-complet.

(98)

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.

(99)

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.

Références

Documents relatifs

Mais l’ourson s’est échappé; il court, court le plus vite qu’il peut... Que cherche

Le problème du plus court chemin avec dépendance horaire (PCCDH) consiste à déterminer dans le graphe G un chemin de coût minimal entre deux nœuds donnés, en respectant les

Ce problème est résolu par programmation dynamique, avec comme variables d'état, des couples {temps, longueur) associés aux nœuds. Pour le problème classique d'un plus court

Mathias est dans sa maison et décide de rendre visite à quatre de ses amis (Julie, Léo, Fabien et Kevin) en VTT?. Dans quel ordre doit-il rencontrer ses amis pour effectuer le

• Le problème du plus court chemin consiste à déterminer le chemin de coût minimum reliant un nœud a à un nœud b.. • On peut le voir comme un problème

Le chemin de Mona est tracé en bleu sur le 2 ème dessin.. Le chemin d’Elio est tracé en noir sur le

Les coordonnées des différents points du plan sont stockées dans une liste à deux éléments [x, y].. Les différentes coordonnées des adresses sont stockées dans

Le parcours en largeur donne le plus court chemin mais utilise beaucoup de m´ emoire.. Dijkstra ´ etait le parcours en largeur avec