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

Présentations similaires


Présentation au sujet: "Cours d’Algorithmique"— Transcription de la présentation:

1 Cours d’Algorithmique
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. 23 novembre 2006 Cours d'algorithmique 6 - Intranet

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

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

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

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

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

7 Cours d'algorithmique 6 - Intranet
Dynamic Programming 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. { 23 novembre 2006 Cours d'algorithmique 6 - Intranet

8 Cours d'algorithmique 6 - Intranet
Dynamic Programming 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 ». 23 novembre 2006 Cours d'algorithmique 6 - Intranet

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

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

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

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

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

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

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

16 Cours d'algorithmique 6 - Intranet
Dynamic Programming 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 23 novembre 2006 Cours d'algorithmique 6 - Intranet

17 Cours d'algorithmique 6 - Intranet
Dynamic Programming Quelle fonction de temps ? C’est quoi ? 23 novembre 2006 Cours d'algorithmique 6 - Intranet

18 Cours d'algorithmique 6 - Intranet
Dynamic Programming Quelle fonction de temps ? C’est 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 ». 23 novembre 2006 Cours d'algorithmique 6 - Intranet

19 Cours d'algorithmique 6 - Intranet
Dynamic Programming Quelle fonction de temps ? C’est 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 ». N’importe laquelle pour peu que nous ne répétions pas les calculs Ce n’est pas interdit, mais fortement déconseillé ! et que la fonction soit compatible avec les dépendances. 23 novembre 2006 Cours d'algorithmique 6 - Intranet

20 Cours d'algorithmique 6 - Intranet
Dynamic Programming 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 » s’il faut que « A » soit calculé avant « B » ! 23 novembre 2006 Cours d'algorithmique 6 - Intranet

21 Cours d'algorithmique 6 - Intranet
Dynamic Programming 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 » s’il faut que « A » soit calculé avant « B » ! Soit, parce que « A » a besoin de données produites par « B » --- flot de données ! 23 novembre 2006 Cours d'algorithmique 6 - Intranet

22 Cours d'algorithmique 6 - Intranet
Dynamic Programming 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 » s’il faut que « A » soit calculé avant « B » ! Soit, parce que « A » a besoin de données produites par « B » --- flot de données ! Soit, parce qu’il faut respecter un ordre (par exemple imprimer « A » avant « B »). 23 novembre 2006 Cours d'algorithmique 6 - Intranet

23 Cours d'algorithmique 6 - Intranet
Dynamic Programming 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 » s’il faut que « A » soit calculé avant « B » ! Soit, parce que « A » a besoin de données produites par « B » --- flot de données ! Soit, parce qu’il faut respecter un ordre (par exemple imprimer « A » avant « B »). Soit, parce que « A » conditionne « B » ( si A alors B ) --- flot de contrôle ! 23 novembre 2006 Cours d'algorithmique 6 - Intranet

24 Le respect des dépendances est obligatoire !
Dynamic Programming 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 » s’il faut que « A » soit calculé avant « B » ! Soit, parce que « A » a besoin de données produites par « B » --- flot de données ! Soit, parce qu’il faut respecter un ordre (par exemple imprimer « A » avant « B »). Soit, parce que « A » conditionne « B » ( si A alors B ) --- flot de contrôle ! Le respect des dépendances est obligatoire ! 23 novembre 2006 Cours d'algorithmique 6 - Intranet

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

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

27 Cours d'algorithmique 6 - Intranet
Dynamic Programming En fait, les dépendances comportent une notion de temporalité sous la forme de : AVANT APRES D’ABORD ENSUITE La fonction de temps « f » dit de manière plus précise : QUAND 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 ) 23 novembre 2006 Cours d'algorithmique 6 - Intranet

28 Cours d'algorithmique 6 - Intranet
Dynamic Programming En fait, les dépendances comportent une notion de temporalité sous la forme de : AVANT APRES D’ABORD ENSUITE La fonction de temps « f » dit de manière plus précise : QUAND 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 » est alors dite « compatible avec les dépendances ». 23 novembre 2006 Cours d'algorithmique 6 - Intranet

29 Cours d'algorithmique 6 - Intranet
Dynamic Programming L’arbre de dépendances de Fibonacci : 4 3 2 2 1 1 1 23 novembre 2006 Cours d'algorithmique 6 - Intranet

30 Cours d'algorithmique 6 - Intranet
Dynamic Programming L’arbre de dépendances de Fibonacci : Sa projection sur un axe de temps : t 4 4 3 3 2 2 2 1 1 1 1 23 novembre 2006 Cours d'algorithmique 6 - Intranet

