• Aucun résultat trouvé

Algorithmique des graphes 10 — Programmation dynamique Anthony Labarre 14 avril 2021

N/A
N/A
Protected

Academic year: 2022

Partager "Algorithmique des graphes 10 — Programmation dynamique Anthony Labarre 14 avril 2021"

Copied!
156
0
0

Texte intégral

(1)

Algorithmique des graphes

10 — Programmation dynamique

Anthony Labarre

14 avril 2021

(2)

Introduction Principes Probl`eme de d´ecoupe Distance d’´edition Reconstruction des solutions optimales

R´ esum´ e des ´ episodes pr´ ec´ edents

• On a mentionn´e trois cat´egories de techniques algorithmiques et couvert les deux premi`eres :

1 l’approche gloutonne ;

2 l’approche diviser pour r´egner ;

3 la programmation dynamique ;

• On a d´efini la notion de sous-probl`eme ;

• On va maintenant examiner comment la programmation dynamique en tire parti ;

(3)

Introduction Principes Probl`eme de d´ecoupe Distance d’´edition Reconstruction des solutions optimales

R´ esum´ e des ´ episodes pr´ ec´ edents

• On a mentionn´e trois cat´egories de techniques algorithmiques et couvert les deux premi`eres :

1 l’approche gloutonne ;

2 l’approche diviser pour r´egner ;

3 la programmation dynamique ;

• On a d´efini la notion de sous-probl`eme ;

• On va maintenant examiner comment la programmation dynamique en tire parti ;

3

(4)

Introduction Principes Probl`eme de d´ecoupe Distance d’´edition Reconstruction des solutions optimales

R´ esum´ e des ´ episodes pr´ ec´ edents

• On a mentionn´e trois cat´egories de techniques algorithmiques et couvert les deux premi`eres :

1 l’approche gloutonne ;

2 l’approche diviser pour r´egner ;

3 la programmation dynamique ;

• On a d´efini la notion de sous-probl`eme ;

• On va maintenant examiner comment la programmation dynamique en tire parti ;

(5)

Introduction Principes Probl`eme de d´ecoupe Distance d’´edition Reconstruction des solutions optimales

R´ esum´ e des ´ episodes pr´ ec´ edents

• On a mentionn´e trois cat´egories de techniques algorithmiques et couvert les deux premi`eres :

1 l’approche gloutonne ;

2 l’approche diviser pour r´egner ;

3 la programmation dynamique ;

• On a d´efini la notion de sous-probl`eme ;

• On va maintenant examiner comment la programmation dynamique en tire parti ;

5

(6)

Introduction Principes Probl`eme de d´ecoupe Distance d’´edition Reconstruction des solutions optimales

R´ esum´ e des ´ episodes pr´ ec´ edents

• On a mentionn´e trois cat´egories de techniques algorithmiques et couvert les deux premi`eres :

1 l’approche gloutonne ;

2 l’approche diviser pour r´egner ;

3 la programmation dynamique ;

• On a d´efini la notion de sous-probl`eme ;

• On va maintenant examiner comment la programmation dynamique en tire parti ;

(7)

Introduction Principes Probl`eme de d´ecoupe Distance d’´edition Reconstruction des solutions optimales

R´ esum´ e des ´ episodes pr´ ec´ edents

• On a mentionn´e trois cat´egories de techniques algorithmiques et couvert les deux premi`eres :

1 l’approche gloutonne ;

2 l’approche diviser pour r´egner ;

3 la programmation dynamique ;

• On a d´efini la notion de sous-probl`eme ;

• On va maintenant examiner comment la programmation dynamique en tire parti ;

7

(8)

Introduction Principes Probl`eme de d´ecoupe Distance d’´edition Reconstruction des solutions optimales

Programmation dynamique

• Le terme de “programmation dynamique” n’a rien `a voir avec l’impl´ementation (C, C++, . . . ) ;

• Le mot “programmation” d´esigne ici l’utilisation d’un tableau pour stocker des valeurs (cf. “programmation lin´eaire”) ;

• Le mot “dynamique” signifie comme on s’y attend que ce tableau et son utilisation vont changer au cours de l’ex´ecution de l’algorithme ;

(9)

