La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Cours d'algorithmique 6 - Intranet 1 23 novembre 2006 Cours dAlgorithmique Programmation dynamique : Problème du sac à dos. Négociant en sardines au port.

Présentations similaires


Présentation au sujet: "Cours d'algorithmique 6 - Intranet 1 23 novembre 2006 Cours dAlgorithmique Programmation dynamique : Problème du sac à dos. Négociant en sardines au port."— Transcription de la présentation:

1 Cours d'algorithmique 6 - Intranet 1 23 novembre 2006 Cours dAlgorithmique Programmation dynamique : Problème du sac à dos. Négociant en sardines au port de Marseille. Problème de la plus longue sous-chaîne commune. Problème du plus court chemin.

2 23 novembre 2006Cours d'algorithmique 6 - Intranet2 Trier et chercher, recherche textuelle Trier et chercher, recherche textuelle Listes et arbres Listes et arbres Le back-track Le back-track Arbres équilibrés Arbres équilibrés Récursivité et induction sur la structure Récursivité et induction sur la structure Divide and conquer Divide and conquer Minimax, alpha-beta Minimax, alpha-beta Dérécursion Dérécursion Divers problèmes particuliers. Divers problèmes particuliers. Logique de Hoare Logique de Hoare Programmation dynamique Programmation dynamique Complexité et calculabilité Complexité et calculabilité Les grandes lignes du cours

3 23 novembre 2006Cours d'algorithmique 6 - Intranet3 Dynamic Programming En français : Programmation dynamique ! Abréviation classique : DP Notion introduite par Richard Bellman en 1957.

4 23 novembre 2006Cours d'algorithmique 6 - Intranet4 Dynamic Programming En français : Programmation dynamique ! Abréviation classique : DP Notion introduite par Richard Bellman en Principe : Nous explicitons le TEMPS qui sera linéaire, bi-dimensionnel,...

5 23 novembre 2006Cours d'algorithmique 6 - Intranet5 Dynamic Programming Introduction à la problématique. Introduction à la problématique. Considérons à nouveau la fonction Fibonacci : Considérons à nouveau la fonction Fibonacci : fib ( n ) = n si n = 0 ou n = 1, fib ( n-2 ) + fib ( n-1 ) sinon. {

6 23 novembre 2006Cours d'algorithmique 6 - Intranet6 Dynamic Programming Introduction à la problématique. Introduction à la problématique. Considérons à nouveau la fonction Fibonacci : Considérons à nouveau la fonction Fibonacci : Le programme récursif est exponentiel en temps ! Le programme récursif est exponentiel en temps ! Cest dû aux répétitions de calculs ! fib ( n ) = n si n = 0 ou n = 1, fib ( n-2 ) + fib ( n-1 ) sinon. {

7 23 novembre 2006Cours d'algorithmique 6 - Intranet7 Dynamic Programming Principe de la programmation dynamique : Principe de la programmation dynamique : – Dites à quel moment vous ferez quel calcul ? fib ( t ) = t si t = 0 ou t = 1, fib ( t-2 ) + fib ( t-1 ) sinon. {

8 23 novembre 2006Cours d'algorithmique 6 - Intranet8 Dynamic Programming Principe de la programmation dynamique : Principe de la programmation dynamique : – Dites à quel moment vous ferez quel calcul ? fib ( t ) = t si t = 0 ou t = 1, fib ( t-2 ) + fib ( t-1 ) sinon. { Nous utilisons au temps « t » ce que nous avons pu calculer aux temps « t – 1 » et « t – 2 ».

9 23 novembre 2006Cours d'algorithmique 6 - Intranet9 Dynamic Programming Principe de la programmation dynamique : Principe de la programmation dynamique : – Dites à quel moment vous ferez quel calcul ? Respectons le temps : Respectons le temps : fib ( t ) = t si t = 0 ou t = 1, fib ( t-2 ) + fib ( t-1 ) sinon. {t fib10

10 23 novembre 2006Cours d'algorithmique 6 - Intranet10 Dynamic Programming Principe de la programmation dynamique : Principe de la programmation dynamique : – Dites à quel moment vous ferez quel calcul ? Respectons le temps : Respectons le temps : fib ( t ) = t si t = 0 ou t = 1, fib ( t-2 ) + fib ( t-1 ) sinon. {t fib110

11 23 novembre 2006Cours d'algorithmique 6 - Intranet11 Dynamic Programming Principe de la programmation dynamique : Principe de la programmation dynamique : – Dites à quel moment vous ferez quel calcul ? Respectons le temps : Respectons le temps : fib ( t ) = t si t = 0 ou t = 1, fib ( t-2 ) + fib ( t-1 ) sinon. {t fib1120

12 23 novembre 2006Cours d'algorithmique 6 - Intranet12 Dynamic Programming Principe de la programmation dynamique : Principe de la programmation dynamique : – Dites à quel moment vous ferez quel calcul ? Respectons le temps : Respectons le temps : fib ( t ) = t si t = 0 ou t = 1, fib ( t-2 ) + fib ( t-1 ) sinon. {t fib11230

13 23 novembre 2006Cours d'algorithmique 6 - Intranet13 Dynamic Programming Principe de la programmation dynamique : Principe de la programmation dynamique : – Dites à quel moment vous ferez quel calcul ? Respectons le temps : Respectons le temps : fib ( t ) = t si t = 0 ou t = 1, fib ( t-2 ) + fib ( t-1 ) sinon. {t fib112350

14 23 novembre 2006Cours d'algorithmique 6 - Intranet14 Dynamic Programming Principe de la programmation dynamique : Principe de la programmation dynamique : – Dites à quel moment vous ferez quel calcul ? Respectons le temps : Respectons le temps : fib ( t ) = t si t = 0 ou t = 1, fib ( t-2 ) + fib ( t-1 ) sinon. {t fib

15 23 novembre 2006Cours d'algorithmique 6 - Intranet15 Dynamic Programming Principe de la programmation dynamique : Principe de la programmation dynamique : – Dites à quel moment vous ferez quel calcul ? Respectons le temps : Respectons le temps : Nous avons une complexité en temps linéaire ! ! ! Nous avons une complexité en temps linéaire ! ! ! fib ( t ) = t si t = 0 ou t = 1, fib ( t-2 ) + fib ( t-1 ) sinon. {t fib

16 23 novembre 2006Cours d'algorithmique 6 - Intranet16 L A F O N C T I O N D E T E M P S L E S D E P E N D A N C E S Dynamic Programming

17 23 novembre 2006Cours d'algorithmique 6 - Intranet17 Dynamic Programming Quelle fonction de temps ? Quelle fonction de temps ? – Cest quoi ?

18 23 novembre 2006Cours d'algorithmique 6 - Intranet18 Dynamic Programming Quelle fonction de temps ? Quelle fonction de temps ? – Cest quoi ? – Une fonction qui dit, en termes de létat du problème, à quel moment il va être résolu ! – Exemples : fib ( t ) au temps « t », prog( x, y ) au temps « 2 *x + y -5 ». prog( x, y ) au temps « 2 *x + y -5 ».

19 23 novembre 2006Cours d'algorithmique 6 - Intranet19 Dynamic Programming Quelle fonction de temps ? Quelle fonction de temps ? – Cest quoi ? – Une fonction qui dit, en termes de létat du problème, à quel moment il va être résolu ! – Exemples : fib ( t ) au temps « t », prog( x, y ) au temps « 2 *x + y -5 ». prog( x, y ) au temps « 2 *x + y -5 ». Nimporte laquelle pour peu que Nimporte laquelle pour peu que – nous ne répétions pas les calculs Ce nest pas interdit, mais fortement déconseillé ! Ce nest pas interdit, mais fortement déconseillé ! – et que la fonction soit compatible avec les dépendances.

20 23 novembre 2006Cours d'algorithmique 6 - Intranet20 Dynamic Programming Dépendances entre problèmes : Dépendances entre problèmes : – On parle aussi de « flot de données ou de contrôle ». – Le calcul « B » dépend du calcul « A » sil faut que « A » soit calculé avant « B » ! « A » soit calculé avant « B » !

21 23 novembre 2006Cours d'algorithmique 6 - Intranet21 Dynamic Programming Dépendances entre problèmes : Dépendances entre problèmes : – On parle aussi de « flot de données ou de contrôle ». – Le calcul « B » dépend du calcul « A » sil faut que « A » soit calculé avant « B » ! « A » soit calculé avant « B » ! – Soit, parce que « A » a besoin de données produites par « B » --- flot de données !

22 23 novembre 2006Cours d'algorithmique 6 - Intranet22 Dynamic Programming Dépendances entre problèmes : Dépendances entre problèmes : – On parle aussi de « flot de données ou de contrôle ». – Le calcul « B » dépend du calcul « A » sil faut que « A » soit calculé avant « B » ! « A » soit calculé avant « B » ! – Soit, parce que « A » a besoin de données produites par « B » --- flot de données ! – Soit, parce quil faut respecter un ordre (par exemple imprimer « A » avant « B »). imprimer « A » avant « B »).

23 23 novembre 2006Cours d'algorithmique 6 - Intranet23 Dynamic Programming Dépendances entre problèmes : Dépendances entre problèmes : – On parle aussi de « flot de données ou de contrôle ». – Le calcul « B » dépend du calcul « A » sil faut que « A » soit calculé avant « B » ! « A » soit calculé avant « B » ! – Soit, parce que « A » a besoin de données produites par « B » --- flot de données ! – Soit, parce quil faut respecter un ordre (par exemple imprimer « A » avant « B »). imprimer « A » avant « B »). – Soit, parce que « A » conditionne « B » ( si A alors B ) --- flot de contrôle !

24 23 novembre 2006Cours d'algorithmique 6 - Intranet24 Dynamic Programming Dépendances entre problèmes : Dépendances entre problèmes : – On parle aussi de « flot de données ou de contrôle». – Le calcul « B » dépend du calcul « A » sil faut que « A » soit calculé avant « B » ! « A » soit calculé avant « B » ! – Soit, parce que « A » a besoin de données produites par « B » --- flot de données ! – Soit, parce quil faut respecter un ordre (par exemple imprimer « A » avant « B »). imprimer « A » avant « B »). – Soit, parce que « A » conditionne « B » ( si A alors B ) --- flot de contrôle !

25 23 novembre 2006Cours d'algorithmique 6 - Intranet25 Dynamic Programming En fait, les dépendances comportent une notion de temporalité sous la forme de : En fait, les dépendances comportent une notion de temporalité sous la forme de : AVANT --- APRES AVANT --- APRES DABORD --- ENSUITE DABORD --- ENSUITE

26 23 novembre 2006Cours d'algorithmique 6 - Intranet26 Dynamic Programming En fait, les dépendances comportent une notion de temporalité sous la forme de : En fait, les dépendances comportent une notion de temporalité sous la forme de : AVANT --- APRES AVANT --- APRES DABORD --- ENSUITE DABORD --- ENSUITE La fonction de temps « f » dit de manière plus précise : La fonction de temps « f » dit de manière plus précise : QUAND QUAND

27 23 novembre 2006Cours d'algorithmique 6 - Intranet27 Dynamic Programming En fait, les dépendances comportent une notion de temporalité sous la forme de : En fait, les dépendances comportent une notion de temporalité sous la forme de : AVANT --- APRES AVANT --- APRES DABORD --- ENSUITE DABORD --- ENSUITE La fonction de temps « f » dit de manière plus précise : La fonction de temps « f » dit de manière plus précise : QUAND QUAND La contrainte sur « f » dit que : La contrainte sur « f » dit que : – dès que « A » doit être avant « B » pour des raisons de dépendances, alors f ( A ) < f ( B ) f ( A ) < f ( B )