31 Cours d'algorithmique 6 - Intranet
Dynamic Programming L’arbre de dépendances de Fibonacci : Sa projection sur un axe de temps : t 4 4 3 3 2 2 2 1 1 1 1 23 novembre 2006 Cours d'algorithmique 6 - Intranet

32 Cours d'algorithmique 6 - Intranet
Dynamic Programming L’arbre de dépendances de Fibonacci : Sa projection sur un axe de temps : t 4 4 Compatibilité ! 3 3 2 2 2 1 1 1 1 23 novembre 2006 Cours d'algorithmique 6 - Intranet

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

34 Cours d'algorithmique 6 - Intranet
Dynamic Programming Il y a une théorie derrière ! 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. Trop long et compliqué dans le contexte du cours. 23 novembre 2006 Cours d'algorithmique 6 - Intranet

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

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

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

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

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

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

41 Cours d'algorithmique 6 - Intranet
Sac à dos Knapsack 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 ) ; } 23 novembre 2006 Cours d'algorithmique 6 - Intranet

42 Cours d'algorithmique 6 - Intranet
Sac à dos Knapsack Correct, mais … Toutes les tailles possibles pour les sous-ensembles. {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 ) ; } 23 novembre 2006 Cours d'algorithmique 6 - Intranet

43 Cours d'algorithmique 6 - Intranet
Sac à dos Knapsack Correct, mais … Toutes les tailles possibles pour les sous-ensembles. {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 ) ; } Tous les sous-ensembles de cette taille … 23 novembre 2006 Cours d'algorithmique 6 - Intranet

44 Cours d'algorithmique 6 - Intranet
Sac à dos Knapsack Correct, mais … Toutes les tailles possibles pour les sous-ensembles. {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 ) ; } Tous les sous-ensembles de cette taille … Retenez le bénéfice s’il est meilleur et que la contrainte sur la capacité est respectée. 23 novembre 2006 Cours d'algorithmique 6 - Intranet

45 Cours d'algorithmique 6 - Intranet
Sac à dos Knapsack Correct, mais … Toutes les tailles possibles pour les sous-ensembles. {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 ) ; } Tous les sous-ensembles de cette taille … Retenez le bénéfice s’il 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 Q ( 2^n ). 23 novembre 2006 Cours d'algorithmique 6 - Intranet

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

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

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

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

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

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

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

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

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

55 Cours d'algorithmique 6 - Intranet
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 ) ; return( max( D&C_sac( objet + 1 , residuelle – p[ objet ] , benefice + b[ objet ] ) , memoire ) ) ; } } 23 novembre 2006 Cours d'algorithmique 6 - Intranet

56 Cours d'algorithmique 6 - Intranet
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 ) ; return( max( D&C_sac( objet + 1 , residuelle – p[ objet ] , benefice + b[ objet ] ) , memoire ) ) ; } } Cas final ! 23 novembre 2006 Cours d'algorithmique 6 - Intranet

57 Cours d'algorithmique 6 - Intranet
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 ) ; return( max( D&C_sac( objet + 1 , residuelle – p[ objet ] , benefice + b[ objet ] ) , memoire ) ) ; } } Cas final ! Nous explorons toujours le cas où l’objet ne sera pas pris ! 23 novembre 2006 Cours d'algorithmique 6 - Intranet

58 Cours d'algorithmique 6 - Intranet
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 ) ; return( max( D&C_sac( objet + 1 , residuelle – p[ objet ] , benefice + b[ objet ] ) , memoire ) ) ; } } Cas final ! Nous explorons toujours le cas où l’objet ne sera pas pris ! Il se peut que cela suffise ! 23 novembre 2006 Cours d'algorithmique 6 - Intranet

59 Cours d'algorithmique 6 - Intranet
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 ) ; return( max( D&C_sac( objet + 1 , residuelle – p[ objet ] , benefice + b[ objet ] ) , memoire ) ) ; } } Cas final ! Nous explorons toujours le cas où l’objet ne sera pas pris ! Il se peut que cela suffise ! Le cas le plus courant est celui qui explore les deux alternatives ! 23 novembre 2006 Cours d'algorithmique 6 - Intranet

60 Cours d'algorithmique 6 - Intranet
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 ) ; return( max( D&C_sac( objet + 1 , residuelle – p[ objet ] , benefice + b[ objet ] ) , memoire ) ) ; } } Cas final ! Nous explorons toujours le cas où l’objet ne sera pas pris ! Il se peut que cela suffise ! La capacité résiduelle diminue ! Le cas le plus courant est celui qui explore les deux alternatives ! Le bénéfice augmente ! 23 novembre 2006 Cours d'algorithmique 6 - Intranet

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

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

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

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

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

