Algorithmique des graphes
10 — Programmation dynamique
Anthony Labarre
14 avril 2021
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 ;
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 ;
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 ;
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
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 ;
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 ;
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
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 ;
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 ;
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´efini∀n∈Npar : Fn=
n sin≤1, Fn−1+Fn−2 sinon.
Version triviale Fibo(n)
Entr´ees :un natureln.
Sortie :len-`eme nombre de Fibonacci.
1 sin≤1alors renvoyern;
2 renvoyerFibo(n−1) +Fibo(n−2);
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 avecn−1 ;
• on a donc duO(2n).
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´efini∀n∈Npar : Fn=
n sin≤1, Fn−1+Fn−2 sinon.
Version triviale Fibo(n)
Entr´ees :un natureln.
Sortie :len-`eme nombre de Fibonacci.
1 sin≤1alors renvoyern;
2 renvoyerFibo(n−1) +Fibo(n−2);
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 avecn−1 ;
• on a donc duO(2n).
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´efini∀n∈Npar : Fn=
n sin≤1, Fn−1+Fn−2 sinon.
Version triviale Fibo(n)
Entr´ees :un natureln.
Sortie :len-`eme nombre de Fibonacci.
1 sin≤1alors renvoyern;
2 renvoyerFibo(n−1) +Fibo(n−2);
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 avecn−1 ;
• 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´efini∀n∈Npar : Fn=
n sin≤1, Fn−1+Fn−2 sinon.
Version triviale Fibo(n)
Entr´ees :un natureln.
Sortie :len-`eme nombre de Fibonacci.
1 sin≤1alors renvoyern;
2 renvoyerFibo(n−1) +Fibo(n−2);
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 avecn−1 ;
• on a donc duO(2n).
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´efini∀n∈Npar : Fn=
n sin≤1, Fn−1+Fn−2 sinon.
Version triviale Fibo(n)
Entr´ees :un natureln.
Sortie :len-`eme nombre de Fibonacci.
1 sin≤1alors renvoyern;
2 renvoyerFibo(n−1) +Fibo(n−2);
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 avecn−1 ;
• 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´efini∀n∈Npar : Fn=
n sin≤1, Fn−1+Fn−2 sinon.
Version triviale Fibo(n)
Entr´ees :un natureln.
Sortie :len-`eme nombre de Fibonacci.
1 sin≤1alors renvoyern;
2 renvoyerFibo(n−1) +Fibo(n−2);
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 avecn−1 ;
• on a donc duO(2n).
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´efini∀n∈Npar : Fn=
n sin≤1, Fn−1+Fn−2 sinon.
Version triviale Fibo(n)
Entr´ees :un natureln.
Sortie :len-`eme nombre de Fibonacci.
1 sin≤1alors renvoyern;
2 renvoyerFibo(n−1) +Fibo(n−2);
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 avecn−1 ;
• on a donc duO(2n).
21
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 :
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 :
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 :
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 :
i: 0 1 2 3 4 5
Fi : 0 1 −1 −1 −1 −1
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
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
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 2 −1 −1
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
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
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 r´ecursifs :
Algorithme 1 :Fibonacci r´ecursif avec stockage
1 Algorithme auxiliaireFiboMieux(n)
2 valeurs←tableau(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(n−1)+FiboRec(n−2);
7 renvoyer valeurs[n]
On peut encore am´eliorer les choses :
• r´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
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 r´ecursifs :
Algorithme 1 :Fibonacci r´ecursif avec stockage
1 Algorithme auxiliaireFiboMieux(n)
2 valeurs←tableau(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(n−1)+FiboRec(n−2);
7 renvoyer valeurs[n]
On peut encore am´eliorer les choses :
• r´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) ;
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 r´ecursifs :
Algorithme 1 :Fibonacci r´ecursif avec stockage
1 Algorithme auxiliaireFiboMieux(n)
2 valeurs←tableau(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(n−1)+FiboRec(n−2);
7 renvoyer valeurs[n]
On peut encore am´eliorer les choses :
• r´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 r´ecursifs :
Algorithme 1 :Fibonacci r´ecursif avec stockage
1 Algorithme auxiliaireFiboMieux(n)
2 valeurs←tableau(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(n−1)+FiboRec(n−2);
7 renvoyer valeurs[n]
On peut encore am´eliorer les choses :
• r´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) ;
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 r´ecursifs :
Algorithme 1 :Fibonacci r´ecursif avec stockage
1 Algorithme auxiliaireFiboMieux(n)
2 valeurs←tableau(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(n−1)+FiboRec(n−2);
7 renvoyer valeurs[n]
On peut encore am´eliorer les choses :
• r´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