programmation dynamique - irisapeople.irisa.fr/.../mit1_algo1_2015/programmation_dynamique.pdf ·...

33
Construire une solution efinir des sous-probl` emes eduire le stockage eduire le temps (et le stockage) Bilan Programmation dynamique Francois Schwarzentruber ENS Rennes, France 1 / 33

Upload: others

Post on 10-Oct-2020

8 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Programmation dynamique - IRISApeople.irisa.fr/.../mit1_algo1_2015/programmation_dynamique.pdf · Programmation dynamique Francois Schwarzentruber ENS Rennes, France 1/33. Construire

Construire une solutionDefinir des sous-problemes

Reduire le stockageReduire le temps (et le stockage)

Bilan

Programmation dynamique

Francois Schwarzentruber

ENS Rennes, France

1 / 33

Page 2: Programmation dynamique - IRISApeople.irisa.fr/.../mit1_algo1_2015/programmation_dynamique.pdf · Programmation dynamique Francois Schwarzentruber ENS Rennes, France 1/33. Construire

Construire une solutionDefinir des sous-problemes

Reduire le stockageReduire le temps (et le stockage)

Bilan

Exemple de probleme

Calculer une plus longue sous-suite croissante

5 2 8 6 3 6 9 7

Revoir l’objectif a la baisse...

Calculer la longueur d’une plus longue sous-suite croissante.

2 / 33

Page 3: Programmation dynamique - IRISApeople.irisa.fr/.../mit1_algo1_2015/programmation_dynamique.pdf · Programmation dynamique Francois Schwarzentruber ENS Rennes, France 1/33. Construire

Construire une solutionDefinir des sous-problemes

Reduire le stockageReduire le temps (et le stockage)

Bilan

Principe de la programmation dynamique

Definir une collection de sous-problemes

Trouver une relation de recurrence

Ecrire un algorithme qui resout les sous-problemes

des plus petits au plus gros

3 / 33

Page 4: Programmation dynamique - IRISApeople.irisa.fr/.../mit1_algo1_2015/programmation_dynamique.pdf · Programmation dynamique Francois Schwarzentruber ENS Rennes, France 1/33. Construire

Construire une solutionDefinir des sous-problemes

Reduire le stockageReduire le temps (et le stockage)

Bilan

A ne pas suivre

Oublier de stocker les valeurs

Ecrire un algorithme recursif

function calculerLongueur(n)return 1 + maxj∈{1,...,n−1}|xj≤xn calculerLongueur(j)

endFunction

Complexite exponentielle en n

4 / 33

Page 5: Programmation dynamique - IRISApeople.irisa.fr/.../mit1_algo1_2015/programmation_dynamique.pdf · Programmation dynamique Francois Schwarzentruber ENS Rennes, France 1/33. Construire

Construire une solutionDefinir des sous-problemes

Reduire le stockageReduire le temps (et le stockage)

Bilan

Bonne conception d’algorithme

function resoudreProbleme(un grand probleme)Soit T un tableau pour stocker les resultats7

On parcourt les sous-problemes P par ordre croissantOn resout P avec la relation de recurrenceOn utilise les valeurs stockes dans TOn stocke le resultat pour P dans T

return la solution (en utilisant les valeurs stockees dans T )

endFunction

5 / 33

Page 6: Programmation dynamique - IRISApeople.irisa.fr/.../mit1_algo1_2015/programmation_dynamique.pdf · Programmation dynamique Francois Schwarzentruber ENS Rennes, France 1/33. Construire

Construire une solutionDefinir des sous-problemes

Reduire le stockageReduire le temps (et le stockage)

Bilan

Outline

1 Construire une solution

2 Definir des sous-problemes

3 Reduire le stockage

4 Reduire le temps (et le stockage)

5 Bilan

6 / 33

Page 7: Programmation dynamique - IRISApeople.irisa.fr/.../mit1_algo1_2015/programmation_dynamique.pdf · Programmation dynamique Francois Schwarzentruber ENS Rennes, France 1/33. Construire

Construire une solutionDefinir des sous-problemes

Reduire le stockageReduire le temps (et le stockage)

Bilan

Construire une solution

ce que l’on a︷ ︸︸ ︷la longueur d’une plus longue sous-suite croissante︸ ︷︷ ︸

ce que l’on veut

L[i ] = 1 + maxj∈{1,...,n−1}|xj≤xn L[j ]

stocker dans π[i ] un bon j s’il existe

5 2 8 6 3 6 9 7π3(i0) π2(i0) π(i0) i0

et π4(i0) = •7 / 33

Page 8: Programmation dynamique - IRISApeople.irisa.fr/.../mit1_algo1_2015/programmation_dynamique.pdf · Programmation dynamique Francois Schwarzentruber ENS Rennes, France 1/33. Construire

Construire une solutionDefinir des sous-problemes

Reduire le stockageReduire le temps (et le stockage)

Bilan

TextePlus court chemin dans un graphe

Outline

1 Construire une solution

2 Definir des sous-problemesTextePlus court chemin dans un graphe

3 Reduire le stockage

4 Reduire le temps (et le stockage)

5 Bilan

8 / 33

Page 9: Programmation dynamique - IRISApeople.irisa.fr/.../mit1_algo1_2015/programmation_dynamique.pdf · Programmation dynamique Francois Schwarzentruber ENS Rennes, France 1/33. Construire

Construire une solutionDefinir des sous-problemes

Reduire le stockageReduire le temps (et le stockage)

Bilan

TextePlus court chemin dans un graphe

Outline

1 Construire une solution

2 Definir des sous-problemesTextePlus court chemin dans un graphe

3 Reduire le stockage

4 Reduire le temps (et le stockage)

5 Bilan

9 / 33

Page 10: Programmation dynamique - IRISApeople.irisa.fr/.../mit1_algo1_2015/programmation_dynamique.pdf · Programmation dynamique Francois Schwarzentruber ENS Rennes, France 1/33. Construire

Construire une solutionDefinir des sous-problemes

Reduire le stockageReduire le temps (et le stockage)

Bilan

TextePlus court chemin dans un graphe

Texte

Si l’entree est x1x2 . . . xn, les sous-problemes peuvent etre :

x1x2 . . . xi xi+1 . . . xn

Si l’entree est x1x2 . . . xn, les sous-problemes peuvent etre :

x1 . . . xi xi+1x2 . . . xj xj+1 . . . xn

Si l’entree est x1x2 . . . xn et y1y2 . . . . . . ym, lessous-problemes peuvent etre :

x1x2 . . . xi xi+1 . . . xny1y2 . . . yj yi+1 . . . . . . ym

...

10 / 33

Page 11: Programmation dynamique - IRISApeople.irisa.fr/.../mit1_algo1_2015/programmation_dynamique.pdf · Programmation dynamique Francois Schwarzentruber ENS Rennes, France 1/33. Construire

Construire une solutionDefinir des sous-problemes

Reduire le stockageReduire le temps (et le stockage)

Bilan

TextePlus court chemin dans un graphe

Outline

1 Construire une solution

2 Definir des sous-problemesTextePlus court chemin dans un graphe

3 Reduire le stockage

4 Reduire le temps (et le stockage)

5 Bilan

11 / 33

Page 12: Programmation dynamique - IRISApeople.irisa.fr/.../mit1_algo1_2015/programmation_dynamique.pdf · Programmation dynamique Francois Schwarzentruber ENS Rennes, France 1/33. Construire

Construire une solutionDefinir des sous-problemes

Reduire le stockageReduire le temps (et le stockage)

Bilan

TextePlus court chemin dans un graphe

Plus court chemin dans un graphe

Cycle negatif !

1

1

-3

12 / 33

Page 13: Programmation dynamique - IRISApeople.irisa.fr/.../mit1_algo1_2015/programmation_dynamique.pdf · Programmation dynamique Francois Schwarzentruber ENS Rennes, France 1/33. Construire

Construire une solutionDefinir des sous-problemes

Reduire le stockageReduire le temps (et le stockage)

Bilan

TextePlus court chemin dans un graphe

Deux types de decomposition en sous-problemes

Calculer la longueur d’un plus court chemin de s a tou les numeros des sommets intermediaires

sont ≤ k

s t≤ k ≤ k . . . . . .

Calculer la longueur d’un plus court chemin de s a tavec au plus k arcs

s t. . .︸ ︷︷ ︸≤ k arcs

13 / 33

Page 14: Programmation dynamique - IRISApeople.irisa.fr/.../mit1_algo1_2015/programmation_dynamique.pdf · Programmation dynamique Francois Schwarzentruber ENS Rennes, France 1/33. Construire

Construire une solutionDefinir des sous-problemes

Reduire le stockageReduire le temps (et le stockage)

Bilan

TextePlus court chemin dans un graphe

Vers l’algorithme de Floyd-WarshallCalculer la longueur d’un plus court chemin de s a t

ou les numeros des sommets intermediairessont ≤ k

s t≤ k ≤ k . . . . . .

Probleme

Entree : G graphe oriente pondere sans cycle negatif

Sortie : les longueurs de tous les plus court chemins(+ detection de cycles negatifs)

→ s’adapte pour calculer expressions rationnelles correspondant aun automate

14 / 33

Page 15: Programmation dynamique - IRISApeople.irisa.fr/.../mit1_algo1_2015/programmation_dynamique.pdf · Programmation dynamique Francois Schwarzentruber ENS Rennes, France 1/33. Construire

Construire une solutionDefinir des sous-problemes

Reduire le stockageReduire le temps (et le stockage)

Bilan

TextePlus court chemin dans un graphe

Vers l’algorithme de Bellman-Ford

Calculer la longueur d’un plus court chemin de s a tavec au plus k arcs

s t. . .︸ ︷︷ ︸≤ k arcs

Probleme

Entree : G graphe oriente pondere sans cycle negatif, unsommet source s

Sortie : les longueurs de tous les plus court chemins depuis s(+ detection de cycles negatifs)

15 / 33

Page 16: Programmation dynamique - IRISApeople.irisa.fr/.../mit1_algo1_2015/programmation_dynamique.pdf · Programmation dynamique Francois Schwarzentruber ENS Rennes, France 1/33. Construire

Construire une solutionDefinir des sous-problemes

Reduire le stockageReduire le temps (et le stockage)

Bilan

Car pas besoin du toutSi pas besoin de reconstruire la solution

Outline

1 Construire une solution

2 Definir des sous-problemes

3 Reduire le stockageCar pas besoin du toutSi pas besoin de reconstruire la solution

4 Reduire le temps (et le stockage)

5 Bilan

16 / 33

Page 17: Programmation dynamique - IRISApeople.irisa.fr/.../mit1_algo1_2015/programmation_dynamique.pdf · Programmation dynamique Francois Schwarzentruber ENS Rennes, France 1/33. Construire

Construire une solutionDefinir des sous-problemes

Reduire le stockageReduire le temps (et le stockage)

Bilan

Car pas besoin du toutSi pas besoin de reconstruire la solution

Outline

1 Construire une solution

2 Definir des sous-problemes

3 Reduire le stockageCar pas besoin du toutSi pas besoin de reconstruire la solution

4 Reduire le temps (et le stockage)

5 Bilan

17 / 33

Page 18: Programmation dynamique - IRISApeople.irisa.fr/.../mit1_algo1_2015/programmation_dynamique.pdf · Programmation dynamique Francois Schwarzentruber ENS Rennes, France 1/33. Construire

Construire une solutionDefinir des sous-problemes

Reduire le stockageReduire le temps (et le stockage)

Bilan

Car pas besoin du toutSi pas besoin de reconstruire la solution

Exemple : Bellman-Ford

18 / 33

Page 19: Programmation dynamique - IRISApeople.irisa.fr/.../mit1_algo1_2015/programmation_dynamique.pdf · Programmation dynamique Francois Schwarzentruber ENS Rennes, France 1/33. Construire

Construire une solutionDefinir des sous-problemes

Reduire le stockageReduire le temps (et le stockage)

Bilan

Car pas besoin du toutSi pas besoin de reconstruire la solution

Outline

1 Construire une solution

2 Definir des sous-problemes

3 Reduire le stockageCar pas besoin du toutSi pas besoin de reconstruire la solution

4 Reduire le temps (et le stockage)

5 Bilan

19 / 33

Page 20: Programmation dynamique - IRISApeople.irisa.fr/.../mit1_algo1_2015/programmation_dynamique.pdf · Programmation dynamique Francois Schwarzentruber ENS Rennes, France 1/33. Construire

Construire une solutionDefinir des sous-problemes

Reduire le stockageReduire le temps (et le stockage)

Bilan

Car pas besoin du toutSi pas besoin de reconstruire la solution

Plus longue sous-suite commune [Papadimitriou et al.,Algorithms]

Entree : deux chaınes de caracteres x [1 . . .m] et y [1, . . . , n]

Sortie : la plus longue sous-suite communes a x et y

x : A B C B D A B

y : B D C A B C

20 / 33

Page 21: Programmation dynamique - IRISApeople.irisa.fr/.../mit1_algo1_2015/programmation_dynamique.pdf · Programmation dynamique Francois Schwarzentruber ENS Rennes, France 1/33. Construire

Construire une solutionDefinir des sous-problemes

Reduire le stockageReduire le temps (et le stockage)

Bilan

Reperer les points interessants dans la table (*)Memoızation

Outline

1 Construire une solution

2 Definir des sous-problemes

3 Reduire le stockage

4 Reduire le temps (et le stockage)Reperer les points interessants dans la table (*)Memoızation

5 Bilan

21 / 33

Page 22: Programmation dynamique - IRISApeople.irisa.fr/.../mit1_algo1_2015/programmation_dynamique.pdf · Programmation dynamique Francois Schwarzentruber ENS Rennes, France 1/33. Construire

Construire une solutionDefinir des sous-problemes

Reduire le stockageReduire le temps (et le stockage)

Bilan

Reperer les points interessants dans la table (*)Memoızation

Outline

1 Construire une solution

2 Definir des sous-problemes

3 Reduire le stockage

4 Reduire le temps (et le stockage)Reperer les points interessants dans la table (*)Memoızation

5 Bilan

22 / 33

Page 23: Programmation dynamique - IRISApeople.irisa.fr/.../mit1_algo1_2015/programmation_dynamique.pdf · Programmation dynamique Francois Schwarzentruber ENS Rennes, France 1/33. Construire

Construire une solutionDefinir des sous-problemes

Reduire le stockageReduire le temps (et le stockage)

Bilan

Reperer les points interessants dans la table (*)Memoızation

Reperer les points interessants dans la table (*)

“ A L G O R I T H M S ”

“ 0 0 0 0 0 0 0 0 0 0 0 0A 0 1 1 1 1 1 1 1 1 1 1 1L 0 1 2 2 2 2 2 2 2 2 2 2T 0 1 2 2 2 2 2 3 3 3 3 3R 0 1 2 2 2 3 3 3 3 3 3 3U 0 1 2 2 2 3 3 3 3 3 3 3I 0 1 2 2 2 3 4 4 4 4 4 4S 0 1 2 2 2 3 4 4 4 4 5 5T 0 1 2 2 2 3 4 5 5 5 5 5I 0 1 2 2 2 3 4 5 5 5 5 5C 0 1 2 2 2 3 4 5 5 5 5 5” 0 1 2 2 2 3 4 5 5 5 5 6

23 / 33

Page 24: Programmation dynamique - IRISApeople.irisa.fr/.../mit1_algo1_2015/programmation_dynamique.pdf · Programmation dynamique Francois Schwarzentruber ENS Rennes, France 1/33. Construire

Construire une solutionDefinir des sous-problemes

Reduire le stockageReduire le temps (et le stockage)

Bilan

Reperer les points interessants dans la table (*)Memoızation

Outline

1 Construire une solution

2 Definir des sous-problemes

3 Reduire le stockage

4 Reduire le temps (et le stockage)Reperer les points interessants dans la table (*)Memoızation

5 Bilan

24 / 33

Page 25: Programmation dynamique - IRISApeople.irisa.fr/.../mit1_algo1_2015/programmation_dynamique.pdf · Programmation dynamique Francois Schwarzentruber ENS Rennes, France 1/33. Construire

Construire une solutionDefinir des sous-problemes

Reduire le stockageReduire le temps (et le stockage)

Bilan

Reperer les points interessants dans la table (*)Memoızation

Exemple : sac a dos [Papadimitriou et al., Algorithms]Version avec repetition

. . .

v1 v2 vn

p1 p2 pn poids maximum P 25 / 33

Page 26: Programmation dynamique - IRISApeople.irisa.fr/.../mit1_algo1_2015/programmation_dynamique.pdf · Programmation dynamique Francois Schwarzentruber ENS Rennes, France 1/33. Construire

Construire une solutionDefinir des sous-problemes

Reduire le stockageReduire le temps (et le stockage)

Bilan

Reperer les points interessants dans la table (*)Memoızation

Memoızation

Soit T un tableau / table de hachage pour stocker les resultats

function resoudreProbleme(P)if P est deja resolu then

return la valeur correspondante stockee dans Telse

On resout P avec la relation de recurrenceOn appelle recursivement resoudreProblemeOn stocke le resultat pour P dans Treturn le resultat pour P

endFunction

26 / 33

Page 27: Programmation dynamique - IRISApeople.irisa.fr/.../mit1_algo1_2015/programmation_dynamique.pdf · Programmation dynamique Francois Schwarzentruber ENS Rennes, France 1/33. Construire

Construire une solutionDefinir des sous-problemes

Reduire le stockageReduire le temps (et le stockage)

Bilan

Reperer les points interessants dans la table (*)Memoızation

Exemple : sac a dos [Papadimitriou et al., Algorithms]Version sans repetition

. . .

v1 v2 vn

p1 p2 pn poids maximum P 27 / 33

Page 28: Programmation dynamique - IRISApeople.irisa.fr/.../mit1_algo1_2015/programmation_dynamique.pdf · Programmation dynamique Francois Schwarzentruber ENS Rennes, France 1/33. Construire

Construire une solutionDefinir des sous-problemes

Reduire le stockageReduire le temps (et le stockage)

Bilan

Reperer les points interessants dans la table (*)Memoızation

Sac a dos sans repetition : approximation [Papa., p. 284]

. . .

1.99e 38.4e 238.12e

1e 38e 238e

28 / 33

Page 29: Programmation dynamique - IRISApeople.irisa.fr/.../mit1_algo1_2015/programmation_dynamique.pdf · Programmation dynamique Francois Schwarzentruber ENS Rennes, France 1/33. Construire

Construire une solutionDefinir des sous-problemes

Reduire le stockageReduire le temps (et le stockage)

Bilan

Reperer les points interessants dans la table (*)Memoızation

Sac a dos sans repetition : approximation [Papa., p. 284]

. . .

1.99e 38.4e 238.12e1e 38e 238e

29 / 33

Page 30: Programmation dynamique - IRISApeople.irisa.fr/.../mit1_algo1_2015/programmation_dynamique.pdf · Programmation dynamique Francois Schwarzentruber ENS Rennes, France 1/33. Construire

Construire une solutionDefinir des sous-problemes

Reduire le stockageReduire le temps (et le stockage)

Bilan

Outline

1 Construire une solution

2 Definir des sous-problemes

3 Reduire le stockage

4 Reduire le temps (et le stockage)

5 Bilan

30 / 33

Page 31: Programmation dynamique - IRISApeople.irisa.fr/.../mit1_algo1_2015/programmation_dynamique.pdf · Programmation dynamique Francois Schwarzentruber ENS Rennes, France 1/33. Construire

Construire une solutionDefinir des sous-problemes

Reduire le stockageReduire le temps (et le stockage)

Bilan

Bilan

Bien specifier en francais les sous-problemes sans cela... pasde relation de recurrence possible

Pas d’appel recursif (sauf si memoızation)

Stocker les resultats intermediaires dans un tableau ou... unetable de hachage

Bien comprendre l’ordre partiel donne par la relation derecurrence

Choisir une bonne extension lineaire qui donne l’ordre effectifdes sous-problemes

31 / 33

Page 32: Programmation dynamique - IRISApeople.irisa.fr/.../mit1_algo1_2015/programmation_dynamique.pdf · Programmation dynamique Francois Schwarzentruber ENS Rennes, France 1/33. Construire

Construire une solutionDefinir des sous-problemes

Reduire le stockageReduire le temps (et le stockage)

Bilan

Questions

On peut adapter l’algorithme de Floyd-Warshall pour calculerune expression rationnelle d’un automate. Peut-on adapterBellman-Ford ?

32 / 33

Page 33: Programmation dynamique - IRISApeople.irisa.fr/.../mit1_algo1_2015/programmation_dynamique.pdf · Programmation dynamique Francois Schwarzentruber ENS Rennes, France 1/33. Construire

Construire une solutionDefinir des sous-problemes

Reduire le stockageReduire le temps (et le stockage)

Bilan

Thank you for your attention!

33 / 33