66 Cours d'algorithmique 6 - Intranet
Sac à dos Knapsack Organisons notre emploi du temps ! Au temps « t », nous nous occupons de 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 : Opt ( t , R ) = t 1 t-1 { 23 novembre 2006 Cours d'algorithmique 6 - Intranet

67 Cours d'algorithmique 6 - Intranet
Sac à dos Knapsack Organisons notre emploi du temps ! Au temps « t », nous nous occupons de 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 : Opt ( t – 1 , R ) si p > R ! Opt ( t , R ) = t 1 t-1 { t 23 novembre 2006 Cours d'algorithmique 6 - Intranet

68 Cours d'algorithmique 6 - Intranet
Sac à dos Knapsack Organisons notre emploi du temps ! Au temps « t », nous nous occupons de 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 : Opt ( t – 1 , R ) si p > R ! Opt ( t , R ) = max ( Opt ( t – 1 , R ) , b + Opt ( t - 1 , R – p ) ) t 1 t-1 { t t t 23 novembre 2006 Cours d'algorithmique 6 - Intranet

69 Cours d'algorithmique 6 - Intranet
Sac à dos Knapsack Organisons notre emploi du temps ! Au temps « t », nous nous occupons de 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 : Opt ( t – 1 , R ) si p > R ! Opt ( t , R ) = max ( Opt ( t – 1 , R ) , b + Opt ( t - 1 , R – p ) ) t 1 t-1 { t t t O n’est pas pris ! O est pris ! t t 23 novembre 2006 Cours d'algorithmique 6 - Intranet

70 Cours d'algorithmique 6 - Intranet
Sac à dos Knapsack Organisons notre emploi du temps ! Au temps « t », nous nous occupons de 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 : Opt ( t – 1 , R ) si p > R ! Opt ( t , R ) = max ( Opt ( t – 1 , R ) , b + Opt ( t - 1 , R – p ) ) t 1 t-1 { t t t Nous respectons l’écoulement du temps ! 23 novembre 2006 Cours d'algorithmique 6 - Intranet

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

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

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

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

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

76 Cours d'algorithmique 6 - Intranet
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 ] ) ; } 23 novembre 2006 Cours d'algorithmique 6 - Intranet

77 Cours d'algorithmique 6 - Intranet
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. 23 novembre 2006 Cours d'algorithmique 6 - Intranet

78 Cours d'algorithmique 6 - Intranet
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 … 23 novembre 2006 Cours d'algorithmique 6 - Intranet

79 Cours d'algorithmique 6 - Intranet
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 ? 23 novembre 2006 Cours d'algorithmique 6 - Intranet

80 Cours d'algorithmique 6 - Intranet
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 qu’il faut ! 23 novembre 2006 Cours d'algorithmique 6 - Intranet

81 Finalement, c'était simple ! ! !
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 … Finalement, c'était simple ! ! ! … ce qu’il faut ! 23 novembre 2006 Cours d'algorithmique 6 - Intranet

82 Cours d'algorithmique 6 - Intranet
Marine marchande 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 ! ! ! 23 novembre 2006 Cours d'algorithmique 6 - Intranet

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

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

85 Cours d'algorithmique 6 - Intranet
Marine marchande 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, 23 novembre 2006 Cours d'algorithmique 6 - Intranet

86 Cours d'algorithmique 6 - Intranet
Marine marchande 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 ! 23 novembre 2006 Cours d'algorithmique 6 - Intranet

87 Cours d'algorithmique 6 - Intranet
Marine marchande 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 ? 23 novembre 2006 Cours d'algorithmique 6 - Intranet

88 Cours d'algorithmique 6 - Intranet
Marine marchande A l’arrivée du premier bateau : Vous achetez ? Vous attendez mieux ? 23 novembre 2006 Cours d'algorithmique 6 - Intranet

89 Cours d'algorithmique 6 - Intranet
Marine marchande A l’arrivée du premier bateau : Vous achetez ? Vous attendez mieux ? OUI Achat du premier ? NON 23 novembre 2006 Cours d'algorithmique 6 - Intranet

90 Cours d'algorithmique 6 - Intranet
Marine marchande A l’arrivée du premier bateau : Vous achetez ? Vous attendez mieux ? OUI Achat du premier ? OUI NON – Achat du second NON etc, etc ... 23 novembre 2006 Cours d'algorithmique 6 - Intranet

91 Cours d'algorithmique 6 - Intranet
Marine marchande A l’arrivée du premier bateau : Vous achetez ? Vous attendez mieux ? OUI Achat du premier ? OUI NON – Achat du second NON En fait, qu’attendez-vous ? etc, etc ... 23 novembre 2006 Cours d'algorithmique 6 - Intranet

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

93 Cours d'algorithmique 6 - Intranet
Marine marchande A l’arrivé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 ) ! 23 novembre 2006 Cours d'algorithmique 6 - Intranet

94 Cours d'algorithmique 6 - Intranet
Marine marchande A l’arrivé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, avec une probabilité de ( 1000 – E( i+1 ) ) / 1000 nous achetons le bateau « i » dont la qualité moyenne vaut ( E( i+1 ) ) / 2 . 23 novembre 2006 Cours d'algorithmique 6 - Intranet

95 Cours d'algorithmique 6 - Intranet
Marine marchande A l’arrivé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, 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 + … 23 novembre 2006 Cours d'algorithmique 6 - Intranet

96 Cours d'algorithmique 6 - Intranet
Marine marchande A l’arrivé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, 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 ) 23 novembre 2006 Cours d'algorithmique 6 - Intranet