28 23 novembre 2006Cours d'algorithmique 6 - Intranet28 Dynamic Programming En fait, les dépendances comportent une notion de temporalité sous la forme de : En fait, les dépendances comportent une notion de temporalité sous la forme de : AVANT --- APRES AVANT --- APRES DABORD --- ENSUITE DABORD --- ENSUITE La fonction de temps « f » dit de manière plus précise : La fonction de temps « f » dit de manière plus précise : QUAND QUAND La contrainte sur « f » dit que : La contrainte sur « f » dit que : – dès que « A » doit être avant « B » pour des raisons de dépendances, alors f ( A ) < f ( B ) f ( A ) < f ( B ) « f » est alors dite « compatible avec les dépendances ».

29 23 novembre 2006Cours d'algorithmique 6 - Intranet29 Dynamic Programming Larbre de dépendances de Fibonacci : Larbre de dépendances de Fibonacci :

30 23 novembre 2006Cours d'algorithmique 6 - Intranet30 Dynamic Programming Larbre de dépendances de Fibonacci : Larbre de dépendances de Fibonacci : Sa projection sur un axe de temps : Sa projection sur un axe de temps : t

31 23 novembre 2006Cours d'algorithmique 6 - Intranet31 Dynamic Programming Larbre de dépendances de Fibonacci : Larbre de dépendances de Fibonacci : Sa projection sur un axe de temps : Sa projection sur un axe de temps : t

32 23 novembre 2006Cours d'algorithmique 6 - Intranet32 Dynamic Programming Larbre de dépendances de Fibonacci : Larbre de dépendances de Fibonacci : Sa projection sur un axe de temps : Sa projection sur un axe de temps : t Compatibilité !

33 23 novembre 2006Cours d'algorithmique 6 - Intranet33 Dynamic Programming Parfois, la programmation dynamique est Parfois, la programmation dynamique est la transformation dun problème de back-track ou divide-and-conquer la transformation dun problème de back-track ou divide-and-conquer avec un comportement temporel anarchique avec un comportement temporel anarchique en un problème qui réalise les calculs une et une seule fois, et lorsquil le faut ! en un problème qui réalise les calculs une et une seule fois, et lorsquil le faut !

34 23 novembre 2006Cours d'algorithmique 6 - Intranet34 Dynamic Programming Il y a une théorie derrière ! Il y a une théorie derrière ! Cadre général : les modèles de décision multi-étages. Cadre général : les modèles de décision multi-étages. Si certaines propriétés sont vérifiées, on peut transformer tout problème de ce modèle en un programme DP. Si certaines propriétés sont vérifiées, on peut transformer tout problème de ce modèle en un programme DP. Trop long et compliqué dans le contexte du cours. Trop long et compliqué dans le contexte du cours.

35 23 novembre 2006Cours d'algorithmique 6 - Intranet35 U n e x e m p l e c o m p l e t : S A C A D O S ! ! ! Dynamic Programming

36 23 novembre 2006Cours d'algorithmique 6 - Intranet36 Sac à dos --- Knapsack Problème du « sac à dos » ! Problème du « sac à dos » ! Ingrédients : Ingrédients : – 1 sac à dos de capacité « C » (par exemple en kilos), – n objets de O, …, O de poids strictement positifs respectifs p de poids strictement positifs respectifs p et de bénéfices strictement positifs respectifs b. et de bénéfices strictement positifs respectifs b. n 1 i i

37 23 novembre 2006Cours d'algorithmique 6 - Intranet37 Sac à dos --- Knapsack Problème du « sac à dos » ! Problème du « sac à dos » ! Ingrédients : Ingrédients : – 1 sac à dos de capacité « C » (par exemple en kilos), – n objets de O, …, O de poids strictement positifs respectifs p de poids strictement positifs respectifs p et de bénéfices strictement positifs respectifs b. et de bénéfices strictement positifs respectifs b. Recette : Recette : – Trouvez, sans dépasser la capacité, lensemble dobjets qui maximise le bénéfice. n 1 i i

38 23 novembre 2006Cours d'algorithmique 6 - Intranet38 Sac à dos --- Knapsack Trouvez lensemble « I » inclus dans { 1, …, n } tel que : Trouvez lensemble « I » inclus dans { 1, …, n } tel que : P ( I ) = p C P ( I ) = p C i I i

39 23 novembre 2006Cours d'algorithmique 6 - Intranet39 Sac à dos --- Knapsack Trouvez lensemble « I » inclus dans { 1, …, n } tel que : Trouvez lensemble « I » inclus dans { 1, …, n } tel que : P ( I ) = p C P ( I ) = p C B ( I ) = b max ( B ( J ) ) B ( I ) = b max ( B ( J ) ) i I i J { 1, …, n } et P ( J ) C v i i I

40 23 novembre 2006Cours d'algorithmique 6 - Intranet40 Sac à dos --- Knapsack Trouvez lensemble « I » inclus dans { 1, …, n } tel que : Trouvez lensemble « I » inclus dans { 1, …, n } tel que : P ( I ) = p C P ( I ) = p C B ( I ) = b max ( B ( J ) ) B ( I ) = b max ( B ( J ) ) A priori, il faut se comparer à un grand nombre dautres ensembles candidats à être optimal. A priori, il faut se comparer à un grand nombre dautres ensembles candidats à être optimal. i I i J { 1, …, n } et P ( J ) C v i i I

41 23 novembre 2006Cours d'algorithmique 6 - Intranet41 Sac à dos --- Knapsack Correct, mais … Correct, mais … {int max_benefice = 0 ; pour k allant de 1 à n faire pour chaque ensemble I, de taille k et sous-ensemble de { 1,..., n } faire si ( P ( I ) <= C ) max_benefice = max ( B ( I ), max_benefice ) ; }

42 23 novembre 2006Cours d'algorithmique 6 - Intranet42 Sac à dos --- Knapsack Correct, mais … Correct, mais … {int max_benefice = 0 ; pour k allant de 1 à n faire pour chaque ensemble I, de taille k et sous-ensemble de { 1,..., n } faire si ( P ( I ) <= C ) max_benefice = max ( B ( I ), max_benefice ) ; } Toutes les tailles possibles pour les sous-ensembles.

43 23 novembre 2006Cours d'algorithmique 6 - Intranet43 Sac à dos --- Knapsack Correct, mais … Correct, mais … {int max_benefice = 0 ; pour k allant de 1 à n faire pour chaque ensemble I, de taille k et sous-ensemble de { 1,..., n } faire si ( P ( I ) <= C ) max_benefice = max ( B ( I ), max_benefice ) ; } Toutes les tailles possibles pour les sous-ensembles. Tous les sous-ensembles de cette taille …

44 23 novembre 2006Cours d'algorithmique 6 - Intranet44 Sac à dos --- Knapsack Correct, mais … Correct, mais … {int max_benefice = 0 ; pour k allant de 1 à n faire pour chaque ensemble I, de taille k et sous-ensemble de { 1,..., n } faire si ( P ( I ) <= C ) max_benefice = max ( B ( I ), max_benefice ) ; } Toutes les tailles possibles pour les sous-ensembles. Tous les sous-ensembles de cette taille … Retenez le bénéfice sil est meilleur et que la contrainte sur la capacité est respectée.

45 23 novembre 2006Cours d'algorithmique 6 - Intranet45 Sac à dos --- Knapsack Correct, mais … Correct, mais … {int max_benefice = 0 ; pour k allant de 1 à n faire pour chaque ensemble I, de taille k et sous-ensemble de { 1,..., n } faire si ( P ( I ) <= C ) max_benefice = max ( B ( I ), max_benefice ) ; } Toutes les tailles possibles pour les sous-ensembles. Tous les sous-ensembles de cette taille … Retenez le bénéfice sil est meilleur et que la contrainte sur la capacité est respectée. Seule ombre au tableau : le nombre des ensembles considérés est en 2^n ). le nombre des ensembles considérés est en 2^n ).

46 23 novembre 2006Cours d'algorithmique 6 - Intranet46 Sac à dos --- Knapsack Solution Divide and Conquer ? ? ? Solution Divide and Conquer ? ? ?

47 23 novembre 2006Cours d'algorithmique 6 - Intranet47 Sac à dos --- Knapsack Solution Divide and Conquer ? ? ? Mais oui ! ! ! Solution Divide and Conquer ? ? ? Mais oui ! ! !

48 23 novembre 2006Cours d'algorithmique 6 - Intranet48 Sac à dos --- Knapsack Solution Divide and Conquer ? ? ? Mais oui ! ! ! Solution Divide and Conquer ? ? ? Mais oui ! ! ! Considérez les ensembles qui contiennent lobjet O et ceux qui ne le contiennent pas ! Considérez les ensembles qui contiennent lobjet O et ceux qui ne le contiennent pas !

49 23 novembre 2006Cours d'algorithmique 6 - Intranet49 Sac à dos --- Knapsack Solution Divide and Conquer ? ? ? Mais oui ! ! ! Solution Divide and Conquer ? ? ? Mais oui ! ! ! Considérez les ensembles qui contiennent lobjet O et ceux qui ne le contiennent pas ! Considérez les ensembles qui contiennent lobjet O et ceux qui ne le contiennent pas ! – Soit « i » lindice de lobjet que nous allons considérer, – soit « R » la capacité résiduelle, – soit « B » le bénéfice des objets pris jusque-là.

50 23 novembre 2006Cours d'algorithmique 6 - Intranet50 Sac à dos --- Knapsack Solution Divide and Conquer ? ? ? Mais oui ! ! ! Solution Divide and Conquer ? ? ? Mais oui ! ! ! Considérez les ensembles qui contiennent lobjet O et ceux qui ne le contiennent pas ! Considérez les ensembles qui contiennent lobjet O et ceux qui ne le contiennent pas ! – Soit « i » lindice de lobjet que nous allons considérer, – soit « R » la capacité résiduelle, – soit « B » le bénéfice des objets pris jusque-là. I = 1, R = C, B = 0 Etat initial.

51 23 novembre 2006Cours d'algorithmique 6 - Intranet51 Sac à dos --- Knapsack Solution Divide and Conquer ? ? ? Mais oui ! ! ! Solution Divide and Conquer ? ? ? Mais oui ! ! ! Considérez les ensembles qui contiennent lobjet O et ceux qui ne le contiennent pas ! Considérez les ensembles qui contiennent lobjet O et ceux qui ne le contiennent pas ! – Soit « i » lindice de lobjet que nous allons considérer, – soit « R » la capacité résiduelle, – soit « B » le bénéfice des objets pris jusque-là. I = 1, R = C, B = 0 Etat initial. O est pris ! 1 I = 2, R = C - p, B = b 11

52 23 novembre 2006Cours d'algorithmique 6 - Intranet52 Sac à dos --- Knapsack Solution Divide and Conquer ? ? ? Mais oui ! ! ! Solution Divide and Conquer ? ? ? Mais oui ! ! ! Considérez les ensembles qui contiennent lobjet O et ceux qui ne le contiennent pas ! Considérez les ensembles qui contiennent lobjet O et ceux qui ne le contiennent pas ! – Soit « i » lindice de lobjet que nous allons considérer, – soit « R » la capacité résiduelle, – soit « B » le bénéfice des objets pris jusque-là. I = 1, R = C, B = 0 Etat initial. O est pris ! 1 I = 2, R = C - p, B = b 11 O nest pas pris ! 1 I = 2, R = C, B = 0

53 23 novembre 2006Cours d'algorithmique 6 - Intranet53 Sac à dos --- Knapsack Solution Divide and Conquer ? ? ? Mais oui ! ! ! Solution Divide and Conquer ? ? ? Mais oui ! ! ! Considérez les ensembles qui contiennent lobjet O et ceux qui ne le contiennent pas ! Considérez les ensembles qui contiennent lobjet O et ceux qui ne le contiennent pas ! – Soit « i » lindice de lobjet que nous allons considérer, – soit « R » la capacité résiduelle, – soit « B » le bénéfice des objets pris jusque-là. I = 1, R = C, B = 0 Etat initial. O est pris ! 1 I = 2, R = C - p, B = b 11 O nest pas pris ! 1 I = 2, R = C, B = 0 Optimum local : B_avec Optimum local : B_sans

