Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
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
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.