Introduction Principes Probl`eme de d´ecoupe Distance d’´edition Reconstruction des solutions optimales

Programmation dynamique

• Le terme de “programmation dynamique” n’a rien `a voir avec l’impl´ementation (C, C++, . . . ) ;

• Le mot “programmation” d´esigne ici l’utilisation d’un tableau pour stocker des valeurs (cf. “programmation lin´eaire”) ;

• Le mot “dynamique” signifie comme on s’y attend que ce tableau et son utilisation vont changer au cours de l’ex´ecution de l’algorithme ;

9

(10)

Introduction Principes Probl`eme de d´ecoupe Distance d’´edition Reconstruction des solutions optimales

Programmation dynamique

• Le terme de “programmation dynamique” n’a rien `a voir avec l’impl´ementation (C, C++, . . . ) ;

• Le mot “programmation” d´esigne ici l’utilisation d’un tableau pour stocker des valeurs (cf. “programmation lin´eaire”) ;

• Le mot “dynamique” signifie comme on s’y attend que ce tableau et son utilisation vont changer au cours de l’ex´ecution de l’algorithme ;

(11)

Introduction Principes Probl`eme de d´ecoupe Distance d’´edition Reconstruction des solutions optimales

Principe de la programmation dynamique

• La programmation dynamique est peut-ˆetre plus facile `a comprendre en prenant comme point de d´epart les algorithmes r´ecursifs ;

• L’id´ee consiste `a acc´el´erer ces algorithmes en stockant les r´esultats interm´ediaires plutˆot que d’effectuer des appels r´ecursifs ;

• Si possible, d’autres optimisations suivront ;

• Cette approche sera d’autant plus efficace que la solution r´ecursive “na¨ıve” r´eutilise des r´esultats d´ej`a connus ;

11

(12)

Introduction Principes Probl`eme de d´ecoupe Distance d’´edition Reconstruction des solutions optimales

Principe de la programmation dynamique

• La programmation dynamique est peut-ˆetre plus facile `a comprendre en prenant comme point de d´epart les algorithmes r´ecursifs ;

• L’id´ee consiste `a acc´el´erer ces algorithmes en stockant les r´esultats interm´ediaires plutˆot que d’effectuer des appels r´ecursifs ;

• Si possible, d’autres optimisations suivront ;

• Cette approche sera d’autant plus efficace que la solution r´ecursive “na¨ıve” r´eutilise des r´esultats d´ej`a connus ;

(13)

Introduction Principes Probl`eme de d´ecoupe Distance d’´edition Reconstruction des solutions optimales

Principe de la programmation dynamique

• La programmation dynamique est peut-ˆetre plus facile `a comprendre en prenant comme point de d´epart les algorithmes r´ecursifs ;

• L’id´ee consiste `a acc´el´erer ces algorithmes en stockant les r´esultats interm´ediaires plutˆot que d’effectuer des appels r´ecursifs ;

• Si possible, d’autres optimisations suivront ;

• Cette approche sera d’autant plus efficace que la solution r´ecursive “na¨ıve” r´eutilise des r´esultats d´ej`a connus ;

13

(14)

Introduction Principes Probl`eme de d´ecoupe Distance d’´edition Reconstruction des solutions optimales

Principe de la programmation dynamique

• La programmation dynamique est peut-ˆetre plus facile `a comprendre en prenant comme point de d´epart les algorithmes r´ecursifs ;

• L’id´ee consiste `a acc´el´erer ces algorithmes en stockant les r´esultats interm´ediaires plutˆot que d’effectuer des appels r´ecursifs ;

• Si possible, d’autres optimisations suivront ;

• Cette approche sera d’autant plus efficace que la solution r´ecursive “na¨ıve” r´eutilise des r´esultats d´ej`a connus ;

(15)

Introduction Principes Probl`eme de d´ecoupe Distance d’´edition Reconstruction des solutions optimales

Exemple : nombres de Fibonacci

Pour rappel, len`emenombre de FibonacciFnest d´efininNpar : Fn=

n sin1, Fn−1+Fn−2 sinon.

Version triviale Fibo(n)

Entr´ees :un natureln.

