Programmation dynamique
Algorithmique des graphes
Anthony Labarre
4 mai 2020
Introduction Principes Probl`eme de d´ecoupe Distance d’´edition Reconstruction des solutions optimales
R´ esum´ e des ´ episodes pr´ ec´ edents
I 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 ;
I On a d´efini la notion de sous-probl`eme ;
I 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
I 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 ;
I On a d´efini la notion de sous-probl`eme ;
I 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
I 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 ;
I On a d´efini la notion de sous-probl`eme ;
I 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
I 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 ;
I On a d´efini la notion de sous-probl`eme ;
I 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
I 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 ;
I On a d´efini la notion de sous-probl`eme ;
I 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
I 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 ;
I On a d´efini la notion de sous-probl`eme ;
I 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
Programmation dynamique
I Le terme de “programmation dynamique” n’a rien `a voir avec l’impl´ementation (C, C++, . . . ) ;
I Le mot “programmation” d´esigne ici l’utilisation d’un tableau pour stocker des valeurs (cf. “programmation lin´eaire”) ; I 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
I Le terme de “programmation dynamique” n’a rien `a voir avec l’impl´ementation (C, C++, . . . ) ;
I Le mot “programmation” d´esigne ici l’utilisation d’un tableau pour stocker des valeurs (cf. “programmation lin´eaire”) ;
I 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
I Le terme de “programmation dynamique” n’a rien `a voir avec l’impl´ementation (C, C++, . . . ) ;
I Le mot “programmation” d´esigne ici l’utilisation d’un tableau pour stocker des valeurs (cf. “programmation lin´eaire”) ; I 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
I La programmation dynamique est peut-ˆetre plus facile `a comprendre en prenant comme point de d´epart les algorithmes r´ecursifs ;
I 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 ;
I Si possible, d’autres optimisations suivront ;
I 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
I La programmation dynamique est peut-ˆetre plus facile `a comprendre en prenant comme point de d´epart les algorithmes r´ecursifs ;
I 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 ;
I Si possible, d’autres optimisations suivront ;
I 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
I La programmation dynamique est peut-ˆetre plus facile `a comprendre en prenant comme point de d´epart les algorithmes r´ecursifs ;
I 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 ;
I Si possible, d’autres optimisations suivront ;
I 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
I La programmation dynamique est peut-ˆetre plus facile `a comprendre en prenant comme point de d´epart les algorithmes r´ecursifs ;
I 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 ;
I Si possible, d’autres optimisations suivront ;
I 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)?
I op´erations enO(1)⇒seul le nombre d’appels r´ecursifs compte ; I Fibo(n) s’appelle deux fois, dont une avecn−1 ;
I 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)?
I op´erations enO(1)⇒seul le nombre d’appels r´ecursifs compte ; I Fibo(n) s’appelle deux fois, dont une avecn−1 ;
I 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)?
I op´erations enO(1)⇒seul le nombre d’appels r´ecursifs compte ; I Fibo(n) s’appelle deux fois, dont une avecn−1 ;
I 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)?
I op´erations enO(1)⇒seul le nombre d’appels r´ecursifs compte ; I Fibo(n) s’appelle deux fois, dont une avecn−1 ;
I 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)?
I op´erations enO(1)⇒seul le nombre d’appels r´ecursifs compte ;
I Fibo(n) s’appelle deux fois, dont une avecn−1 ; I 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)?
I op´erations enO(1)⇒seul le nombre d’appels r´ecursifs compte ; I Fibo(n) s’appelle deux fois, dont une avecn−1 ;
I 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)?
I op´erations enO(1)⇒seul le nombre d’appels r´ecursifs compte ; I Fibo(n) s’appelle deux fois, dont une avecn−1 ;
I on a donc duO(2n).
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 :
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 :
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 :
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
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
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
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
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 :
I r´ecursivit´e : on se contente de remplir le tableau de gauche `a droite ; I tableau : seules les deux derni`eres valeurs nous int´eressent `a chaque
´ etape ;
I ⇒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 :
I r´ecursivit´e : on se contente de remplir le tableau de gauche `a droite ; I tableau : seules les deux derni`eres valeurs nous int´eressent `a chaque
´ etape ;
I ⇒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 :
I r´ecursivit´e : on se contente de remplir le tableau de gauche `a droite ;
I tableau : seules les deux derni`eres valeurs nous int´eressent `a chaque
´ etape ;
I ⇒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 :
I r´ecursivit´e : on se contente de remplir le tableau de gauche `a droite ; I tableau : seules les deux derni`eres valeurs nous int´eressent `a chaque
´ etape ;
I ⇒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 :
I r´ecursivit´e : on se contente de remplir le tableau de gauche `a droite ; I tableau : seules les deux derni`eres valeurs nous int´eressent `a chaque
´ etape ;
I ⇒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
Programmation dynamique pour les probl` emes d’optimisation
I La programmation dynamique proc`ede comme suit :
1. on d´ecoupe le probl`eme de d´epart en sous-probl`emes plus simples ;
2. on les r´esoud de mani`ere optimale ;
3. on choisit ensuite la solution optimale au probl`eme de d´epart sur base des solutions des sous-probl`emes ;
I Comme on l’a vu, il est essentiel de stocker les calculs interm´ediaires si l’on veut ´eviter une complexit´e prohibitive.