97 Cours d'algorithmique 6 - Intranet
Marine marchande A l’arrivé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, 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 ) = ( 1000^2 + E^2( i+1 ) ) / 2000 23 novembre 2006 Cours d'algorithmique 6 - Intranet

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

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

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

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

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

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

104 C'est à nouveau très simple !
Marine marchande Ce qui nous donne : E( n ) = 500 E( n-1 ) = ½ * ½ * 500 = 625 E( n-2 ) = ( 1000 – 625 ) / 1000 * ( ) / 2 + 625 / 1000 * 625 / 2 = 695 n-10 n-9 n-8 n-7 n-6 n-5 n-4 n-3 n-2 n n L’axe de temps ! C'est à nouveau très simple ! x E( x ) Pour tout bateau i , i < n : Nous achetons si Q( i ) >= E( i+1 ) ! 23 novembre 2006 Cours d'algorithmique 6 - Intranet

105 Cours d'algorithmique 6 - Intranet
Longest Common Sub-String 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 ! ! ! 23 novembre 2006 Cours d'algorithmique 6 - Intranet

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

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

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

109 Cours d'algorithmique 6 - Intranet
Longest Common Sub-String En français : Plus longue sous-chaîne commune ! On obtient une sous-chaîne en supprimant des caractères d’une chaîne. A B C D E F G B A C D D B E F 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 23 novembre 2006 Cours d'algorithmique 6 - Intranet

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

129 Cours d'algorithmique 6 - Intranet
Longest Common Sub-String suffixe( v ) LCSS est donc calculé pour les suffixes de u et v . v e L’ordre des calculs ! LCSS( e , ? ) 4. 2. 5. 1. 3. 6. e e e LCSS( ? , e ) e u suffixe( u ) 23 novembre 2006 Cours d'algorithmique 6 - Intranet

130 "for" sont trop compliquées !
Longest Common Sub-String suffixe( v ) LCSS est donc calculé pour les suffixes de u et v . v e Les bornes des boucles "for" sont trop compliquées ! L’ordre des calculs ! LCSS( e , ? ) 4. 2. 5. 1. 3. 6. e e e LCSS( ? , e ) e u suffixe( u ) 23 novembre 2006 Cours d'algorithmique 6 - Intranet

131 Cours d'algorithmique 6 - Intranet
Longest Common Sub-String suffixe( v ) LCSS est donc calculé pour les suffixes de u et v . Cherchons des axes de temps parallèles au repère ! v e L’ordre des calculs ! LCSS( e , ? ) 4. 2. 5. 1. 3. 6. e e e LCSS( ? , e ) e u suffixe( u ) 23 novembre 2006 Cours d'algorithmique 6 - Intranet

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

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

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

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

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

137 Colonne par colonne, depuis le bas !
Longest Common Sub-String suffixe( v ) LCSS est donc calculé pour les suffixes de u et v . v e Projection ! Deuxième axe de temps ! De gauche à droite, de bas en haut ! LCSS( e , ? ) Projection ! Premier axe de temps ! . e e e Colonne par colonne, depuis le bas ! LCSS( ? , e ) e u suffixe( u ) 23 novembre 2006 Cours d'algorithmique 6 - Intranet

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

139 Cours d'algorithmique 6 - Intranet
Longest Common Sub-String suffixe( v ) LCSS est donc calculé pour les suffixes de u et v . Projection ! Premier Ou alors . . . v e Deuxième axe de temps ! De bas en haut, de gauche à droite ! . LCSS( e , ? ) Deuxième Projection ! Premier axe de temps ! e e e LCSS( ? , e ) e u suffixe( u ) 23 novembre 2006 Cours d'algorithmique 6 - Intranet