Sortie :len-`eme nombre de Fibonacci.

1 sin1alors renvoyern;

2 renvoyerFibo(n1) +Fibo(n2);

Arbre d’appels pour Fibo(5)

F2= 1

F1= 1 F1= 1

F1= 1 F3= 2

F5= 5

F0= 0

F2= 1

F2= 1

F0= 0 F0= 0

F3= 2

F1= 1 F1= 1

F4= 3

Quelle est la complexit´e deFibo(n)?

op´erations enO(1)seul le nombre d’appels r´ecursifs compte ;

Fibo(n) s’appelle deux fois, dont une avecn1 ;

on a donc duO(2n).

15

(16)

Introduction Principes Probl`eme de d´ecoupe Distance d’´edition Reconstruction des solutions optimales

Exemple : nombres de Fibonacci

Pour rappel, len`emenombre de FibonacciFnest d´efininNpar : Fn=

n sin1, Fn−1+Fn−2 sinon.

Version triviale Fibo(n)

Entr´ees :un natureln.

Sortie :len-`eme nombre de Fibonacci.

1 sin1alors renvoyern;

2 renvoyerFibo(n1) +Fibo(n2);

Arbre d’appels pour Fibo(5)

F2= 1

F1= 1 F1= 1

F1= 1 F3= 2

F5= 5

F0= 0

F2= 1

F2= 1

F0= 0 F0= 0

F3= 2

F1= 1 F1= 1

F4= 3

Quelle est la complexit´e deFibo(n)?

op´erations enO(1)seul le nombre d’appels r´ecursifs compte ;

Fibo(n) s’appelle deux fois, dont une avecn1 ;

on a donc duO(2n).

(17)

Introduction Principes Probl`eme de d´ecoupe Distance d’´edition Reconstruction des solutions optimales

Exemple : nombres de Fibonacci

Pour rappel, len`emenombre de FibonacciFnest d´efininNpar : Fn=

n sin1, Fn−1+Fn−2 sinon.

Version triviale Fibo(n)

Entr´ees :un natureln.

Sortie :len-`eme nombre de Fibonacci.

1 sin1alors renvoyern;

2 renvoyerFibo(n1) +Fibo(n2);

Arbre d’appels pour Fibo(5)

F2= 1

F1= 1 F1= 1

F1= 1 F3= 2

F5= 5

F0= 0

F2= 1

F2= 1

F0= 0 F0= 0

F3= 2

F1= 1 F1= 1

F4= 3

Quelle est la complexit´e deFibo(n)?

op´erations enO(1)seul le nombre d’appels r´ecursifs compte ;

Fibo(n) s’appelle deux fois, dont une avecn1 ;

on a donc duO(2n).

17

(18)

Introduction Principes Probl`eme de d´ecoupe Distance d’´edition Reconstruction des solutions optimales

Exemple : nombres de Fibonacci

Pour rappel, len`emenombre de FibonacciFnest d´efininNpar : Fn=

n sin1, Fn−1+Fn−2 sinon.

Version triviale Fibo(n)

Entr´ees :un natureln.

Sortie :len-`eme nombre de Fibonacci.

1 sin1alors renvoyern;

2 renvoyerFibo(n1) +Fibo(n2);

Arbre d’appels pour Fibo(5)

F2= 1

F1= 1 F1= 1

F1= 1 F3= 2

F5= 5

F0= 0

F2= 1

F2= 1

F0= 0 F0= 0

F3= 2

F1= 1 F1= 1

F4= 3

Quelle est la complexit´e deFibo(n)?

op´erations enO(1)seul le nombre d’appels r´ecursifs compte ;

Fibo(n) s’appelle deux fois, dont une avecn1 ;

on a donc duO(2n).

(19)

Introduction Principes Probl`eme de d´ecoupe Distance d’´edition Reconstruction des solutions optimales

Exemple : nombres de Fibonacci

Pour rappel, len`emenombre de FibonacciFnest d´efininNpar : Fn=

n sin1, Fn−1+Fn−2 sinon.

Version triviale Fibo(n)

Entr´ees :un natureln.

Sortie :len-`eme nombre de Fibonacci.

1 sin1alors renvoyern;

2 renvoyerFibo(n1) +Fibo(n2);

Arbre d’appels pour Fibo(5)

F2= 1

F1= 1 F1= 1

F1= 1 F3= 2

F5= 5

F0= 0

F2= 1

F2= 1

F0= 0 F0= 0

F3= 2

F1= 1 F1= 1

F4= 3

Quelle est la complexit´e deFibo(n)?

op´erations enO(1)seul le nombre d’appels r´ecursifs compte ;

Fibo(n) s’appelle deux fois, dont une avecn1 ;

on a donc duO(2n).

19

(20)

Introduction Principes Probl`eme de d´ecoupe Distance d’´edition Reconstruction des solutions optimales