54 23 novembre 2006Cours d'algorithmique 6 - Intranet54 Sac à dos --- Knapsack Solution Divide and Conquer ? ? ? Mais oui ! ! ! Solution Divide and Conquer ? ? ? Mais oui ! ! ! Considérez les ensembles qui contiennent lobjet O et ceux qui ne le contiennent pas ! Considérez les ensembles qui contiennent lobjet O et ceux qui ne le contiennent pas ! – Soit « i » lindice de lobjet que nous allons considérer, – soit « R » la capacité résiduelle, – soit « B » le bénéfice des objets pris jusque-là. I = 1, R = C, B = 0 Etat initial. O est pris ! 1 I = 2, R = C - p, B = b 11 O nest pas pris ! 1 I = 2, R = C, B = 0 Optimum local : B_avec Optimum local : B_sans MAX

55 23 novembre 2006Cours d'algorithmique 6 - Intranet55 Sac à dos --- Knapsack int D&C_sac ( int objet, int residuelle, int benefice ) {if ( objet > n ) return( benefice ) ; else {int memoire ; memoire = D&C_sac ( objet + 1, residuelle, benefice ) ; if ( p[ objet ] > residuelle ) return( memoire ) ; else return( max( D&C_sac( objet + 1, residuelle – p[ objet ], benefice + b[ objet ] ), memoire ) ) ; } }

56 23 novembre 2006Cours d'algorithmique 6 - Intranet56 Sac à dos --- Knapsack int D&C_sac ( int objet, int residuelle, int benefice ) {if ( objet > n ) return( benefice ) ; else {int memoire ; memoire = D&C_sac ( objet + 1, residuelle, benefice ) ; if ( p[ objet ] > residuelle ) return( memoire ) ; else return( max( D&C_sac( objet + 1, residuelle – p[ objet ], benefice + b[ objet ] ), memoire ) ) ; } } Cas final !

57 23 novembre 2006Cours d'algorithmique 6 - Intranet57 Sac à dos --- Knapsack int D&C_sac ( int objet, int residuelle, int benefice ) {if ( objet > n ) return( benefice ) ; else {int memoire ; memoire = D&C_sac ( objet + 1, residuelle, benefice ) ; if ( p[ objet ] > residuelle ) return( memoire ) ; else return( max( D&C_sac( objet + 1, residuelle – p[ objet ], benefice + b[ objet ] ), memoire ) ) ; } } Cas final ! Nous explorons toujours le cas où lobjet ne sera pas pris !

58 23 novembre 2006Cours d'algorithmique 6 - Intranet58 Sac à dos --- Knapsack int D&C_sac ( int objet, int residuelle, int benefice ) {if ( objet > n ) return( benefice ) ; else {int memoire ; memoire = D&C_sac ( objet + 1, residuelle, benefice ) ; if ( p[ objet ] > residuelle ) return( memoire ) ; else return( max( D&C_sac( objet + 1, residuelle – p[ objet ], benefice + b[ objet ] ), memoire ) ) ; } } Cas final ! Nous explorons toujours le cas où lobjet ne sera pas pris ! Il se peut que cela suffise !

59 23 novembre 2006Cours d'algorithmique 6 - Intranet59 Sac à dos --- Knapsack int D&C_sac ( int objet, int residuelle, int benefice ) {if ( objet > n ) return( benefice ) ; else {int memoire ; memoire = D&C_sac ( objet + 1, residuelle, benefice ) ; if ( p[ objet ] > residuelle ) return( memoire ) ; else return( max( D&C_sac( objet + 1, residuelle – p[ objet ], benefice + b[ objet ] ), memoire ) ) ; } } Cas final ! Nous explorons toujours le cas où lobjet ne sera pas pris ! Le cas le plus courant est celui qui explore les deux alternatives ! Il se peut que cela suffise !

60 23 novembre 2006Cours d'algorithmique 6 - Intranet60 Sac à dos --- Knapsack int D&C_sac ( int objet, int residuelle, int benefice ) {if ( objet > n ) return( benefice ) ; else {int memoire ; memoire = D&C_sac ( objet + 1, residuelle, benefice ) ; if ( p[ objet ] > residuelle ) return( memoire ) ; else return( max( D&C_sac( objet + 1, residuelle – p[ objet ], benefice + b[ objet ] ), memoire ) ) ; } } Cas final ! Nous explorons toujours le cas où lobjet ne sera pas pris ! Le cas le plus courant est celui qui explore les deux alternatives ! La capacité résiduelle diminue ! Le bénéfice augmente ! Il se peut que cela suffise !

61 23 novembre 2006Cours d'algorithmique 6 - Intranet61 Sac à dos --- Knapsack Malheureusement, nous répétons des calculs ! Malheureusement, nous répétons des calculs ! Considérons p[ 1 ] = 1, p[ 2 ] = 2, p[ 3 ] = 3 et Considérons p[ 1 ] = 1, p[ 2 ] = 2, p[ 3 ] = 3 et b[ 1 ] = 2, b[ 2 ] = 4, b[ 3 ] = 6. b[ 1 ] = 2, b[ 2 ] = 4, b[ 3 ] = 6.

62 23 novembre 2006Cours d'algorithmique 6 - Intranet62 Sac à dos --- Knapsack Malheureusement, nous répétons des calculs ! Malheureusement, nous répétons des calculs ! Considérons p[ 1 ] = 1, p[ 2 ] = 2, p[ 3 ] = 3 et Considérons p[ 1 ] = 1, p[ 2 ] = 2, p[ 3 ] = 3 et b[ 1 ] = 2, b[ 2 ] = 4, b[ 3 ] = 6. b[ 1 ] = 2, b[ 2 ] = 4, b[ 3 ] = 6. Si nous sélectionnons 1 et 2 mais pas 3, lappel suivant sera Si nous sélectionnons 1 et 2 mais pas 3, lappel suivant sera D&C_sac ( 4, C – 3, 6 ). D&C_sac ( 4, C – 3, 6 ).

63 23 novembre 2006Cours d'algorithmique 6 - Intranet63 Sac à dos --- Knapsack Malheureusement, nous répétons des calculs ! Malheureusement, nous répétons des calculs ! Considérons p[ 1 ] = 1, p[ 2 ] = 2, p[ 3 ] = 3 et Considérons p[ 1 ] = 1, p[ 2 ] = 2, p[ 3 ] = 3 et b[ 1 ] = 2, b[ 2 ] = 4, b[ 3 ] = 6. b[ 1 ] = 2, b[ 2 ] = 4, b[ 3 ] = 6. Si nous sélectionnons 1 et 2 mais pas 3, lappel suivant sera Si nous sélectionnons 1 et 2 mais pas 3, lappel suivant sera D&C_sac ( 4, C – 3, 6 ). D&C_sac ( 4, C – 3, 6 ). Si nous ne sélectionnons ni 1, ni 2, mais 3, lappel suivant sera Si nous ne sélectionnons ni 1, ni 2, mais 3, lappel suivant sera D&C_sac ( 4, C – 3, 6 ). D&C_sac ( 4, C – 3, 6 ).

64 23 novembre 2006Cours d'algorithmique 6 - Intranet64 Sac à dos --- Knapsack Organisons notre emploi du temps ! Organisons notre emploi du temps ! – Au temps « t », nous nous occupons de O. t

65 23 novembre 2006Cours d'algorithmique 6 - Intranet65 Sac à dos --- Knapsack Organisons notre emploi du temps ! Organisons notre emploi du temps ! – Au temps « t », nous nous occupons de O. Nous avons donc déjà considéré O, …, O. Nous avons donc déjà considéré O, …, O. t 1t-1

66 23 novembre 2006Cours d'algorithmique 6 - Intranet66 Sac à dos --- Knapsack Organisons notre emploi du temps ! Organisons notre emploi du temps ! – Au temps « t », nous nous occupons de O. Nous avons donc déjà considéré O, …, O. Nous avons donc déjà considéré O, …, O. Avec une capacité résiduelle « R », la meilleure solution sur les « t » premiers objets est obtenue par : Avec une capacité résiduelle « R », la meilleure solution sur les « t » premiers objets est obtenue par : Opt ( t, R ) = t 1t-1 {

67 23 novembre 2006Cours d'algorithmique 6 - Intranet67 Sac à dos --- Knapsack Organisons notre emploi du temps ! Organisons notre emploi du temps ! – Au temps « t », nous nous occupons de O. Nous avons donc déjà considéré O, …, O. Nous avons donc déjà considéré O, …, O. Avec une capacité résiduelle « R », la meilleure solution sur les « t » premiers objets est obtenue par : Avec une capacité résiduelle « R », la meilleure solution sur les « t » premiers objets est obtenue par : Opt ( t – 1, R ) si p > R ! Opt ( t – 1, R ) si p > R ! Opt ( t, R ) = t 1t-1 { t

68 23 novembre 2006Cours d'algorithmique 6 - Intranet68 Sac à dos --- Knapsack Organisons notre emploi du temps ! Organisons notre emploi du temps ! – Au temps « t », nous nous occupons de O. Nous avons donc déjà considéré O, …, O. Nous avons donc déjà considéré O, …, O. Avec une capacité résiduelle « R », la meilleure solution sur les « t » premiers objets est obtenue par : Avec une capacité résiduelle « R », la meilleure solution sur les « t » premiers objets est obtenue par : Opt ( t – 1, R ) si p > R ! Opt ( t – 1, R ) si p > R ! Opt ( t, R ) = max ( Opt ( t – 1, R ), b + Opt ( t - 1, R – p ) ) max ( Opt ( t – 1, R ), b + Opt ( t - 1, R – p ) ) t 1t-1 { t t t

69 23 novembre 2006Cours d'algorithmique 6 - Intranet69 Sac à dos --- Knapsack Organisons notre emploi du temps ! Organisons notre emploi du temps ! – Au temps « t », nous nous occupons de O. Nous avons donc déjà considéré O, …, O. Nous avons donc déjà considéré O, …, O. Avec une capacité résiduelle « R », la meilleure solution sur les « t » premiers objets est obtenue par : Avec une capacité résiduelle « R », la meilleure solution sur les « t » premiers objets est obtenue par : Opt ( t – 1, R ) si p > R ! Opt ( t – 1, R ) si p > R ! Opt ( t, R ) = max ( Opt ( t – 1, R ), b + Opt ( t - 1, R – p ) ) max ( Opt ( t – 1, R ), b + Opt ( t - 1, R – p ) ) t 1t-1 { t t t O nest pas pris ! t O est pris ! t

70 23 novembre 2006Cours d'algorithmique 6 - Intranet70 Sac à dos --- Knapsack Organisons notre emploi du temps ! Organisons notre emploi du temps ! – Au temps « t », nous nous occupons de O. Nous avons donc déjà considéré O, …, O. Nous avons donc déjà considéré O, …, O. Avec une capacité résiduelle « R », la meilleure solution sur les « t » premiers objets est obtenue par : Avec une capacité résiduelle « R », la meilleure solution sur les « t » premiers objets est obtenue par : Opt ( t – 1, R ) si p > R ! Opt ( t – 1, R ) si p > R ! Opt ( t, R ) = max ( Opt ( t – 1, R ), b + Opt ( t - 1, R – p ) ) max ( Opt ( t – 1, R ), b + Opt ( t - 1, R – p ) ) t 1t-1 { t t t Nous respectons lécoulement du temps !

71 23 novembre 2006Cours d'algorithmique 6 - Intranet71 Sac à dos --- Knapsack C n Opt ( t, R ) t-1t Opt ( t-1, R ) Si lobjet est trop lourd ! R

