Cours d’Algorithmique

Slides:



Advertisements
Présentations similaires
La recherche de chemin optimal
Advertisements

La Méthode de Simplexe Standardisation
Présentation générale Marc Gengler
Algorithmes et structures de données avancés
Cours d’Algorithmique
Cours d’Algorithmique
Cours d'algorithmique 10 / Intranet 1 19 décembre 2006 Cours dAlgorithmique Logique de Hoare (fin) : Les boucles et les invariants.
Cours d’Algorithmique
Cours d'algorithmique 9 - Intranet 1 12 décembre 2006 Cours dAlgorithmique Logique de Hoare (début) : Principes et constructions élémentaires.
Problème des 4 couleurs, graphes planaires.
Cours d'algorithmique 7 - Intranet 1 27 novembre 2006 Cours dAlgorithmique Dérécursion (début) : Équivalences entre programmes récursifs et programmes.
18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code.
Cours de graphes Problèmes de flots. Théorème du Max-flow – Min-cut.
Quelques applications.
Cours d’Algorithmique
Cours d’Algorithmique
Cours d'algorithmique 9 - Intranet 1 12 décembre 2006 Cours dAlgorithmique Logique de Hoare (début) : Principes et constructions élémentaires.
Cours d'algorithmique 7 - Intranet 1 27 novembre 2006 Cours dAlgorithmique Dérécursion (début) : Équivalences entre programmes récursifs et programmes.
Cours d'algorithmique 4 - Intranet 1 16 novembre 2006 Cours dAlgorithmique Lalgorithme alpha-beta. Sous-arbres alpha et beta dun arbre minimax et propriétés.
Cours d’Algorithmique
Cours d'algorithmique 11 / Intranet 1 9 janvier 2006 Cours dAlgorithmique N P - complétude.
Cours d'algorithmique 5 - Intranet 1 17/21 novembre 2006 Cours dAlgorithmique Divide and Conquer : principes et applications. Calculabilité.Complexité.
Cours de compilation 2 - Intranet
Cours de graphes Les plus courts chemins,
21 septembre 2007Cours de compilation 2 - Intranet1 Cours de compilation Evaluation partielle etcompilation.
Analyse syntaxique (intro)
Cours d'algorithmique 8 - Intranet 1 4 décembre 2006 Cours dAlgorithmique Dérécursion (fin) : Équivalences entre programmes récursifs et programmes itératifs.
24 septembre 2007Cours de compilation 4 - Intranet1 Cours de compilation Techniques danalyse descendantes.
Cours d’Algorithmique
"Recherche de scénarios redoutés à partir d'un modèle réseau de Petri"
A.Faÿ 1 Recherche opérationnelle Résumé de cours.
Cours d’Algorithmique
Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations.
Cours d’Algorithmique
Chapitre II.Rappels mathématiques et complexité
ALGORITHMES RECURSIFS
Récursivité.
Plus courts chemins On présente dans ce chapitre un problème typique de cheminement dans les graphes : la recherche d'un plus court chemin entre deux sommets.
Cours d’Algorithmique
Les algorithmes: complexité et notation asymptotique
Problème des 4 couleurs, graphes planaires.
Programmation linéaire
Quelques applications.
Quelques graphes particuliers.
Cours de graphes Les arbres et arborescences.
16 mars 2007Cours de graphes 7 - Intranet1 Cours de graphes Problèmes NP-complets. Réductions polynômiales.
CSI 4506: Introduction à l’intelligence artificielle
Algorithmes d ’approximation
1 La récursion. Nous avons vu qu'un programme est constitué d'un ensemble de fonctions. Il est possible pour une fonction donnée d'appeler une autre fonction.
Cours de graphes Marc Gengler Alexandra Bac Sébastien Fournier
21 février 2006Cours de graphes 2 - Intranet1 Cours de graphes Les plus courts chemins, les chemins les plus légers : à laide de la vague, à laide de la.
Cours de graphes 6 - Intranet
23 février 2007Cours de graphes 4 - Intranet1 Cours de graphes Problèmes de flots. Théorème du Max-flow – Min-cut. Algos de Ford-Fulkerson et Edmonds-Karp.
Structures de données IFT-2000 Abder Alikacem La récursivité Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009.
Pour le chemin le plus court pour tous les couples
INTRODUCTION.
Programmation linéaire en nombres entiers
Un outil d’estimation du temps d’exécution au pire-cas par analyse statique de programmes IRISA - Projet Solidor Antoine COLIN.
Foued Mnasri Weal Rekik
CSI 4506: Introduction à l’Intelligence Artificielle
2008/ Plan du cours 1.Introduction –Contenu du cours 2.Logique mathématique –Calcul propositionnel –Calcul des prédicats –Logique floue et aide à.
Recherche de motifs par projections aléatoires
MATHÉMATIQUES DISCRÈTES Chapitre 2 (section 2) François Meunier DMI.
Cours d'algorithmique 10 / Intranet 1 19 décembre 2006 Cours d’Algorithmique Logique de Hoare (fin) : Les boucles et les invariants.
La récursivité Mireille Goud HEG Vd AlgSD - Résurisivité.
Le Jeu et l’intelligence artificielle
Chap. 3 Récursion et induction. Les définitions par récurrence consistent à construire des objets finis, à partir d'autres, selon certaines règles. Les.
Programme linéaire - solution graphique
Programmation par contraintes Réalisé par: WETCHA Chaima MOKDED Mohamed Ali FIA3-GL-AL 1 1.
1 UE Intro. Optimisation L3 INFO UPSud II. Programmation linéaire en variables entières (ou mixtes)
Transcription de la présentation:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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 ( 1000 + E( i+1 ) ) / 2 . 23 novembre 2006 Cours d'algorithmique 6 - Intranet

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 ( 1000 + E( i+1 ) ) / 2 . E ( i ) = ( 1000 – E( i+1 ) ) / 1000 * ( 1000 + E( i+ 1 ) ) / 2 + … 23 novembre 2006 Cours d'algorithmique 6 - Intranet

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 ( 1000 + E( i+1 ) ) / 2 . E ( i ) = ( 1000 – E( i+1 ) ) / 1000 * ( 1000 + E( i+ 1 ) ) / 2 + ( 1 - ( 1000 – E( i+1 ) ) / 1000 ) * E( i+1 ) 23 novembre 2006 Cours d'algorithmique 6 - Intranet

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 ( 1000 + E( i+1 ) ) / 2 . E ( i ) = ( 1000 – E( i+1 ) ) / 1000 * ( 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

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

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

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

Cours d'algorithmique 6 - Intranet Marine marchande ----------------------------------------------------------------- Ce qui nous donne : E( n ) = 500 E( n-1 ) = ½ * 750 + ½ * 500 = 625 E( n-2 ) = ( 1000 – 625 ) / 1000 * ( 1000 + 625 ) / 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-1 n 879 871 861 850 836 820 775 741 695 625 500 x E( x ) 23 novembre 2006 Cours d'algorithmique 6 - Intranet

Cours d'algorithmique 6 - Intranet Marine marchande ----------------------------------------------------------------- Ce qui nous donne : E( n ) = 500 E( n-1 ) = ½ * 750 + ½ * 500 = 625 E( n-2 ) = ( 1000 – 625 ) / 1000 * ( 1000 + 625 ) / 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-1 n 879 871 861 850 836 820 775 741 695 625 500 L’axe de temps ! x E( x ) 23 novembre 2006 Cours d'algorithmique 6 - Intranet

Cours d'algorithmique 6 - Intranet Marine marchande ----------------------------------------------------------------- Ce qui nous donne : E( n ) = 500 E( n-1 ) = ½ * 750 + ½ * 500 = 625 E( n-2 ) = ( 1000 – 625 ) / 1000 * ( 1000 + 625 ) / 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-1 n 879 871 861 850 836 820 775 741 695 625 500 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

C'est à nouveau très simple ! Marine marchande ----------------------------------------------------------------- Ce qui nous donne : E( n ) = 500 E( n-1 ) = ½ * 750 + ½ * 500 = 625 E( n-2 ) = ( 1000 – 625 ) / 1000 * ( 1000 + 625 ) / 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-1 n 879 871 861 850 836 820 775 741 695 625 500 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

"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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Cours d'algorithmique 6 - Intranet Shortest Path Problem ----------------------------------------------------------------- Nous résolvons ces contraintes par substitution : f( F ) = 0 f( D ) = 11 + f( F ) = 11 + 0 = 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

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 + 0 = 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

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{ 9 + 11 , 15 + 37} = 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

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{ 37 + 11 , 12 + 37} = 48 f( A ) = min{ 41 + f( B ) , 13 + f( C ) } 23 novembre 2006 Cours d'algorithmique 6 - Intranet

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{ 41 + 20 , 13 + 48} = 61 23 novembre 2006 Cours d'algorithmique 6 - Intranet

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

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

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

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 ) = 41 + 9 + f( D ) = 41 + 9 + 11 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

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

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

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

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

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

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

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

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

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

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

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( 20 + 41 , +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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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