Exemple : nombres de Fibonacci

Pour rappel, len`emenombre de FibonacciFnest d´efininNpar : Fn=

n sin1, Fn−1+Fn−2 sinon.

Version triviale Fibo(n)

Entr´ees :un natureln.

Sortie :len-`eme nombre de Fibonacci.

1 sin1alors renvoyern;

2 renvoyerFibo(n1) +Fibo(n2);

Arbre d’appels pour Fibo(5)

F2= 1

F1= 1 F1= 1

F1= 1 F3= 2

F5= 5

F0= 0

F2= 1

F2= 1

F0= 0 F0= 0

F3= 2

F1= 1 F1= 1

F4= 3

Quelle est la complexit´e deFibo(n)?

op´erations enO(1)seul le nombre d’appels r´ecursifs compte ;

Fibo(n) s’appelle deux fois, dont une avecn1 ;

on a donc duO(2n).

(21)

Introduction Principes Probl`eme de d´ecoupe Distance d’´edition Reconstruction des solutions optimales

Exemple : nombres de Fibonacci

Pour rappel, len`emenombre de FibonacciFnest d´efininNpar : Fn=

n sin1, Fn−1+Fn−2 sinon.

Version triviale Fibo(n)

Entr´ees :un natureln.

Sortie :len-`eme nombre de Fibonacci.

1 sin1alors renvoyern;

2 renvoyerFibo(n1) +Fibo(n2);

Arbre d’appels pour Fibo(5)

F2= 1

F1= 1 F1= 1

F1= 1 F3= 2

F5= 5

F0= 0

F2= 1

F2= 1

F0= 0 F0= 0

F3= 2

F1= 1 F1= 1

F4= 3

Quelle est la complexit´e deFibo(n)?

op´erations enO(1)seul le nombre d’appels r´ecursifs compte ;

Fibo(n) s’appelle deux fois, dont une avecn1 ;

on a donc duO(2n).

21

(22)

Introduction Principes Probl`eme de d´ecoupe Distance d’´edition Reconstruction des solutions optimales

Simplification de l’arbre d’appels

Ces appels r´ecursifs effectuent ´enorm´ement de travail inutile :

Arbre d’appels

F2= 1

F1= 1 F1= 1

F1= 1 F3= 2

F5= 5

F0= 0

F2= 1

F2= 1 F0= 0 F0= 0

F3= 2 F1= 1

F1= 1 F4= 3

DAG d’appels simplifi´e

F2= 1 F5= 5

F0= 0 F3= 2

F1= 1 F4= 3

Pour obtenir un algorithme correspondant `a la version de droite, on doit stocker les r´esultats interm´ediaires dans un tableau pour pouvoir les exploiter :

(23)

Introduction Principes Probl`eme de d´ecoupe Distance d’´edition Reconstruction des solutions optimales

Simplification de l’arbre d’appels

Ces appels r´ecursifs effectuent ´enorm´ement de travail inutile :

Arbre d’appels

F2= 1

F1= 1 F1= 1

F1= 1 F3= 2

F5= 5

F0= 0

F2= 1

F2= 1 F0= 0 F0= 0

F3= 2 F1= 1

F1= 1 F4= 3

DAG d’appels simplifi´e

F2= 1 F5= 5

F0= 0 F3= 2

F1= 1 F4= 3

Pour obtenir un algorithme correspondant `a la version de droite, on doit stocker les r´esultats interm´ediaires dans un tableau pour pouvoir les exploiter :

23

(24)

Introduction Principes Probl`eme de d´ecoupe Distance d’´edition Reconstruction des solutions optimales

Simplification de l’arbre d’appels

Ces appels r´ecursifs effectuent ´enorm´ement de travail inutile :

Arbre d’appels

F2= 1

F1= 1 F1= 1

F1= 1 F3= 2

F5= 5

F0= 0

F2= 1

F2= 1 F0= 0 F0= 0

F3= 2 F1= 1

F1= 1 F4= 3

DAG d’appels simplifi´e