140 Ligne par ligne, de gauche à droite !
Longest Common Sub-String suffixe( v ) LCSS est donc calculé pour les suffixes de u et v . Projection ! Premier v e Ou alors . . . Deuxième axe de temps ! De bas en haut, de gauche à droite ! . LCSS( e , ? ) Deuxième Projection ! Premier axe de temps ! e e e Ligne par ligne, de gauche à droite ! LCSS( ? , e ) e u suffixe( u ) 23 novembre 2006 Cours d'algorithmique 6 - Intranet

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

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

143 Cours d'algorithmique 6 - Intranet
Longest Common Sub-String {T[ e , ? ] = e ; T[ ? , e ] = e ; pour x suffixe de u , suivant de e jusqua u pour y suffixe de v , suivant de e 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 ] ) ; } 23 novembre 2006 Cours d'algorithmique 6 - Intranet

144 Cours d'algorithmique 6 - Intranet
Longest Common Sub-String {T[ e , ? ] = e ; T[ ? , e ] = e ; pour x suffixe de u , suivant de e jusqua u pour y suffixe de v , suivant de e 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 ] ) ; } L’initialisation ! 23 novembre 2006 Cours d'algorithmique 6 - Intranet

145 Cours d'algorithmique 6 - Intranet
Longest Common Sub-String {T[ e , ? ] = e ; T[ ? , e ] = e ; pour x suffixe de u , suivant de e jusqua u pour y suffixe de v , suivant de e 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 ] ) ; } L’initialisation ! Colonne par colonne, depuis le bas … 23 novembre 2006 Cours d'algorithmique 6 - Intranet

146 Cours d'algorithmique 6 - Intranet
Longest Common Sub-String {T[ e , ? ] = e ; T[ ? , e ] = e ; pour x suffixe de u , suivant de e jusqua u pour y suffixe de v , suivant de e 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 ] ) ; } L’initialisation ! Colonne par colonne, depuis le bas … … ce qu’il faut ! 23 novembre 2006 Cours d'algorithmique 6 - Intranet

147 Cours d'algorithmique 6 - Intranet
Shortest Path Problem 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 ! ! ! 23 novembre 2006 Cours d'algorithmique 6 - Intranet

148 Cours d'algorithmique 6 - Intranet
Shortest Path Problem Il s’agit d’aller d’une ville de départ vers une ville d’arrivé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). 23 novembre 2006 Cours d'algorithmique 6 - Intranet

149 Cours d'algorithmique 6 - Intranet
Shortest Path Problem Il s’agit d’aller d’une ville de départ vers une ville d’arrivé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). 9 B D 41 11 15 A F 37 13 37 C E 12 23 novembre 2006 Cours d'algorithmique 6 - Intranet

150 Cours d'algorithmique 6 - Intranet
Shortest Path Problem Il s’agit d’aller d’une ville de départ vers une ville d’arrivé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). 9 B D 41 11 15 Les plus courts chemins ! A F 37 13 37 C E 12 23 novembre 2006 Cours d'algorithmique 6 - Intranet

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

152 Cours d'algorithmique 6 - Intranet
Shortest Path Problem Notations : Désignons par V( x ) l’ensemble des voisines d’une 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 y e V( x ) 23 novembre 2006 Cours d'algorithmique 6 - Intranet

153 Cours d'algorithmique 6 - Intranet
Shortest Path Problem Notations : Désignons par V( x ) l’ensemble des voisines d’une 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 y e V( x ) 9 B D f( F ) = 0 41 11 15 A F 37 13 37 C E 12 23 novembre 2006 Cours d'algorithmique 6 - Intranet

154 Cours d'algorithmique 6 - Intranet
Shortest Path Problem Notations : Désignons par V( x ) l’ensemble des voisines d’une 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 y e V( x ) 9 B D f( F ) = 0 f( D ) = 11 + f( F ) 41 11 15 A F 37 13 37 C E 12 23 novembre 2006 Cours d'algorithmique 6 - Intranet

155 Cours d'algorithmique 6 - Intranet
Shortest Path Problem Notations : Désignons par V( x ) l’ensemble des voisines d’une 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 y e V( x ) 9 B D f( F ) = 0 f( D ) = 11 + f( F ) f( E ) = 37 + f( F ) 41 11 15 A F 37 13 37 C E 12 23 novembre 2006 Cours d'algorithmique 6 - Intranet

156 Cours d'algorithmique 6 - Intranet
Shortest Path Problem Notations : Désignons par V( x ) l’ensemble des voisines d’une 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 y e V( x ) 9 B D f( F ) = 0 f( D ) = 11 + f( F ) f( E ) = 37 + f( F ) f( B ) = min{ 9 + f( D ) , 15 + f( E ) } 41 11 15 A F 37 13 37 C E 12 23 novembre 2006 Cours d'algorithmique 6 - Intranet