72 23 novembre 2006Cours d'algorithmique 6 - Intranet72 Sac à dos --- Knapsack C n Opt ( t, R ) t-1t Opt ( t-1, R ) Si lobjet est trop lourd ! R La fonction de temps est compatible avec les dépendances ! ! !

73 23 novembre 2006Cours d'algorithmique 6 - Intranet73 Sac à dos --- Knapsack C Opt ( t, R ) R Opt ( t-1, R ) Si lobjet nest pas trop lourd ! Opt ( t-1, R – p[ t ] ) R – p[ t ] n t-1t

74 23 novembre 2006Cours d'algorithmique 6 - Intranet74 Sac à dos --- Knapsack C Opt ( t, R ) R Opt ( t-1, R ) Si lobjet nest pas trop lourd ! Opt ( t-1, R – p[ t ] ) R – p[ t ] n t-1t La fonction de temps est compatible avec les dépendances ! ! !

75 23 novembre 2006Cours d'algorithmique 6 - Intranet75 Sac à dos --- Knapsack C Opt ( t, R ) R Opt ( t-1, R ) Si lobjet nest pas trop lourd ! Opt ( t-1, R – p[ t ] ) R – p[ t ] n t-1t La fonction de temps est compatible avec les dépendances ! ! ! … … Sans objets, il ny a aucun bénéfice. 0

76 23 novembre 2006Cours d'algorithmique 6 - Intranet76 Sac à dos --- Knapsack {for ( R = 0 ; R <= C ; R++ ) Opt[ 0, R ] = 0 ; for ( t = 1 ; t <= n ; t++ ) for ( R = 0 ; R <= C ; R++ ) if ( p[ t ] > R ) Opt[ t, R ] = Opt[ t-1, R ] ; else Opt[ t, R ] = max( b[ t ] + Opt[ t-1, R–p[ t ], Opt[ t-1, R ] ) ; }

77 23 novembre 2006Cours d'algorithmique 6 - Intranet77 Sac à dos --- Knapsack {for ( R = 0 ; R <= C ; R++ ) Opt[ 0, R ] = 0 ; for ( t = 1 ; t <= n ; t++ ) for ( R = 0 ; R <= C ; R++ ) if ( p[ t ] > R ) Opt[ t, R ] = Opt[ t-1, R ] ; else Opt[ t, R ] = max( b[ t ] + Opt[ t-1, R–p[ t ], Opt[ t-1, R ] ) ; } Initialisation de la première colonne à 0.

78 23 novembre 2006Cours d'algorithmique 6 - Intranet78 Sac à dos --- Knapsack {for ( R = 0 ; R <= C ; R++ ) Opt[ 0, R ] = 0 ; for ( t = 1 ; t <= n ; t++ ) for ( R = 0 ; R <= C ; R++ ) if ( p[ t ] > R ) Opt[ t, R ] = Opt[ t-1, R ] ; else Opt[ t, R ] = max( b[ t ] + Opt[ t-1, R–p[ t ], Opt[ t-1, R ] ) ; } Initialisation de la première colonne à 0. Colonne après colonne, depuis la gauche vers la droite et de bas en haut …

79 23 novembre 2006Cours d'algorithmique 6 - Intranet79 Sac à dos --- Knapsack {for ( R = 0 ; R <= C ; R++ ) Opt[ 0, R ] = 0 ; for ( t = 1 ; t <= n ; t++ ) for ( R = 0 ; R <= C ; R++ ) for ( R = C ; R >= 0 ; R-- ) if ( p[ t ] > R ) Opt[ t, R ] = Opt[ t-1, R ] ; else Opt[ t, R ] = max( b[ t ] + Opt[ t-1, R–p[ t ], Opt[ t-1, R ] ) ; } Initialisation de la première colonne à 0. Colonne après colonne, depuis la gauche vers la droite et de bas en haut … et de haut en bas, pourquoi pas ?

80 23 novembre 2006Cours d'algorithmique 6 - Intranet80 Sac à dos --- Knapsack {for ( R = 0 ; R <= C ; R++ ) Opt[ 0, R ] = 0 ; for ( t = 1 ; t <= n ; t++ ) for ( R = 0 ; R <= C ; R++ ) if ( p[ t ] > R ) Opt[ t, R ] = Opt[ t-1, R ] ; else Opt[ t, R ] = max( b[ t ] + Opt[ t-1, R–p[ t ], Opt[ t-1, R ] ) ; } Initialisation de la première colonne à 0. Colonne après colonne, depuis la gauche vers la droite et de bas en haut … … ce quil faut !

81 23 novembre 2006Cours d'algorithmique 6 - Intranet81 Sac à dos --- Knapsack {for ( R = 0 ; R <= C ; R++ ) Opt[ 0, R ] = 0 ; for ( t = 1 ; t <= n ; t++ ) for ( R = 0 ; R <= C ; R++ ) if ( p[ t ] > R ) Opt[ t, R ] = Opt[ t-1, R ] ; else Opt[ t, R ] = max( b[ t ] + Opt[ t-1, R–p[ t ], Opt[ t-1, R ] ) ; } Initialisation de la première colonne à 0. Colonne après colonne, depuis la gauche vers la droite et de bas en haut … … ce quil faut !

82 23 novembre 2006Cours d'algorithmique 6 - Intranet82 U n e x e m p l e c o m p l e t : N E G O C I A N T A U P O R T D E M A R S E I L L E ! ! ! Marine marchande

83 23 novembre 2006Cours d'algorithmique 6 - Intranet83 Lénoncé : Lénoncé : – Vous êtes acheteur au port de Marseille, Marine marchande

84 23 novembre 2006Cours d'algorithmique 6 - Intranet84 Lénoncé : Lénoncé : – Vous êtes acheteur au port de Marseille, – « n » bateaux vont arriver et vous connaissez cette valeur, Marine marchande

85 23 novembre 2006Cours d'algorithmique 6 - Intranet85 Lénoncé : Lénoncé : – Vous êtes acheteur au port de Marseille, – « n » bateaux vont arriver et vous connaissez cette valeur, – la qualité de la marchandise des différents bateaux « Q( i ) » varie de 0 à 1000, de manière aléatoire uniforme, et vous savez la juger, Marine marchande

86 23 novembre 2006Cours d'algorithmique 6 - Intranet86 Lénoncé : Lénoncé : – Vous êtes acheteur au port de Marseille, – « n » bateaux vont arriver et vous connaissez cette valeur, – la qualité de la marchandise des différents bateaux « Q( i ) » varie de 0 à 1000, de manière aléatoire uniforme, et vous savez la juger, – vous achetez une et une seule cargaison ! Marine marchande

87 23 novembre 2006Cours d'algorithmique 6 - Intranet87 Lénoncé : Lénoncé : – Vous êtes acheteur au port de Marseille, – « n » bateaux vont arriver et vous connaissez cette valeur, – la qualité de la marchandise des différents bateaux « Q( i ) » varie de 1 à 1000, de manière aléatoire uniforme, et vous savez la juger, – vous achetez une et une seule cargaison ! Laquelle ? Laquelle ? Marine marchande

88 23 novembre 2006Cours d'algorithmique 6 - Intranet88 A larrivée du premier bateau : A larrivée du premier bateau : – Vous achetez ? – Vous attendez mieux ? Marine marchande

89 23 novembre 2006Cours d'algorithmique 6 - Intranet89 A larrivée du premier bateau : A larrivée du premier bateau : – Vous achetez ? – Vous attendez mieux ? OUI OUI Achat du premier ? NON NON Marine marchande

90 23 novembre 2006Cours d'algorithmique 6 - Intranet90 A larrivée du premier bateau : A larrivée du premier bateau : – Vous achetez ? – Vous attendez mieux ? OUI OUI Achat du premier ? OUI NON – Achat du second NON – Achat du second NON NON Marine marchande

91 23 novembre 2006Cours d'algorithmique 6 - Intranet91 A larrivée du premier bateau : A larrivée du premier bateau : – Vous achetez ? – Vous attendez mieux ? OUI OUI Achat du premier ? OUI NON – Achat du second NON – Achat du second NON NON En fait, quattendez-vous ? En fait, quattendez-vous ? Marine marchande

92 23 novembre 2006Cours d'algorithmique 6 - Intranet92 A larrivée du premier bateau : A larrivée du premier bateau : – Vous achetez ? – Vous attendez mieux ? OUI OUI Achat du premier ? OUI NON – Achat du second NON – Achat du second NON NON En fait, nous achetons si la qualité duEn fait, nous achetons si la qualité du bateau courant est meilleure que la bateau courant est meilleure que la qualité moyenne espérée des bateaux qualité moyenne espérée des bateaux qui vont venir ! qui vont venir ! Marine marchande

93 23 novembre 2006Cours d'algorithmique 6 - Intranet93 A larrivée du bateau « i » : A larrivée du bateau « i » : – Nous achetons si Q( i ) est supérieure à E ( i+1 ) – où E ( i+1 ) est la qualité moyenne des bateaux i+1 à n – et nous en déduisons E( i ) ! Marine marchande

94 23 novembre 2006Cours d'algorithmique 6 - Intranet94 A larrivée du bateau « i » : A larrivée du bateau « i » : – Nous achetons si Q( i ) est supérieure à E ( i+1 ) – où E ( i+1 ) est la qualité moyenne des bateaux i+1 à n – et nous en déduisons E( i ) ! Donc, Donc, – avec une probabilité de ( 1000 – E( i+1 ) ) / 1000 – nous achetons le bateau « i » dont la qualité moyenne vaut ( E( i+1 ) ) / 2. Marine marchande

95 23 novembre 2006Cours d'algorithmique 6 - Intranet95 A larrivée du bateau « i » : A larrivée du bateau « i » : – Nous achetons si Q( i ) est supérieure à E ( i+1 ) – où E ( i+1 ) est la qualité moyenne des bateaux i+1 à n – et nous en déduisons E( i ) ! Donc, Donc, – avec une probabilité de ( 1000 – E( i+1 ) ) / 1000 – nous achetons le bateau « i » dont la qualité moyenne vaut ( E( i+1 ) ) / 2. – E ( i ) = ( 1000 – E( i+1 ) ) / 1000 * ( E( i+ 1 ) ) / 2 + … + … Marine marchande

96 23 novembre 2006Cours d'algorithmique 6 - Intranet96 A larrivée du bateau « i » : A larrivée du bateau « i » : – Nous achetons si Q( i ) est supérieure à E ( i+1 ) – où E ( i+1 ) est la qualité moyenne des bateaux i+1 à n – et nous en déduisons E( i ) ! Donc, Donc, – avec une probabilité de ( 1000 – E( i+1 ) ) / 1000 – nous achetons le bateau « i » dont la qualité moyenne vaut ( E( i+1 ) ) / 2. – E ( i ) = ( 1000 – E( i+1 ) ) / 1000 * ( E( i+ 1 ) ) / 2 + ( 1 - ( 1000 – E( i+1 ) ) / 1000 ) * E( i+1 ) + ( 1 - ( 1000 – E( i+1 ) ) / 1000 ) * E( i+1 ) Marine marchande

97 23 novembre 2006Cours d'algorithmique 6 - Intranet97 A larrivée du bateau « i » : A larrivée du bateau « i » : – Nous achetons si Q( i ) est supérieure à E ( i+1 ) – où E ( i+1 ) est la qualité moyenne des bateaux i+1 à n – et nous en déduisons E( i ) ! Donc, Donc, – avec une probabilité de ( 1000 – E( i+1 ) ) / 1000 – nous achetons le bateau « i » dont la qualité moyenne vaut ( E( i+1 ) ) / 2. – E ( i ) = ( 1000 – E( i+1 ) ) / 1000 * ( E( i+ 1 ) ) / 2 + ( 1 - ( 1000 – E( i+1 ) ) / 1000 ) * E( i+1 ) + ( 1 - ( 1000 – E( i+1 ) ) / 1000 ) * E( i+1 ) = ( 1000^2 + E^2( i+1 ) ) / 2000 = ( 1000^2 + E^2( i+1 ) ) / 2000 Marine marchande