F2= 1 F5= 5

F0= 0 F3= 2

F1= 1 F4= 3

Pour obtenir un algorithme correspondant `a la version de droite, on doit stocker les r´esultats interm´ediaires dans un tableau pour pouvoir les exploiter :

(25)

Introduction Principes Probl`eme de d´ecoupe Distance d’´edition Reconstruction des solutions optimales

Simplification de l’arbre d’appels

Ces appels r´ecursifs effectuent ´enorm´ement de travail inutile :

Arbre d’appels

F2= 1

F1= 1 F1= 1

F1= 1 F3= 2

F5= 5

F0= 0

F2= 1

F2= 1 F0= 0 F0= 0

F3= 2 F1= 1

F1= 1 F4= 3

DAG d’appels simplifi´e

F2= 1 F5= 5

F0= 0 F3= 2

F1= 1 F4= 3

Pour obtenir un algorithme correspondant `a la version de droite, on doit stocker les r´esultats interm´ediaires dans un tableau pour pouvoir les exploiter :

25

(26)

Introduction Principes Probl`eme de d´ecoupe Distance d’´edition Reconstruction des solutions optimales

Simplification de l’arbre d’appels

Ces appels r´ecursifs effectuent ´enorm´ement de travail inutile :

Arbre d’appels

F2= 1

F1= 1 F1= 1

F1= 1 F3= 2

F5= 5

F0= 0

F2= 1

F2= 1 F0= 0 F0= 0

F3= 2 F1= 1

F1= 1 F4= 3

DAG d’appels simplifi´e

F2= 1 F5= 5

F0= 0 F3= 2

F1= 1 F4= 3

Pour obtenir un algorithme correspondant `a la version de droite, on doit stocker les r´esultats interm´ediaires dans un tableau pour pouvoir les exploiter :

(27)

Introduction Principes Probl`eme de d´ecoupe Distance d’´edition Reconstruction des solutions optimales

Simplification de l’arbre d’appels

Ces appels r´ecursifs effectuent ´enorm´ement de travail inutile :

Arbre d’appels

F2= 1

F1= 1 F1= 1

F1= 1 F3= 2

F5= 5

F0= 0

F2= 1

F2= 1 F0= 0 F0= 0

F3= 2 F1= 1

F1= 1 F4= 3

DAG d’appels simplifi´e

F2= 1 F5= 5

F0= 0 F3= 2

F1= 1 F4= 3

Pour obtenir un algorithme correspondant `a la version de droite, on doit stocker les r´esultats interm´ediaires dans un tableau pour pouvoir les exploiter :

27

(28)

Introduction Principes Probl`eme de d´ecoupe Distance d’´edition Reconstruction des solutions optimales

Simplification de l’arbre d’appels

Ces appels r´ecursifs effectuent ´enorm´ement de travail inutile :

Arbre d’appels

F2= 1

F1= 1 F1= 1

F1= 1 F3= 2

F5= 5

F0= 0

F2= 1

F2= 1 F0= 0 F0= 0

F3= 2 F1= 1

F1= 1 F4= 3

DAG d’appels simplifi´e

F2= 1 F5= 5

F0= 0 F3= 2

F1= 1 F4= 3

Pour obtenir un algorithme correspondant `a la version de droite, on doit stocker les r´esultats interm´ediaires dans un tableau pour pouvoir les exploiter :

i: 0 1 2 3 4 5

Fi : 0 1 −1 −1 −1 −1

(29)

Introduction Principes Probl`eme de d´ecoupe Distance d’´edition Reconstruction des solutions optimales

Simplification de l’arbre d’appels

Ces appels r´ecursifs effectuent ´enorm´ement de travail inutile :

Arbre d’appels

F2= 1

F1= 1 F1= 1

F1= 1 F3= 2

F5= 5

F0= 0

F2= 1

F2= 1 F0= 0 F0= 0

F3= 2 F1= 1

F1= 1 F4= 3

DAG d’appels simplifi´e

F2= 1 F5= 5

F0= 0 F3= 2

F1= 1 F4= 3

Pour obtenir un algorithme correspondant `a la version de droite, on doit stocker les r´esultats interm´ediaires dans un tableau pour pouvoir les exploiter :

i: 0 1 2 3 4 5

Fi : 0 1 −1 −1 −1 −1

29

(30)

Introduction Principes Probl`eme de d´ecoupe Distance d’´edition Reconstruction des solutions optimales

