• Aucun résultat trouvé

Programmation dynamique Algorithmique des graphes Anthony Labarre 4 mai 2020

N/A
N/A
Protected

Academic year: 2022

Partager "Programmation dynamique Algorithmique des graphes Anthony Labarre 4 mai 2020"

Copied!
156
0
0

Texte intégral

(1)

Programmation dynamique

Algorithmique des graphes

Anthony Labarre

4 mai 2020

(2)

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 ;

(3)

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 ;

(4)

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 ;

(5)

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 ;

(6)

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 ;

(7)

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 ;

(8)

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 ;

(9)

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 ;

(10)

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 ;

(11)

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 ;

(12)

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 ;

(13)

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 ;

(14)

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 ;

(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)?

I op´erations enO(1)seul le nombre d’appels r´ecursifs compte ; I Fibo(n) s’appelle deux fois, dont une avecn1 ;

I on a donc duO(2n).

(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)?

I op´erations enO(1)seul le nombre d’appels r´ecursifs compte ; I Fibo(n) s’appelle deux fois, dont une avecn1 ;

I 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)?

I op´erations enO(1)seul le nombre d’appels r´ecursifs compte ; I Fibo(n) s’appelle deux fois, dont une avecn1 ;

I on a donc duO(2n).

(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)?

I op´erations enO(1)seul le nombre d’appels r´ecursifs compte ; I Fibo(n) s’appelle deux fois, dont une avecn1 ;

I 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)?

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

I Fibo(n) s’appelle deux fois, dont une avecn1 ; I on a donc duO(2n).

(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)?

I op´erations enO(1)seul le nombre d’appels r´ecursifs compte ; I Fibo(n) s’appelle deux fois, dont une avecn1 ;

I 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)?

I op´erations enO(1)seul le nombre d’appels r´ecursifs compte ; I Fibo(n) s’appelle deux fois, dont une avecn1 ;

I on a donc duO(2n).

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

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

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

(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

(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

(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

(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

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

I 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) ;

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

I 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) ;

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

I 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) ;

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

I 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) ;

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

I 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) ;

(42)

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.

Références

Documents relatifs

Algorithme de reconnaissance des graphes bipartis • On en déduit l’algorithme de reconnaissance suivant : • choisir un sommet arbitraire et le colorier rouge ; • colorier

Cours précédent : caractérisation des graphes bipartis Théorème 1 Un graphe est biparti si et seulement s’il ne contient pas de cycle de longueur impaire.... Arbres couvrants

L’arbre couvrant que calcule Prim est de poids minimum Procédons par induction sur |V T |, en montrant qu’à chaque étape, il existe un ACPM Topt contenant T... Plus

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