98 23 novembre 2006Cours d'algorithmique 6 - Intranet98 Ce qui nous donne : Ce qui nous donne : E( n ) = 500 E( n ) = 500 Marine marchande

99 23 novembre 2006Cours d'algorithmique 6 - Intranet99 Ce qui nous donne : Ce qui nous donne : E( n ) = 500 E( n ) = 500 E( n-1 ) = ½ * ½ * 500 = 625 E( n-1 ) = ½ * ½ * 500 = 625 Marine marchande

100 23 novembre 2006Cours d'algorithmique 6 - Intranet100 Ce qui nous donne : Ce qui nous donne : E( n ) = 500 E( n ) = 500 E( n-1 ) = ½ * ½ * 500 = 625 E( n-1 ) = ½ * ½ * 500 = 625 E( n-2 ) = ( 1000 – 625 ) / 1000 * ( ) / 2 E( n-2 ) = ( 1000 – 625 ) / 1000 * ( ) / / 1000 * 625 / / 1000 * 625 / 2 = 695 = 695 Marine marchande

101 23 novembre 2006Cours d'algorithmique 6 - Intranet101 Ce qui nous donne : Ce qui nous donne : E( n ) = 500 E( n ) = 500 E( n-1 ) = ½ * ½ * 500 = 625 E( n-1 ) = ½ * ½ * 500 = 625 E( n-2 ) = ( 1000 – 625 ) / 1000 * ( ) / 2 E( n-2 ) = ( 1000 – 625 ) / 1000 * ( ) / / 1000 * 625 / / 1000 * 625 / 2 = 695 = 695 n-10 n-9 n-8 n-7 n-6 n-5 n-4 n-3 n-2 n-1 n n-10 n-9 n-8 n-7 n-6 n-5 n-4 n-3 n-2 n-1 n Marine marchande E( x ) x

102 23 novembre 2006Cours d'algorithmique 6 - Intranet102 Ce qui nous donne : Ce qui nous donne : E( n ) = 500 E( n ) = 500 E( n-1 ) = ½ * ½ * 500 = 625 E( n-1 ) = ½ * ½ * 500 = 625 E( n-2 ) = ( 1000 – 625 ) / 1000 * ( ) / 2 E( n-2 ) = ( 1000 – 625 ) / 1000 * ( ) / / 1000 * 625 / / 1000 * 625 / 2 = 695 = 695 n-10 n-9 n-8 n-7 n-6 n-5 n-4 n-3 n-2 n-1 n n-10 n-9 n-8 n-7 n-6 n-5 n-4 n-3 n-2 n-1 n Marine marchande E( x ) x Laxe de temps !

103 23 novembre 2006Cours d'algorithmique 6 - Intranet103 Ce qui nous donne : Ce qui nous donne : E( n ) = 500 E( n ) = 500 E( n-1 ) = ½ * ½ * 500 = 625 E( n-1 ) = ½ * ½ * 500 = 625 E( n-2 ) = ( 1000 – 625 ) / 1000 * ( ) / 2 E( n-2 ) = ( 1000 – 625 ) / 1000 * ( ) / / 1000 * 625 / / 1000 * 625 / 2 = 695 = 695 n-10 n-9 n-8 n-7 n-6 n-5 n-4 n-3 n-2 n-1 n n-10 n-9 n-8 n-7 n-6 n-5 n-4 n-3 n-2 n-1 n Marine marchande E( x ) x Pour tout bateau i, i = E( i+1 ) ! Laxe de temps !

104 23 novembre 2006Cours d'algorithmique 6 - Intranet104 Ce qui nous donne : Ce qui nous donne : E( n ) = 500 E( n ) = 500 E( n-1 ) = ½ * ½ * 500 = 625 E( n-1 ) = ½ * ½ * 500 = 625 E( n-2 ) = ( 1000 – 625 ) / 1000 * ( ) / 2 E( n-2 ) = ( 1000 – 625 ) / 1000 * ( ) / / 1000 * 625 / / 1000 * 625 / 2 = 695 = 695 n-10 n-9 n-8 n-7 n-6 n-5 n-4 n-3 n-2 n-1 n n-10 n-9 n-8 n-7 n-6 n-5 n-4 n-3 n-2 n-1 n Marine marchande E( x ) x Pour tout bateau i, i = E( i+1 ) ! Laxe de temps !

105 23 novembre 2006Cours d'algorithmique 6 - Intranet105 U n e x e m p l e c o m p l e t : L A P L U S L O N G U E S O U S – C H A I N E C O M M U N E ! ! ! Longest Common Sub-String

106 23 novembre 2006Cours d'algorithmique 6 - Intranet106 En français : Plus longue sous-chaîne commune ! On obtient une sous-chaîne en supprimant des caractères dune chaîne. On obtient une sous-chaîne en supprimant des caractères dune chaîne. A B C D E F G B A C D D B E F Longest Common Sub-String

107 23 novembre 2006Cours d'algorithmique 6 - Intranet107 En français : Plus longue sous-chaîne commune ! On obtient une sous-chaîne en supprimant des caractères dune chaîne. On obtient une sous-chaîne en supprimant des caractères dune chaîne. A B C D E F G B A C D D B E F Longest Common Sub-String Une sous-chaîne : A B

108 23 novembre 2006Cours d'algorithmique 6 - Intranet108 En français : Plus longue sous-chaîne commune ! On obtient une sous-chaîne en supprimant des caractères dune chaîne. On obtient une sous-chaîne en supprimant des caractères dune chaîne. A B C D E F G B A C D D B E F Longest Common Sub-String Une sous-chaîne : A B Une autre sous-chaîne : B D E

109 23 novembre 2006Cours d'algorithmique 6 - Intranet109 En français : Plus longue sous-chaîne commune ! On obtient une sous-chaîne en supprimant des caractères dune chaîne. On obtient une sous-chaîne en supprimant des caractères dune chaîne. A B C D E F G B A C D D B E F Longest Common Sub-String Une sous-chaîne : A B Une autre sous-chaîne : B D E La sous-chaîne la plus longue : A C D E F

110 23 novembre 2006Cours d'algorithmique 6 - Intranet110 LCSS ( u, v ) = LCSS ( u, v ) = Longest Common Sub-String { Soient a et b des lettres et u et v des séquences de lettres. Nous allons définir LCSS de u et de v à partir de solutions obtenues pour des chaînes plus courtes !

111 23 novembre 2006Cours d'algorithmique 6 - Intranet111, si u = ou v =, si u = ou v = LCSS ( u, v ) = LCSS ( u, v ) = Longest Common Sub-String { Soient a et b des lettres et u et v des séquences de lettres.

112 23 novembre 2006Cours d'algorithmique 6 - Intranet112, si u = ou v =, si u = ou v = a. LCSS ( u, v ), si u = a. u et a. LCSS ( u, v ), si u = a. u et v = a. v, v = a. v, LCSS ( u, v ) = LCSS ( u, v ) = Longest Common Sub-String { Soient a et b des lettres et u et v des séquences de lettres.

113 23 novembre 2006Cours d'algorithmique 6 - Intranet113, si u = ou v =, si u = ou v = a. LCSS ( u, v ), si u = a. u et a. LCSS ( u, v ), si u = a. u et v = a. v, v = a. v, LCSS ( u, v ) = LCSS ( u, v ) = Longest Common Sub-String { Soient a et b des lettres et u et v des séquences de lettres. a. u a. v LCSS

114 23 novembre 2006Cours d'algorithmique 6 - Intranet114, si u = ou v =, si u = ou v = a. LCSS ( u, v ), si u = a. u et a. LCSS ( u, v ), si u = a. u et v = a. v, v = a. v, LCSS ( u, v ) = LCSS ( u, v ) = maxstr ( LCSS ( u, v ), LCSS ( u, v ) ) maxstr ( LCSS ( u, v ), LCSS ( u, v ) ) si u = a. u, v = b. v et a <> b. si u = a. u, v = b. v et a <> b. Longest Common Sub-String { Soient a et b des lettres et u et v des séquences de lettres.

115 23 novembre 2006Cours d'algorithmique 6 - Intranet115, si u = ou v =, si u = ou v = a. LCSS ( u, v ), si u = a. u et a. LCSS ( u, v ), si u = a. u et v = a. v, v = a. v, LCSS ( u, v ) = LCSS ( u, v ) = maxstr ( LCSS ( u, v ), LCSS ( u, v ) ) maxstr ( LCSS ( u, v ), LCSS ( u, v ) ) si u = a. u, v = b. v et a <> b. si u = a. u, v = b. v et a <> b. Longest Common Sub-String { Soient a et b des lettres et u et v des séquences de lettres. a. u b. v LCSS

116 23 novembre 2006Cours d'algorithmique 6 - Intranet116, si u = ou v =, si u = ou v = a. LCSS ( u, v ), si u = a. u et a. LCSS ( u, v ), si u = a. u et v = a. v, v = a. v, LCSS ( u, v ) = LCSS ( u, v ) = maxstr ( LCSS ( u, v ), LCSS ( u, v ) ) maxstr ( LCSS ( u, v ), LCSS ( u, v ) ) si u = a. u, v = b. v et a <> b. si u = a. u, v = b. v et a <> b. Longest Common Sub-String { Soient a et b des lettres et u et v des séquences de lettres. a. u b. v LCSS a. u b. v LCSS

117 23 novembre 2006Cours d'algorithmique 6 - Intranet117, si u = ou v =, si u = ou v = a. LCSS ( u, v ), si u = a. u et a. LCSS ( u, v ), si u = a. u et v = a. v, v = a. v, LCSS ( u, v ) = LCSS ( u, v ) = maxstr ( LCSS ( u, v ), LCSS ( u, v ) ) maxstr ( LCSS ( u, v ), LCSS ( u, v ) ) si u = a. u, v = b. v et a <> b. si u = a. u, v = b. v et a <> b. Longest Common Sub-String { Le programme récursif sarrête, CAR :

118 23 novembre 2006Cours d'algorithmique 6 - Intranet118, si u = ou v =, si u = ou v = a. LCSS ( u, v ), si u = a. u et a. LCSS ( u, v ), si u = a. u et v = a. v, v = a. v, LCSS ( u, v ) = LCSS ( u, v ) = maxstr ( LCSS ( u, v ), LCSS ( u, v ) ) maxstr ( LCSS ( u, v ), LCSS ( u, v ) ) si u = a. u, v = b. v et a <> b. si u = a. u, v = b. v et a <> b. Longest Common Sub-String { Le programme récursif sarrête, CAR : Cest fini dès que u ou v est réduite à la chaîne vide !

119 23 novembre 2006Cours d'algorithmique 6 - Intranet119, si u = ou v =, si u = ou v = a. LCSS ( u, v ), si u = a. u et a. LCSS ( u, v ), si u = a. u et v = a. v, v = a. v, LCSS ( u, v ) = LCSS ( u, v ) = maxstr ( LCSS ( u, v ), LCSS ( u, v ) ) maxstr ( LCSS ( u, v ), LCSS ( u, v ) ) si u = a. u, v = b. v et a <> b. si u = a. u, v = b. v et a <> b. Longest Common Sub-String { Le programme récursif sarrête, CAR : Cest fini dès que u ou v est réduite à la chaîne vide ! A chaque appel récursif, lune au moins des chaînes raccourcit !

120 23 novembre 2006Cours d'algorithmique 6 - Intranet120 Longest Common Sub-String LCSS est donc calculé pour les suffixes de u et v. suffixe( u ) suffixe( v ) v u