Simplification de l’arbre d’appels

Ces appels r´ecursifs effectuent ´enorm´ement de travail inutile :

Arbre d’appels

F2= 1

F1= 1 F1= 1

F1= 1 F3= 2

F5= 5

F0= 0

F2= 1

F2= 1 F0= 0 F0= 0

F3= 2 F1= 1

F1= 1 F4= 3

DAG d’appels simplifi´e

F2= 1 F5= 5

F0= 0 F3= 2

F1= 1 F4= 3

Pour obtenir un algorithme correspondant `a la version de droite, on doit stocker les r´esultats interm´ediaires dans un tableau pour pouvoir les exploiter :

i: 0 1 2 3 4 5

Fi : 0 1 −1 −1 −1 −1

(31)

Introduction Principes Probl`eme de d´ecoupe Distance d’´edition Reconstruction des solutions optimales

Simplification de l’arbre d’appels

Ces appels r´ecursifs effectuent ´enorm´ement de travail inutile :

Arbre d’appels

F2= 1

F1= 1 F1= 1

F1= 1 F3= 2

F5= 5

F0= 0

F2= 1

F2= 1 F0= 0 F0= 0

F3= 2 F1= 1

F1= 1 F4= 3

DAG d’appels simplifi´e

F2= 1 F5= 5

F0= 0 F3= 2

F1= 1 F4= 3

Pour obtenir un algorithme correspondant `a la version de droite, on doit stocker les r´esultats interm´ediaires dans un tableau pour pouvoir les exploiter :

i: 0 1 2 3 4 5

Fi : 0 1 −1 −1 −1 −1

31

(32)

Introduction Principes Probl`eme de d´ecoupe Distance d’´edition Reconstruction des solutions optimales

Simplification de l’arbre d’appels

Ces appels r´ecursifs effectuent ´enorm´ement de travail inutile :

Arbre d’appels

F2= 1

F1= 1 F1= 1

F1= 1 F3= 2

F5= 5

F0= 0

F2= 1

F2= 1 F0= 0 F0= 0

F3= 2 F1= 1

F1= 1 F4= 3

DAG d’appels simplifi´e

F2= 1 F5= 5

F0= 0 F3= 2

F1= 1 F4= 3

Pour obtenir un algorithme correspondant `a la version de droite, on doit stocker les r´esultats interm´ediaires dans un tableau pour pouvoir les exploiter :

i: 0 1 2 3 4 5

Fi : 0 1 −1 −1 −1 −1

(33)

Introduction Principes Probl`eme de d´ecoupe Distance d’´edition Reconstruction des solutions optimales

Simplification de l’arbre d’appels

Ces appels r´ecursifs effectuent ´enorm´ement de travail inutile :

Arbre d’appels

F2= 1

F1= 1 F1= 1

F1= 1 F3= 2

F5= 5

F0= 0

F2= 1

F2= 1 F0= 0 F0= 0

F3= 2 F1= 1

F1= 1 F4= 3

DAG d’appels simplifi´e

F2= 1 F5= 5

F0= 0 F3= 2

F1= 1 F4= 3

Pour obtenir un algorithme correspondant `a la version de droite, on doit stocker les r´esultats interm´ediaires dans un tableau pour pouvoir les exploiter :

i: 0 1 2 3 4 5

Fi : 0 1 1 −1 −1 −1

33

(34)

Introduction Principes Probl`eme de d´ecoupe Distance d’´edition Reconstruction des solutions optimales

Simplification de l’arbre d’appels

Ces appels r´ecursifs effectuent ´enorm´ement de travail inutile :

Arbre d’appels

F2= 1

F1= 1 F1= 1

F1= 1 F3= 2

F5= 5

F0= 0

F2= 1

F2= 1 F0= 0 F0= 0

F3= 2 F1= 1

F1= 1 F4= 3

DAG d’appels simplifi´e

F2= 1 F5= 5

F0= 0 F3= 2

F1= 1 F4= 3

Pour obtenir un algorithme correspondant `a la version de droite, on doit stocker les r´esultats interm´ediaires dans un tableau pour pouvoir les exploiter :

i: 0 1 2 3 4 5

Fi : 0 1 1 2 −1 −1

(35)

Introduction Principes Probl`eme de d´ecoupe Distance d’´edition Reconstruction des solutions optimales

