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

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

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

Présentations similaires


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

Présentations similaires


Annonces Google