157 Cours d'algorithmique 6 - Intranet
Shortest Path Problem Notations : Désignons par V( x ) l’ensemble des voisines d’une 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 y e V( x ) 9 B D 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 ) } 41 11 15 A F 37 13 37 C E 12 23 novembre 2006 Cours d'algorithmique 6 - Intranet

158 Cours d'algorithmique 6 - Intranet
Shortest Path Problem Notations : Désignons par V( x ) l’ensemble des voisines d’une 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 y e V( x ) 9 B D 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 ) } 41 11 15 A F 37 13 37 C E 12 23 novembre 2006 Cours d'algorithmique 6 - Intranet

159 Cours d'algorithmique 6 - Intranet
Shortest Path Problem 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 ) } 23 novembre 2006 Cours d'algorithmique 6 - Intranet

160 Cours d'algorithmique 6 - Intranet
Shortest Path Problem 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 ) } 23 novembre 2006 Cours d'algorithmique 6 - Intranet

161 Cours d'algorithmique 6 - Intranet
Shortest Path Problem 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 ) } 23 novembre 2006 Cours d'algorithmique 6 - Intranet

162 Cours d'algorithmique 6 - Intranet
Shortest Path Problem 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 ) } 23 novembre 2006 Cours d'algorithmique 6 - Intranet

163 Cours d'algorithmique 6 - Intranet
Shortest Path Problem 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 ) } 23 novembre 2006 Cours d'algorithmique 6 - Intranet

164 Cours d'algorithmique 6 - Intranet
Shortest Path Problem 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 23 novembre 2006 Cours d'algorithmique 6 - Intranet

165 Cours d'algorithmique 6 - Intranet
Shortest Path Problem 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 f( A ) = 61 = 41 + f( B ) 9 B D 41 11 15 A F 37 13 37 C E 12 23 novembre 2006 Cours d'algorithmique 6 - Intranet

166 Cours d'algorithmique 6 - Intranet
Shortest Path Problem 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 f( A ) = 61 = 41 + f( B ) = f( D ) 9 B D 41 11 15 A F 37 13 37 C E 12 23 novembre 2006 Cours d'algorithmique 6 - Intranet

167 Cours d'algorithmique 6 - Intranet
Shortest Path Problem 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 f( A ) = 61 = 41 + f( B ) = f( D ) = 9 B D 41 11 15 A F 37 13 37 C E 12 23 novembre 2006 Cours d'algorithmique 6 - Intranet

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

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

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

171 Cours d'algorithmique 6 - Intranet
Shortest Path Problem 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 d’arrivée. Pour les autres villes, nous ne connaissons qu’un majorant de la longueur du plus court chemin ! 23 novembre 2006 Cours d'algorithmique 6 - Intranet

172 Cours d'algorithmique 6 - Intranet
Shortest Path Problem 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 d’arrivée. Pour les autres villes, nous ne connaissons qu’un majorant de la longueur du plus court chemin ! 9 B D 41 11 15 A F 37 13 37 C E 12 23 novembre 2006 Cours d'algorithmique 6 - Intranet

173 Cours d'algorithmique 6 - Intranet
Shortest Path Problem 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 d’arrivée. Pour les autres villes, nous ne connaissons qu’un majorant de la longueur du plus court chemin ! 11 9 B D 41 11 15 A F 37 13 37 C E Plus court chemin connu ! 12 37 23 novembre 2006 Cours d'algorithmique 6 - Intranet

174 Cours d'algorithmique 6 - Intranet
Shortest Path Problem 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 d’arrivée. Pour les autres villes, nous ne connaissons qu’un majorant de la longueur du plus court chemin ! 20 11 9 B D 41 11 15 +inf A F 37 13 37 Majorant du plus court chemin ! C E Plus court chemin connu ! 48 12 37 23 novembre 2006 Cours d'algorithmique 6 - Intranet

175 Cours d'algorithmique 6 - Intranet
Shortest Path Problem Parmi les villes non définitives, nous choisissons celle qui est à la plus petite distance. 20 11 9 B D 41 11 15 +inf A F 37 13 37 Majorant du plus court chemin ! C E Plus court chemin connu ! 48 12 37 23 novembre 2006 Cours d'algorithmique 6 - Intranet

176 Cours d'algorithmique 6 - Intranet
Shortest Path Problem 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 ! 20 11 9 B D 41 11 15 +inf A F 37 13 37 Majorant du plus court chemin ! C E Plus court chemin connu ! 48 12 37 23 novembre 2006 Cours d'algorithmique 6 - Intranet