Simplification de l’arbre d’appels

Ces appels r´ecursifs effectuent ´enorm´ement de travail inutile :

Arbre d’appels

F2= 1

F1= 1 F1= 1

F1= 1 F3= 2

F5= 5

F0= 0

F2= 1

F2= 1 F0= 0 F0= 0

F3= 2 F1= 1

F1= 1 F4= 3

DAG d’appels simplifi´e

F2= 1 F5= 5

F0= 0 F3= 2

F1= 1 F4= 3

Pour obtenir un algorithme correspondant `a la version de droite, on doit stocker les r´esultats interm´ediaires dans un tableau pour pouvoir les exploiter :

i: 0 1 2 3 4 5

Fi : 0 1 1 2 3 −1

35

(36)

Introduction Principes Probl`eme de d´ecoupe Distance d’´edition Reconstruction des solutions optimales

Simplification de l’arbre d’appels

Ces appels r´ecursifs effectuent ´enorm´ement de travail inutile :

Arbre d’appels

F2= 1

F1= 1 F1= 1

F1= 1 F3= 2

F5= 5

F0= 0

F2= 1

F2= 1 F0= 0 F0= 0

F3= 2 F1= 1

F1= 1 F4= 3

DAG d’appels simplifi´e

F2= 1 F5= 5

F0= 0 F3= 2

F1= 1 F4= 3

Pour obtenir un algorithme correspondant `a la version de droite, on doit stocker les r´esultats interm´ediaires dans un tableau pour pouvoir les exploiter :

i: 0 1 2 3 4 5

Fi : 0 1 1 2 3 5

(37)

Introduction Principes Probl`eme de d´ecoupe Distance d’´edition Reconstruction des solutions optimales

Exemple : nombres de Fibonacci

On obtient donc la version suivante, qui enregistre les valeurs au fur et `a mesure des appels et renvoie celles qui sont connues au lieu de faire des appels ecursifs :

Algorithme 1 :Fibonacci r´ecursif avec stockage

1 Algorithme auxiliaireFiboMieux(n)

2 valeurstableau(n+ 1,−1) ; valeurs[0]0 ; valeurs[1]1 ;

3 renvoyer FiboRec(n)

4 Algorithme principalFiboRec(n)

5 sivaleurs[n]=−1alors

6 valeurs[n]FiboRec(n1)+FiboRec(n2);

7 renvoyer valeurs[n]

On peut encore am´eliorer les choses :

ecursivit´e : on se contente de remplir le tableau de gauche `a droite ;

tableau : seules les deux derni`eres valeurs nous int´eressent `a chaque

´ etape ;

au final : complexit´e enO(n), consommation m´emoire enO(1) ;

37

(38)

Introduction Principes Probl`eme de d´ecoupe Distance d’´edition Reconstruction des solutions optimales

Exemple : nombres de Fibonacci

On obtient donc la version suivante, qui enregistre les valeurs au fur et `a mesure des appels et renvoie celles qui sont connues au lieu de faire des appels ecursifs :

Algorithme 1 :Fibonacci r´ecursif avec stockage

1 Algorithme auxiliaireFiboMieux(n)

2 valeurstableau(n+ 1,−1) ; valeurs[0]0 ; valeurs[1]1 ;

3 renvoyer FiboRec(n)

4 Algorithme principalFiboRec(n)

5 sivaleurs[n]=−1alors

6 valeurs[n]FiboRec(n1)+FiboRec(n2);

7 renvoyer valeurs[n]

On peut encore am´eliorer les choses :

ecursivit´e : on se contente de remplir le tableau de gauche `a droite ;

tableau : seules les deux derni`eres valeurs nous int´eressent `a chaque

´ etape ;

au final : complexit´e enO(n), consommation m´emoire enO(1) ;

(39)

Introduction Principes Probl`eme de d´ecoupe Distance d’´edition Reconstruction des solutions optimales

Exemple : nombres de Fibonacci