121 23 novembre 2006Cours d'algorithmique 6 - Intranet121 Longest Common Sub-String LCSS est donc calculé pour les suffixes de u et v. suffixe( u ) suffixe( v ) v u LCSS( ?, ) LCSS(, ? )

122 23 novembre 2006Cours d'algorithmique 6 - Intranet122 Longest Common Sub-String LCSS est donc calculé pour les suffixes de u et v. suffixe( u ) suffixe( v ) v u LCSS( ?, ) LCSS(, ? ) w a.w LCSS ( a. u, a. v ) = a. LCSS ( u, v ) w

123 23 novembre 2006Cours d'algorithmique 6 - Intranet123 Longest Common Sub-String LCSS est donc calculé pour les suffixes de u et v. suffixe( u ) suffixe( v ) v u LCSS( ?, ) LCSS(, ? ) LCSS ( a. u, b. v ) = maxstr ( LCSS ( u, v ), LCSS ( u, v) )

124 23 novembre 2006Cours d'algorithmique 6 - Intranet124 Longest Common Sub-String LCSS est donc calculé pour les suffixes de u et v. suffixe( u ) suffixe( v ) v u LCSS( ?, ) LCSS(, ? ) La case jaune dépend de ses trois voisines du sud, de louest et du sud-ouest, suivant les cas de figure !

125 23 novembre 2006Cours d'algorithmique 6 - Intranet125 Longest Common Sub-String LCSS est donc calculé pour les suffixes de u et v. suffixe( u ) suffixe( v ) v u LCSS( ?, ) LCSS(, ? ) Premier axe de temps !

126 23 novembre 2006Cours d'algorithmique 6 - Intranet126 Longest Common Sub-String LCSS est donc calculé pour les suffixes de u et v. suffixe( u ) suffixe( v ) v u LCSS( ?, ) LCSS(, ? ) Premier axe de temps ! Projection !

127 23 novembre 2006Cours d'algorithmique 6 - Intranet127 Longest Common Sub-String LCSS est donc calculé pour les suffixes de u et v. suffixe( u ) suffixe( v ) v u LCSS( ?, ) LCSS(, ? ) Projection ! Premier axe de temps !

128 23 novembre 2006Cours d'algorithmique 6 - Intranet128 Longest Common Sub-String LCSS est donc calculé pour les suffixes de u et v. suffixe( u ) suffixe( v ) v u LCSS( ?, ) LCSS(, ? ) Premier axe de temps ! Deuxième axe de temps ! Les calculs sont indépendants, car ils sont portés par le premier axe ! ! !

129 23 novembre 2006Cours d'algorithmique 6 - Intranet129 Longest Common Sub-String LCSS est donc calculé pour les suffixes de u et v. suffixe( u ) suffixe( v ) v u LCSS( ?, ) LCSS(, ? ) Lordre des calculs !

130 23 novembre 2006Cours d'algorithmique 6 - Intranet130 Longest Common Sub-String LCSS est donc calculé pour les suffixes de u et v. suffixe( u ) suffixe( v ) v u LCSS( ?, ) LCSS(, ? ) Lordre des calculs !

131 23 novembre 2006Cours d'algorithmique 6 - Intranet131 Longest Common Sub-String LCSS est donc calculé pour les suffixes de u et v. suffixe( u ) suffixe( v ) v u LCSS( ?, ) LCSS(, ? ) Lordre des calculs !

132 23 novembre 2006Cours d'algorithmique 6 - Intranet132 Longest Common Sub-String LCSS est donc calculé pour les suffixes de u et v. suffixe( u ) suffixe( v ) v u LCSS( ?, ) LCSS(, ? ) Premier axe de temps !

133 23 novembre 2006Cours d'algorithmique 6 - Intranet133 Longest Common Sub-String LCSS est donc calculé pour les suffixes de u et v. suffixe( u ) suffixe( v ) v u LCSS( ?, ) LCSS(, ? ) Premier axe de temps ! Projection !.

134 23 novembre 2006Cours d'algorithmique 6 - Intranet134 Longest Common Sub-String LCSS est donc calculé pour les suffixes de u et v. suffixe( u ) suffixe( v ) v u LCSS( ?, ) LCSS(, ? ) Premier axe de temps ! Projection ! Deuxième axe de temps !.

135 23 novembre 2006Cours d'algorithmique 6 - Intranet135 Longest Common Sub-String LCSS est donc calculé pour les suffixes de u et v. suffixe( u ) suffixe( v ) v u LCSS( ?, ) LCSS(, ? ) Premier axe de temps ! Projection ! Deuxième axe de temps ! Projection !.

136 23 novembre 2006Cours d'algorithmique 6 - Intranet136 Longest Common Sub-String LCSS est donc calculé pour les suffixes de u et v. suffixe( u ) suffixe( v ) v u LCSS( ?, ) LCSS(, ? ) Premier axe de temps ! Projection ! Deuxième axe de temps ! Projection !.

137 23 novembre 2006Cours d'algorithmique 6 - Intranet137 Longest Common Sub-String LCSS est donc calculé pour les suffixes de u et v. suffixe( u ) suffixe( v ) v u LCSS( ?, ) LCSS(, ? ) Premier axe de temps ! Projection ! Deuxième axe de temps ! Projection !.

138 23 novembre 2006Cours d'algorithmique 6 - Intranet138 Longest Common Sub-String LCSS est donc calculé pour les suffixes de u et v. suffixe( u ) suffixe( v ) v u LCSS( ?, ) LCSS(, ? ) Premier axe de temps ! Projection ! Deuxième axe de temps ! Projection ! Deuxième Premier.

139 23 novembre 2006Cours d'algorithmique 6 - Intranet139 Longest Common Sub-String LCSS est donc calculé pour les suffixes de u et v. suffixe( u ) suffixe( v ) v u LCSS( ?, ) LCSS(, ? ) Premier axe de temps ! Projection ! Deuxième axe de temps ! Projection ! Deuxième Premier.

140 23 novembre 2006Cours d'algorithmique 6 - Intranet140 Longest Common Sub-String LCSS est donc calculé pour les suffixes de u et v. suffixe( u ) suffixe( v ) v u LCSS( ?, ) LCSS(, ? ) Premier axe de temps ! Projection ! Deuxième axe de temps ! Projection ! Deuxième Premier.

141 23 novembre 2006Cours d'algorithmique 6 - Intranet141 Longest Common Sub-String suffixe( u ) suffixe( v ) v u Premier axe de temps ! Deuxième axe de temps ! Temps multi-dimensionnel, ici bi-dimensionnel.

142 23 novembre 2006Cours d'algorithmique 6 - Intranet142 Longest Common Sub-String Temps multi-dimensionnel, ici bi-dimensionnel. suffixe( u ) suffixe( v ) v u Premier axe de temps ! Deuxième axe de temps ! Heure ( u, v ) Heure ( u+1, v+1 )

143 23 novembre 2006Cours d'algorithmique 6 - Intranet143 {T[, ? ] = ; T[ ?, ] = ; pour x suffixe de u, suivant de jusqua u pour y suffixe de v, suivant de jusqua v si ( tete( x ) == tete( y ) ) T[ x, y ] = tete( x ). T[ reste( x ), reste( y ) ] ; sinon T[ x, y ] = maxstr( T[ x, reste( y ) ], T[ reste( x ), y ] ) ; } Longest Common Sub-String

144 23 novembre 2006Cours d'algorithmique 6 - Intranet144 {T[, ? ] = ; T[ ?, ] = ; pour x suffixe de u, suivant de jusqua u pour y suffixe de v, suivant de jusqua v si ( tete( x ) == tete( y ) ) T[ x, y ] = tete( x ). T[ reste( x ), reste( y ) ] ; sinon T[ x, y ] = maxstr( T[ x, reste( y ) ], T[ reste( x ), y ] ) ; } Longest Common Sub-String Linitialisation !

145 23 novembre 2006Cours d'algorithmique 6 - Intranet145 {T[, ? ] = ; T[ ?, ] = ; pour x suffixe de u, suivant de jusqua u pour y suffixe de v, suivant de jusqua v si ( tete( x ) == tete( y ) ) T[ x, y ] = tete( x ). T[ reste( x ), reste( y ) ] ; sinon T[ x, y ] = maxstr( T[ x, reste( y ) ], T[ reste( x ), y ] ) ; } Longest Common Sub-String Linitialisation ! Colonne par colonne, depuis le bas …

146 23 novembre 2006Cours d'algorithmique 6 - Intranet146 {T[, ? ] = ; T[ ?, ] = ; pour x suffixe de u, suivant de jusqua u pour y suffixe de v, suivant de jusqua v si ( tete( x ) == tete( y ) ) T[ x, y ] = tete( x ). T[ reste( x ), reste( y ) ] ; sinon T[ x, y ] = maxstr( T[ x, reste( y ) ], T[ reste( x ), y ] ) ; } Longest Common Sub-String Linitialisation ! … ce quil faut ! Colonne par colonne, depuis le bas …

147 23 novembre 2006Cours d'algorithmique 6 - Intranet147 U n e x e m p l e c o m p l e t : L E C H E M I N L E P L U S C O U R T ! ! ! Shortest Path Problem

148 23 novembre 2006Cours d'algorithmique 6 - Intranet148 Shortest Path Problem Il sagit daller dune ville de départ vers une ville darrivée, par le plus court chemin, dans Il sagit daller dune ville de départ vers une ville darrivée, par le plus court chemin, dans – un réseau de villes avec routes en sens unique, – à distances connues – et sans cycles (retour au point de départ).

149 23 novembre 2006Cours d'algorithmique 6 - Intranet149 Shortest Path Problem Il sagit daller dune ville de départ vers une ville darrivée, par le plus court chemin, dans Il sagit daller dune ville de départ vers une ville darrivée, par le plus court chemin, dans – un réseau de villes avec routes en sens unique, – à distances connues – et sans cycles (retour au point de départ). A B C D E F

150 23 novembre 2006Cours d'algorithmique 6 - Intranet150 Shortest Path Problem Il sagit daller dune ville de départ vers une ville darrivée, par le plus court chemin, dans Il sagit daller dune ville de départ vers une ville darrivée, par le plus court chemin, dans – un réseau de villes avec routes en sens unique, – à distances connues – et sans cycles (retour au point de départ). A B C D E F Lespluscourts chemins !

151 23 novembre 2006Cours d'algorithmique 6 - Intranet151 Shortest Path Problem Notations : Notations : – Désignons par V( x ) lensemble des voisines dune ville x, – Soit d( x, y ) la distance entre deux villes voisines, – Soit f( x ) le plus court chemin pour aller de x à F.

152 23 novembre 2006Cours d'algorithmique 6 - Intranet152 Shortest Path Problem Notations : Notations : – Désignons par V( x ) lensemble des voisines dune ville x, – Soit d( x, y ) la distance entre deux villes voisines, – Soit f( x ) le plus court chemin pour aller de x à F. f ( x ) = min d ( x, y ) + f ( y ) et f( F ) = 0 f ( x ) = min d ( x, y ) + f ( y ) et f( F ) = 0 y V( x )

153 23 novembre 2006Cours d'algorithmique 6 - Intranet153 Shortest Path Problem Notations : Notations : – Désignons par V( x ) lensemble des voisines dune ville x, – Soit d( x, y ) la distance entre deux villes voisines, – Soit f( x ) le plus court chemin pour aller de x à F. f ( x ) = min d ( x, y ) + f ( y ) et f( F ) = 0 f ( x ) = min d ( x, y ) + f ( y ) et f( F ) = 0 A B C D E F f( F ) = 0 y V( x )