177 Cours d'algorithmique 6 - Intranet
Shortest Path Problem 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 ! 20 11 9 B D 41 11 15 +inf A F 37 13 37 Majorant du plus court chemin ! C E Plus court chemin connu ! 48 12 37 23 novembre 2006 Cours d'algorithmique 6 - Intranet

178 Cours d'algorithmique 6 - Intranet
Shortest Path Problem 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 ! Les villes qui la précèdent, et non définitives, sont mises à jour par rapport à leur plus court chemin. 20 11 9 B D 41 11 15 +inf A F 37 13 37 Majorant du plus court chemin ! C E Plus court chemin connu ! 48 12 37 23 novembre 2006 Cours d'algorithmique 6 - Intranet

179 Cours d'algorithmique 6 - Intranet
Shortest Path Problem 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 ! Les villes qui la précèdent, et non définitives, sont mises à jour par rapport à leur plus court chemin. 20 11 9 B D min( , +inf ) = 61 41 11 15 A F 37 13 37 Majorant du plus court chemin ! C E Plus court chemin connu ! 48 12 37 23 novembre 2006 Cours d'algorithmique 6 - Intranet

180 Et nous recommençons le tout !
Shortest Path Problem 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 ! Les villes qui la précèdent, et non définitives, sont mises à jour par rapport à leur plus court chemin. Et nous recommençons le tout ! 20 11 9 B D 41 11 15 61 A F 37 13 37 Majorant du plus court chemin ! C E Plus court chemin connu ! 48 12 37 23 novembre 2006 Cours d'algorithmique 6 - Intranet

181 Cours d'algorithmique 6 - Intranet
Shortest Path Problem Exemple complet. +inf +inf 9 B D 41 15 11 +inf A 20 F 37 13 37 Majorant du plus court chemin ! C E 12 +inf +inf 23 novembre 2006 Cours d'algorithmique 6 - Intranet

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

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

184 Cours d'algorithmique 6 - Intranet
Shortest Path Problem Exemple complet. +inf 11 9 B D 41 15 11 +inf A 20 F 37 13 37 Majorant du plus court chemin ! C E 12 +inf 37 Plus court chemin connu ! 23 novembre 2006 Cours d'algorithmique 6 - Intranet

185 Cours d'algorithmique 6 - Intranet
Shortest Path Problem Exemple complet (deuxième itération). Sélection ! +inf 11 9 B D 41 15 11 +inf A 20 F 37 13 37 Majorant du plus court chemin ! C E 12 +inf 37 Plus court chemin connu ! 23 novembre 2006 Cours d'algorithmique 6 - Intranet

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

187 Cours d'algorithmique 6 - Intranet
Shortest Path Problem Exemple complet. 20 11 9 B D 41 15 11 +inf A 20 F 37 13 37 Majorant du plus court chemin ! C E 12 48 37 Plus court chemin connu ! 23 novembre 2006 Cours d'algorithmique 6 - Intranet

188 Cours d'algorithmique 6 - Intranet
Shortest Path Problem Exemple complet (troisième itération). Sélection ! 20 11 9 B D 41 15 11 +inf A 20 F 37 13 37 Majorant du plus court chemin ! C E 12 48 37 Plus court chemin connu ! 23 novembre 2006 Cours d'algorithmique 6 - Intranet

189 Cours d'algorithmique 6 - Intranet
Shortest Path Problem Exemple complet (troisième itération). Sélection ! 20 11 Mise à jour des prédécesseurs. 9 B D 41 15 11 61 A 20 F 37 13 37 Majorant du plus court chemin ! C E 12 40 37 Plus court chemin connu ! 23 novembre 2006 Cours d'algorithmique 6 - Intranet

190 Cours d'algorithmique 6 - Intranet
Shortest Path Problem Exemple complet. 20 11 9 B D 41 15 11 61 A 20 F 37 13 37 Majorant du plus court chemin ! C E 12 40 37 Plus court chemin connu ! 23 novembre 2006 Cours d'algorithmique 6 - Intranet

191 Cours d'algorithmique 6 - Intranet
Shortest Path Problem Exemple complet (quatrième itération). Sélection ! 20 11 9 B D 41 15 11 61 A 20 F 37 13 37 Majorant du plus court chemin ! C E 12 40 37 Plus court chemin connu ! 23 novembre 2006 Cours d'algorithmique 6 - Intranet

192 Cours d'algorithmique 6 - Intranet
Shortest Path Problem Exemple complet (quatrième itération). Sélection ! 20 11 Mise à jour des prédécesseurs. 9 B D 41 15 11 61 A 20 F 37 13 37 Majorant du plus court chemin ! C E 12 40 37 Plus court chemin connu ! 23 novembre 2006 Cours d'algorithmique 6 - Intranet