On obtient donc la version suivante, qui enregistre les valeurs au fur et `a mesure des appels et renvoie celles qui sont connues au lieu de faire des appels ecursifs :

Algorithme 1 :Fibonacci r´ecursif avec stockage

1 Algorithme auxiliaireFiboMieux(n)

2 valeurstableau(n+ 1,−1) ; valeurs[0]0 ; valeurs[1]1 ;

3 renvoyer FiboRec(n)

4 Algorithme principalFiboRec(n)

5 sivaleurs[n]=−1alors

6 valeurs[n]FiboRec(n1)+FiboRec(n2);

7 renvoyer valeurs[n]

On peut encore am´eliorer les choses :

ecursivit´e : on se contente de remplir le tableau de gauche `a droite ;

tableau : seules les deux derni`eres valeurs nous int´eressent `a chaque

´ etape ;

au final : complexit´e enO(n), consommation m´emoire enO(1) ;

39

(40)

Introduction Principes Probl`eme de d´ecoupe Distance d’´edition Reconstruction des solutions optimales

Exemple : nombres de Fibonacci

On obtient donc la version suivante, qui enregistre les valeurs au fur et `a mesure des appels et renvoie celles qui sont connues au lieu de faire des appels ecursifs :

Algorithme 1 :Fibonacci r´ecursif avec stockage

1 Algorithme auxiliaireFiboMieux(n)

2 valeurstableau(n+ 1,−1) ; valeurs[0]0 ; valeurs[1]1 ;

3 renvoyer FiboRec(n)

4 Algorithme principalFiboRec(n)

5 sivaleurs[n]=−1alors

6 valeurs[n]FiboRec(n1)+FiboRec(n2);

7 renvoyer valeurs[n]

On peut encore am´eliorer les choses :

ecursivit´e : on se contente de remplir le tableau de gauche `a droite ;

tableau : seules les deux derni`eres valeurs nous int´eressent `a chaque

´ etape ;

au final : complexit´e enO(n), consommation m´emoire enO(1) ;

(41)

Introduction Principes Probl`eme de d´ecoupe Distance d’´edition Reconstruction des solutions optimales

Exemple : nombres de Fibonacci

On obtient donc la version suivante, qui enregistre les valeurs au fur et `a mesure des appels et renvoie celles qui sont connues au lieu de faire des appels ecursifs :

Algorithme 1 :Fibonacci r´ecursif avec stockage

1 Algorithme auxiliaireFiboMieux(n)

2 valeurstableau(n+ 1,−1) ; valeurs[0]0 ; valeurs[1]1 ;

3 renvoyer FiboRec(n)

4 Algorithme principalFiboRec(n)

5 sivaleurs[n]=−1alors

6 valeurs[n]FiboRec(n1)+FiboRec(n2);

7 renvoyer valeurs[n]

On peut encore am´eliorer les choses :

ecursivit´e : on se contente de remplir le tableau de gauche `a droite ;

tableau : seules les deux derni`eres valeurs nous int´eressent `a chaque

´ etape ;

au final : complexit´e enO(n), consommation m´emoire enO(1) ;

41

Références

Documents relatifs

les parcours largeur, profondeur et les arbres associés ; le calcul des composantes connexes ; la détection de cycle ; la reconnaissance des graphes bipartis ;... Correction

• L’algorithme de Bellman-Ford recherche également des raccourcis entre les sommets ; • Le fonctionnement est différent de celui de Dijkstra, qui cherchait des chemins

Introduction Les bases La m´ ethode de Ford-Fulkerson Coupes minimum Complexit´ e de l’algorithme

• Dans le cas o` u le graphe n’est pas biparti, le probl` eme reste soluble en temps polynomial mais l’algorithme est beaucoup plus complexe [2] ;. • Et si l’on veut des

3 combiner : combiner les solutions des sous-probl` emes pour obtenir la solution au probl` eme de d´ epart. • L’efficacit´ e de cette approche d´ epend fortement des complexit´ es

et donc, le poids d’une solution optimale pour tsp est au moins celui d’un ACPM, qu’on est capable de trouver en temps polynomial ;.. Introduction vertex cover

Introduction Preuve du th´ eor` eme max-flow min-cut Algorithme de Dinitz Couplages dans un graphe biparti.. R´ esum´ e des ´ episodes pr´

I La m´ ethode de Ford-Fulkerson proc` ede comme suit ; on d´ emarre avec un flot f nul partout pour le r´ eseau G , et ` a chaque it´ eration :.. on augmente au maximum f sur les