154 23 novembre 2006Cours d'algorithmique 6 - Intranet154 Shortest Path Problem Notations : Notations : – Désignons par V( x ) lensemble des voisines dune ville x, – Soit d( x, y ) la distance entre deux villes voisines, – Soit f( x ) le plus court chemin pour aller de x à F. f ( x ) = min d ( x, y ) + f ( y ) et f( F ) = 0 f ( x ) = min d ( x, y ) + f ( y ) et f( F ) = 0 A B C D E F f( F ) = 0 f( D ) = 11 + f( F ) y V( x )

155 23 novembre 2006Cours d'algorithmique 6 - Intranet155 Shortest Path Problem Notations : Notations : – Désignons par V( x ) lensemble des voisines dune ville x, – Soit d( x, y ) la distance entre deux villes voisines, – Soit f( x ) le plus court chemin pour aller de x à F. f ( x ) = min d ( x, y ) + f ( y ) et f( F ) = 0 f ( x ) = min d ( x, y ) + f ( y ) et f( F ) = 0 A B C D E F f( F ) = 0 f( D ) = 11 + f( F ) f( E ) = 37 + f( F ) y V( x )

156 23 novembre 2006Cours d'algorithmique 6 - Intranet156 Shortest Path Problem Notations : Notations : – Désignons par V( x ) lensemble des voisines dune ville x, – Soit d( x, y ) la distance entre deux villes voisines, – Soit f( x ) le plus court chemin pour aller de x à F. f ( x ) = min d ( x, y ) + f ( y ) et f( F ) = 0 f ( x ) = min d ( x, y ) + f ( y ) et f( F ) = 0 A B C D E F f( F ) = 0 f( D ) = 11 + f( F ) f( E ) = 37 + f( F ) f( B ) = min{ 9 + f( D ), 15 + f( E ) } y V( x )

157 23 novembre 2006Cours d'algorithmique 6 - Intranet157 Shortest Path Problem Notations : Notations : – Désignons par V( x ) lensemble des voisines dune ville x, – Soit d( x, y ) la distance entre deux villes voisines, – Soit f( x ) le plus court chemin pour aller de x à F. f ( x ) = min d ( x, y ) + f ( y ) et f( F ) = 0 f ( x ) = min d ( x, y ) + f ( y ) et f( F ) = 0 A B C D E F f( F ) = 0 f( D ) = 11 + f( F ) f( E ) = 37 + f( F ) f( B ) = min{ 9 + f( D ), 15 + f( E ) } f( C ) = min{ 37 + f( D ), 12 + f( E ) } y V( x )

158 23 novembre 2006Cours d'algorithmique 6 - Intranet158 Shortest Path Problem Notations : Notations : – Désignons par V( x ) lensemble des voisines dune ville x, – Soit d( x, y ) la distance entre deux villes voisines, – Soit f( x ) le plus court chemin pour aller de x à F. f ( x ) = min d ( x, y ) + f ( y ) et f( F ) = 0 f ( x ) = min d ( x, y ) + f ( y ) et f( F ) = 0 A B C D E F f( F ) = 0 f( D ) = 11 + f( F ) f( E ) = 37 + f( F ) f( B ) = min{ 9 + f( D ), 15 + f( E ) } f( C ) = min{ 37 + f( D ), 12 + f( E ) } f( A ) = min{ 41 + f( B ), 13 + f( C ) } y V( x )

159 23 novembre 2006Cours d'algorithmique 6 - Intranet159 Shortest Path Problem Nous résolvons ces contraintes par substitution : Nous résolvons ces contraintes par substitution : f( F ) = 0 f( D ) = 11 + f( F ) f( E ) = 37 + f( F ) f( B ) = min{ 9 + f( D ), 15 + f( E ) } f( C ) = min{ 37 + f( D ), 12 + f( E ) } f( A ) = min{ 41 + f( B ), 13 + f( C ) }

160 23 novembre 2006Cours d'algorithmique 6 - Intranet160 Shortest Path Problem Nous résolvons ces contraintes par substitution : Nous résolvons ces contraintes par substitution : f( F ) = 0 f( D ) = 11 + f( F ) = = 11 f( E ) = 37 + f( F ) f( B ) = min{ 9 + f( D ), 15 + f( E ) } f( C ) = min{ 37 + f( D ), 12 + f( E ) } f( A ) = min{ 41 + f( B ), 13 + f( C ) }

161 23 novembre 2006Cours d'algorithmique 6 - Intranet161 Shortest Path Problem Nous résolvons ces contraintes par substitution : Nous résolvons ces contraintes par substitution : f( F ) = 0 f( D ) = 11 f( E ) = 37 + f( F ) = = 37 f( B ) = min{ 9 + f( D ), 15 + f( E ) } f( C ) = min{ 37 + f( D ), 12 + f( E ) } f( A ) = min{ 41 + f( B ), 13 + f( C ) }

162 23 novembre 2006Cours d'algorithmique 6 - Intranet162 Shortest Path Problem Nous résolvons ces contraintes par substitution : Nous résolvons ces contraintes par substitution : f( F ) = 0 f( D ) = 11 f( E ) = 37 f( B ) = min{ 9 + f( D ), 15 + f( E ) } = min{ , } = 20 f( C ) = min{ 37 + f( D ), 12 + f( E ) } f( A ) = min{ 41 + f( B ), 13 + f( C ) }

163 23 novembre 2006Cours d'algorithmique 6 - Intranet163 Shortest Path Problem Nous résolvons ces contraintes par substitution : Nous résolvons ces contraintes par substitution : f( F ) = 0 f( D ) = 11 f( E ) = 37 f( B ) = 20 f( C ) = min{ 37 + f( D ), 12 + f( E ) } = min{ , } = 48 f( A ) = min{ 41 + f( B ), 13 + f( C ) }

164 23 novembre 2006Cours d'algorithmique 6 - Intranet164 Shortest Path Problem Nous résolvons ces contraintes par substitution : Nous résolvons ces contraintes par substitution : f( F ) = 0 f( D ) = 11 f( E ) = 37 f( B ) = 20 f( C ) = 48 f( A ) = min{ 41 + f( B ), 13 + f( C ) } = min{ , } = 61

165 23 novembre 2006Cours d'algorithmique 6 - Intranet165 Shortest Path Problem Nous résolvons ces contraintes par substitution : Nous résolvons ces contraintes par substitution : f( F ) = 0 f( D ) = 11 f( E ) = 37 f( B ) = 20 f( C ) = 48 f( A ) = 61 = 41 + f( B ) = 41 + f( B ) A B C D E F

166 23 novembre 2006Cours d'algorithmique 6 - Intranet166 Shortest Path Problem Nous résolvons ces contraintes par substitution : Nous résolvons ces contraintes par substitution : f( F ) = 0 f( D ) = 11 f( E ) = 37 f( B ) = 20 f( C ) = 48 f( A ) = 61 = 41 + f( B ) = 41 + f( B ) = f( D ) = f( D ) A B C D E F

167 23 novembre 2006Cours d'algorithmique 6 - Intranet167 Shortest Path Problem Nous résolvons ces contraintes par substitution : Nous résolvons ces contraintes par substitution : f( F ) = 0 f( D ) = 11 f( E ) = 37 f( B ) = 20 f( C ) = 48 f( A ) = 61 = 41 + f( B ) = 41 + f( B ) = f( D ) = f( D ) = = A B C D E F

168 23 novembre 2006Cours d'algorithmique 6 - Intranet168 Shortest Path Problem Nous résolvons ces contraintes par substitution : Nous résolvons ces contraintes par substitution : f( F ) = 0 f( D ) = 11 f( E ) = 37 f( B ) = 20 f( C ) = 48 f( A ) = 61 = 41 + f( B ) = 41 + f( B ) = f( D ) = f( D ) = = A B C D E F f( A ) = 61 = 13 + f( C ) = 13 + f( C )

169 23 novembre 2006Cours d'algorithmique 6 - Intranet169 Shortest Path Problem Nous résolvons ces contraintes par substitution : Nous résolvons ces contraintes par substitution : f( F ) = 0 f( D ) = 11 f( E ) = 37 f( B ) = 20 f( C ) = 48 f( A ) = 61 = 41 + f( B ) = 41 + f( B ) = f( D ) = f( D ) = = A B C D E F f( A ) = 61 = 13 + f( C ) = 13 + f( C ) = f( D ) = f( D )

170 23 novembre 2006Cours d'algorithmique 6 - Intranet170 Shortest Path Problem Nous résolvons ces contraintes par substitution : Nous résolvons ces contraintes par substitution : f( F ) = 0 f( D ) = 11 f( E ) = 37 f( B ) = 20 f( C ) = 48 f( A ) = 61 = 41 + f( B ) = 41 + f( B ) = f( D ) = f( D ) = = A B C D E F f( A ) = 61 = 13 + f( C ) = 13 + f( C ) = f( D ) = f( D ) = =

171 23 novembre 2006Cours d'algorithmique 6 - Intranet171 Shortest Path Problem Principe de la résolution par programmation dynamique : Principe de la résolution par programmation dynamique : – Nous allons supposer que les plus courts chemins sont connus pour un sous-ensemble des villes. Ce seront des « voisines » de la ville darrivée. – Pour les autres villes, nous ne connaissons quun majorant de la longueur du plus court chemin !

172 23 novembre 2006Cours d'algorithmique 6 - Intranet172 Shortest Path Problem A B C D E F Principe de la résolution par programmation dynamique : Principe de la résolution par programmation dynamique : – Nous allons supposer que les plus courts chemins sont connus pour un sous-ensemble des villes. Ce seront des « voisines » de la ville darrivée. – Pour les autres villes, nous ne connaissons quun majorant de la longueur du plus court chemin !

173 23 novembre 2006Cours d'algorithmique 6 - Intranet173 Shortest Path Problem A B C D E F Plus court chemin connu ! Principe de la résolution par programmation dynamique : Principe de la résolution par programmation dynamique : – Nous allons supposer que les plus courts chemins sont connus pour un sous-ensemble des villes. Ce seront des « voisines » de la ville darrivée. – Pour les autres villes, nous ne connaissons quun majorant de la longueur du plus court chemin !

174 23 novembre 2006Cours d'algorithmique 6 - Intranet174 Shortest Path Problem Principe de la résolution par programmation dynamique : Principe de la résolution par programmation dynamique : – Nous allons supposer que les plus courts chemins sont connus pour un sous-ensemble des villes. Ce seront des « voisines » de la ville darrivée. – Pour les autres villes, nous ne connaissons quun majorant de la longueur du plus court chemin ! A B C D E F Majorant du plus court chemin ! inf Plus court chemin connu !

175 23 novembre 2006Cours d'algorithmique 6 - Intranet175 Shortest Path Problem Parmi les villes non définitives, nous choisissons celle qui est à la plus petite distance. Parmi les villes non définitives, nous choisissons celle qui est à la plus petite distance. A B C D E F Majorant du plus court chemin ! inf Plus court chemin connu !

176 23 novembre 2006Cours d'algorithmique 6 - Intranet176 Shortest Path Problem Parmi les villes non définitives, nous choisissons celle qui est à la plus petite distance. Parmi les villes non définitives, nous choisissons celle qui est à la plus petite distance. Cette distance est en fait exacte, et la ville passe dans le camp de droite ! Cette distance est en fait exacte, et la ville passe dans le camp de droite ! A B C D E F Majorant du plus court chemin ! inf Plus court chemin connu !

177 23 novembre 2006Cours d'algorithmique 6 - Intranet177 Shortest Path Problem Parmi les villes non définitives, nous choisissons celle qui est à la plus petite distance. Parmi les villes non définitives, nous choisissons celle qui est à la plus petite distance. Cette distance est en fait exacte, et la ville passe dans le camp de droite ! Cette distance est en fait exacte, et la ville passe dans le camp de droite ! A B C D E F Majorant du plus court chemin ! inf Plus court chemin connu !