193 Cours d'algorithmique 6 - Intranet
Shortest Path Problem Exemple complet. 20 11 9 B D 41 15 11 61 A 20 F 37 13 37 Majorant du plus court chemin ! C E 12 40 37 Plus court chemin connu ! 23 novembre 2006 Cours d'algorithmique 6 - Intranet

194 Cours d'algorithmique 6 - Intranet
Shortest Path Problem Exemple complet (cinquième itération). Sélection ! 20 11 9 B D 41 15 11 61 A 20 F 37 13 37 Majorant du plus court chemin ! C E 12 40 37 Plus court chemin connu ! 23 novembre 2006 Cours d'algorithmique 6 - Intranet

195 Cours d'algorithmique 6 - Intranet
Shortest Path Problem Exemple complet (cinquième itération). Sélection ! 20 11 Mise à jour des prédécesseurs. 9 B D 41 15 11 53 A 20 F 37 13 37 Majorant du plus court chemin ! C E 12 40 37 Plus court chemin connu ! 23 novembre 2006 Cours d'algorithmique 6 - Intranet

196 Cours d'algorithmique 6 - Intranet
Shortest Path Problem Exemple complet. 20 11 9 B D 41 15 11 53 A 20 F 37 13 37 Majorant du plus court chemin ! C E 12 40 37 Plus court chemin connu ! 23 novembre 2006 Cours d'algorithmique 6 - Intranet

197 Cours d'algorithmique 6 - Intranet
Shortest Path Problem Exemple complet (sixième itération). Sélection ! 20 11 9 B D 41 15 11 53 A 20 F 37 13 37 C E 12 40 37 Plus court chemin connu ! 23 novembre 2006 Cours d'algorithmique 6 - Intranet

198 Cours d'algorithmique 6 - Intranet
Shortest Path Problem Exemple complet (sixième itération). Sélection ! 20 11 Mise à jour des prédécesseurs. 9 B D 41 15 11 53 A 20 F 37 13 37 C E 12 40 37 Plus court chemin connu ! 23 novembre 2006 Cours d'algorithmique 6 - Intranet

199 Cours d'algorithmique 6 - Intranet
Shortest Path Problem Exemple complet, c’est fini. 20 11 9 B D 41 15 11 53 A 20 F 37 13 37 C E 12 40 37 Plus court chemin connu ! 23 novembre 2006 Cours d'algorithmique 6 - Intranet

200 Cours d'algorithmique 6 - Intranet
Shortest Path Problem pour toutes les villes v : f[ v ] = +inf ; f[ arrivee ] = 0 ; V = « l’ensemble 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 ] ) ; } 23 novembre 2006 Cours d'algorithmique 6 - Intranet

201 Cours d'algorithmique 6 - Intranet
Shortest Path Problem pour toutes les villes v : f[ v ] = +inf ; f[ arrivee ] = 0 ; V = « l’ensemble 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 ! 23 novembre 2006 Cours d'algorithmique 6 - Intranet

202 Cours d'algorithmique 6 - Intranet
Shortest Path Problem pour toutes les villes v : f[ v ] = +inf ; f[ arrivee ] = 0 ; V = « l’ensemble 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 ! 23 novembre 2006 Cours d'algorithmique 6 - Intranet

203 Cours d'algorithmique 6 - Intranet
Shortest Path Problem pour toutes les villes v : f[ v ] = +inf ; f[ arrivee ] = 0 ; V = « l’ensemble 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 ! 23 novembre 2006 Cours d'algorithmique 6 - Intranet

204 Cours d'algorithmique 6 - Intranet
Shortest Path Problem pour toutes les villes v : f[ v ] = +inf ; f[ arrivee ] = 0 ; V = « l’ensemble 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 l’ensemble ! 23 novembre 2006 Cours d'algorithmique 6 - Intranet

205 Cours d'algorithmique 6 - Intranet
Shortest Path Problem pour toutes les villes v : f[ v ] = +inf ; f[ arrivee ] = 0 ; V = « l’ensemble 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 l’ensemble ! Les villes qui précèdent x sont mises à jour ! 23 novembre 2006 Cours d'algorithmique 6 - Intranet

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

207 Programmation dynamique : Problème du sac à dos.
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. 23 novembre 2006 Cours d'algorithmique 6 - Intranet

208 Cours d'algorithmique 6 - Intranet
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 ! ! ! 23 novembre 2006 Cours d'algorithmique 6 - Intranet


Télécharger ppt "Cours d’Algorithmique"

Présentations similaires


Annonces Google