178 23 novembre 2006Cours d'algorithmique 6 - Intranet178 Shortest Path Problem Parmi les villes non définitives, nous choisissons celle qui est à la plus petite distance. Parmi les villes non définitives, nous choisissons celle qui est à la plus petite distance. Cette distance est en fait exacte, et la ville passe dans le camp de droite ! Cette distance est en fait exacte, et la ville passe dans le camp de droite ! Les villes qui la précèdent, et non définitives, sont mises à jour par rapport à leur plus court chemin. Les villes qui la précèdent, et non définitives, sont mises à jour par rapport à leur plus court chemin. A B C D E F Majorant du plus court chemin ! inf Plus court chemin connu !

179 23 novembre 2006Cours d'algorithmique 6 - Intranet179 Shortest Path Problem Parmi les villes non définitives, nous choisissons celle qui est à la plus petite distance. Parmi les villes non définitives, nous choisissons celle qui est à la plus petite distance. Cette distance est en fait exacte, et la ville passe dans le camp de droite ! Cette distance est en fait exacte, et la ville passe dans le camp de droite ! Les villes qui la précèdent, et non définitives, sont mises à jour par rapport à leur plus court chemin. Les villes qui la précèdent, et non définitives, sont mises à jour par rapport à leur plus court chemin. A B C D E F Majorant du plus court chemin ! min( , +inf ) = 61 +inf ) = 61 Plus court chemin connu !

180 23 novembre 2006Cours d'algorithmique 6 - Intranet180 Shortest Path Problem Parmi les villes non définitives, nous choisissons celle qui est à la plus petite distance. Parmi les villes non définitives, nous choisissons celle qui est à la plus petite distance. Cette distance est en fait exacte, et la ville passe dans le camp de droite ! Cette distance est en fait exacte, et la ville passe dans le camp de droite ! Les villes qui la précèdent, et non définitives, sont mises à jour par rapport à leur plus court chemin. Les villes qui la précèdent, et non définitives, sont mises à jour par rapport à leur plus court chemin. A B C D E F Majorant du plus court chemin ! Plus court chemin connu !

181 23 novembre 2006Cours d'algorithmique 6 - Intranet181 Shortest Path Problem Exemple complet. Exemple complet. A B C D E F Majorant du plus court chemin ! +inf +inf+inf +inf+inf 20 0

182 23 novembre 2006Cours d'algorithmique 6 - Intranet182 Shortest Path Problem Exemple complet (première itération). Exemple complet (première itération). A B C D E F Majorant du plus court chemin ! +inf +inf+inf +inf+inf 20 0 Sélection ! Plus court chemin connu !

183 23 novembre 2006Cours d'algorithmique 6 - Intranet183 Shortest Path Problem Exemple complet (première itération). Exemple complet (première itération). A B C D E F Majorant du plus court chemin ! +inf +inf11 +inf Sélection ! Mise à jour des prédécesseurs. Plus court chemin connu !

184 23 novembre 2006Cours d'algorithmique 6 - Intranet184 Shortest Path Problem Exemple complet. Exemple complet. A B C D E F Majorant du plus court chemin ! +inf +inf11 +inf Plus court chemin connu !

185 23 novembre 2006Cours d'algorithmique 6 - Intranet185 Shortest Path Problem Exemple complet (deuxième itération). Exemple complet (deuxième itération). A B C D E F Majorant du plus court chemin ! +inf +inf11 +inf Sélection ! Plus court chemin connu !

186 23 novembre 2006Cours d'algorithmique 6 - Intranet186 Shortest Path Problem Exemple complet (deuxième itération). Exemple complet (deuxième itération). A B C D E F Majorant du plus court chemin ! +inf Sélection ! Mise à jour des prédécesseurs. Plus court chemin connu !

187 23 novembre 2006Cours d'algorithmique 6 - Intranet187 Shortest Path Problem Exemple complet. Exemple complet. A B C D E F Majorant du plus court chemin ! +inf Plus court chemin connu !

188 23 novembre 2006Cours d'algorithmique 6 - Intranet188 Shortest Path Problem Exemple complet (troisième itération). Exemple complet (troisième itération). A B C D E F Majorant du plus court chemin ! +inf Sélection ! Plus court chemin connu !

189 23 novembre 2006Cours d'algorithmique 6 - Intranet189 Shortest Path Problem Exemple complet (troisième itération). Exemple complet (troisième itération). A B C D E F Majorant du plus court chemin ! Sélection ! Mise à jour des prédécesseurs. Plus court chemin connu !

190 23 novembre 2006Cours d'algorithmique 6 - Intranet190 Shortest Path Problem Exemple complet. Exemple complet. A B C D E F Majorant du plus court chemin ! Plus court chemin connu !

191 23 novembre 2006Cours d'algorithmique 6 - Intranet191 Shortest Path Problem Exemple complet (quatrième itération). Exemple complet (quatrième itération). A B C D E F Majorant du plus court chemin ! Sélection ! Plus court chemin connu !

192 23 novembre 2006Cours d'algorithmique 6 - Intranet192 Shortest Path Problem Exemple complet (quatrième itération). Exemple complet (quatrième itération). A B C D E F Majorant du plus court chemin ! Sélection ! Mise à jour des prédécesseurs. Plus court chemin connu !

193 23 novembre 2006Cours d'algorithmique 6 - Intranet193 Shortest Path Problem Exemple complet. Exemple complet. A B C D E F Majorant du plus court chemin ! Plus court chemin connu !

194 23 novembre 2006Cours d'algorithmique 6 - Intranet194 Shortest Path Problem Exemple complet (cinquième itération). Exemple complet (cinquième itération). A B C D E F Majorant du plus court chemin ! Sélection ! Plus court chemin connu !

195 23 novembre 2006Cours d'algorithmique 6 - Intranet195 Shortest Path Problem Exemple complet (cinquième itération). Exemple complet (cinquième itération). A B C D E F Majorant du plus court chemin ! Sélection ! Mise à jour des prédécesseurs. Plus court chemin connu !

196 23 novembre 2006Cours d'algorithmique 6 - Intranet196 Shortest Path Problem Exemple complet. Exemple complet. A B C D E F Majorant du plus court chemin ! Plus court chemin connu !

197 23 novembre 2006Cours d'algorithmique 6 - Intranet197 Shortest Path Problem Exemple complet (sixième itération). Exemple complet (sixième itération). A B C D E F Sélection ! Plus court chemin connu !

198 23 novembre 2006Cours d'algorithmique 6 - Intranet198 Shortest Path Problem Exemple complet (sixième itération). Exemple complet (sixième itération). A B C D E F Sélection ! Mise à jour des prédécesseurs. Plus court chemin connu !

199 23 novembre 2006Cours d'algorithmique 6 - Intranet199 Shortest Path Problem Exemple complet, cest fini. Exemple complet, cest fini. A B C D E F Plus court chemin connu !

200 23 novembre 2006Cours d'algorithmique 6 - Intranet200 Shortest Path Problem pour toutes les villes v : f[ v ] = +inf ; f[ arrivee ] = 0 ; V = « lensemble de toutes les villes » ; tantque V <> {} {choisir dans V la ville x tq f[ x ] soit minimale sur V /* Si ex aequo, on choisit une ville optimale au hasard */ V = V – { x } ; pour toute ville v dans V et tq d( v, x ) est finie f[ v ] = min( f[ v ], d( v, x ) + f[ x ] ) ; }

201 23 novembre 2006Cours d'algorithmique 6 - Intranet201 Shortest Path Problem pour toutes les villes v : f[ v ] = +inf ; f[ arrivee ] = 0 ; V = « lensemble de toutes les villes » ; tantque V <> {} {choisir dans V la ville x tq f[ x ] soit minimale sur V /* Si ex aequo, on choisit une ville optimale au hasard */ V = V – { x } ; pour toute ville v dans V et tq d( v, x ) est finie f[ v ] = min( f[ v ], d( v, x ) + f[ x ] ) ; } Initialisations !

202 23 novembre 2006Cours d'algorithmique 6 - Intranet202 Shortest Path Problem pour toutes les villes v : f[ v ] = +inf ; f[ arrivee ] = 0 ; V = « lensemble de toutes les villes » ; tantque V <> {} {choisir dans V la ville x tq f[ x ] soit minimale sur V /* Si ex aequo, on choisit une ville optimale au hasard */ V = V – { x } ; pour toute ville v dans V et tq d( v, x ) est finie f[ v ] = min( f[ v ], d( v, x ) + f[ x ] ) ; } Il y a un tour de boucle par ville !

203 23 novembre 2006Cours d'algorithmique 6 - Intranet203 Shortest Path Problem pour toutes les villes v : f[ v ] = +inf ; f[ arrivee ] = 0 ; V = « lensemble de toutes les villes » ; tantque V <> {} {choisir dans V la ville x tq f[ x ] soit minimale sur V /* Si ex aequo, on choisit une ville optimale au hasard */ V = V – { x } ; pour toute ville v dans V et tq d( v, x ) est finie f[ v ] = min( f[ v ], d( v, x ) + f[ x ] ) ; } f[ x ] est la longueur du plus court chemin issu de x !

204 23 novembre 2006Cours d'algorithmique 6 - Intranet204 Shortest Path Problem pour toutes les villes v : f[ v ] = +inf ; f[ arrivee ] = 0 ; V = « lensemble de toutes les villes » ; tantque V <> {} {choisir dans V la ville x tq f[ x ] soit minimale sur V /* Si ex aequo, on choisit une ville optimale au hasard */ V = V – { x } ; pour toute ville v dans V et tq d( v, x ) est finie f[ v ] = min( f[ v ], d( v, x ) + f[ x ] ) ; } f[ x ] est la longueur du plus court chemin issu de x ! x est retirée de lensemble !

205 23 novembre 2006Cours d'algorithmique 6 - Intranet205 Shortest Path Problem pour toutes les villes v : f[ v ] = +inf ; f[ arrivee ] = 0 ; V = « lensemble de toutes les villes » ; tantque V <> {} {choisir dans V la ville x tq f[ x ] soit minimale sur V /* Si ex aequo, on choisit une ville optimale au hasard */ V = V – { x } ; pour toute ville v dans V et tq d( v, x ) est finie f[ v ] = min( f[ v ], d( v, x ) + f[ x ] ) ; } f[ x ] est la longueur du plus court chemin issu de x ! x est retirée de lensemble ! Les villes qui précèdent x sont mises à jour !

206 23 novembre 2006Cours d'algorithmique 6 - Intranet206 Shortest Path Problem Ceci est lalgorithme des plus courts chemins de Dijkstra. Ceci est lalgorithme des plus courts chemins de Dijkstra. Sa complexité est de O ( n^2 ) où « n » est le nombre de villes. Sa complexité est de O ( n^2 ) où « n » est le nombre de villes. Plus précisément, il est en ( m ) où « m » est le nombre darcs. Plus précisément, il est en ( m ) où « m » est le nombre darcs. Lalgorithme est optimal, car le problème ne peut pas être résolu avec une complexité plus petite. Lalgorithme est optimal, car le problème ne peut pas être résolu avec une complexité plus petite.

207 23 novembre 2006Cours d'algorithmique 6 - Intranet207 Synthèse Programmation dynamique : Problème du sac à dos. Négociant en sardines au port de Marseille. Problème de la plus longue sous-chaîne commune. Problème du plus court chemin.

208 23 novembre 2006Cours d'algorithmique 6 - Intranet208 m E r C i e T b O n N e J o U r N é E ! ! ! n O u B l I e Z p A s D e p R é P a R e R v O s T D ! ! !


Télécharger ppt "Cours d'algorithmique 6 - Intranet 1 23 novembre 2006 Cours dAlgorithmique Programmation dynamique : Problème du sac à dos. Négociant en sardines au port."

Présentations similaires


Annonces Google