Cours de graphes Les plus courts chemins, les chemins les plus légers : à l’aide de la vague, à l’aide de la multiplication, à l’aide de Floyd-Warshall. Algorithmes de Dijkstra et Bellmann-Ford. 21 février 2006 Cours de graphes 2 - Intranet
Les grandes lignes du cours Définitions de base Connexité Les plus courts chemins Dijkstra et Bellmann-Ford Arbres Arbres de recouvrement minimaux Problèmes de flots Coloriage de graphes Couplage Chemins d’Euler et de Hamilton Problèmes NP-complets 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – plus courts chemins ----------------------------------------------------------------- La vague Multiplication Floyd-Warshall Q ( | E | ) = O ( | V |^2 ) Q ( | V |^3 * log( | V | ) ) Q ( | V |^3 ) Connexité Plus courts La suite . . . Plus légers 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – plus courts chemins ----------------------------------------------------------------- E S H E M I N S L U S C O U R T S 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – plus courts chemins ----------------------------------------------------------------- Sur un graphe non orienté, nous allons calculer : les composantes connexes ! Sur une composante connexe, nous allons calculer : les plus courts chemins ! Nous rajoutons une pondération strictement positive et nous allons calculer : les chemins les plus légers ! FAIT ! 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – plus courts chemins ----------------------------------------------------------------- La notion de distance est donné par le nombre d’arêtes qu’il faut traverser au moins ! 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – plus courts chemins ----------------------------------------------------------------- La notion de distance est donné par le nombre d’arêtes qu’il faut traverser au moins ! L’algorithme de la « vague » : Nous choisissons un sommet « u » sec et le mouillons, 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – plus courts chemins ----------------------------------------------------------------- La notion de distance est donné par le nombre d’arêtes qu’il faut traverser au moins ! L’algorithme de la « vague » : Nous choisissons un sommet « u » sec et le mouillons, à l’étape 1, nous mouillons ses voisins, 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – plus courts chemins ----------------------------------------------------------------- La notion de distance est donné par le nombre d’arêtes qu’il faut traverser au moins ! L’algorithme de la « vague » : Nous choisissons un sommet « u » sec et le mouillons, à l’étape 1, nous mouillons ses voisins, à l’étape 2, nous mouillons les voisins des voisins , . . . 21 février 2006 Cours de graphes 2 - Intranet
A quelle étape un sommet a-t-il été mouillé ? Connexité – plus courts chemins ----------------------------------------------------------------- La notion de distance est donné par le nombre d’arêtes qu’il faut traverser au moins ! L’algorithme de la « vague » : Nous choisissons un sommet « u » sec et le mouillons, à l’étape 1, nous mouillons ses voisins, à l’étape 2, nous mouillons les voisins des voisins , . . . A quelle étape un sommet a-t-il été mouillé ? 21 février 2006 Cours de graphes 2 - Intranet
A quelle étape un sommet a-t-il été mouillé ? Connexité – plus courts chemins ----------------------------------------------------------------- La notion de distance est donné par le nombre d’arêtes qu’il faut traverser au moins ! L’algorithme de la « vague » : Nous choisissons un sommet « u » sec et le mouillons, à l’étape 1, nous mouillons ses voisins, à l’étape 2, nous mouillons les voisins des voisins , . . . En temps Q ( | E | ) = O ( | V |^2 ) , nous connaissons les plus courts chemins du sommet « u » vers les autres ! A quelle étape un sommet a-t-il été mouillé ? 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – plus courts chemins ----------------------------------------------------------------- 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – plus courts chemins ----------------------------------------------------------------- Etape 0 - étape 1 - étape 2 - étape 3 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – plus courts chemins ----------------------------------------------------------------- u Etape 0 - étape 1 - étape 2 - étape 3 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – plus courts chemins ----------------------------------------------------------------- u Etape 0 - étape 1 - étape 2 - étape 3 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – plus courts chemins ----------------------------------------------------------------- u Etape 0 - étape 1 - étape 2 - étape 3 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – plus courts chemins ----------------------------------------------------------------- Touché une seconde fois ! u Etape 0 - étape 1 - étape 2 - étape 3 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – plus courts chemins ----------------------------------------------------------------- Touché une seconde fois ! u Touché deux fois ! Etape 0 - étape 1 - étape 2 - étape 3 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – plus courts chemins ----------------------------------------------------------------- u Etape 0 - étape 1 - étape 2 - étape 3 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – plus courts chemins ----------------------------------------------------------------- La connaissance de d ( u , v ) et d ( u , w ) ne permet pas de dire grand-chose sur d ( v , w ) ! 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – plus courts chemins ----------------------------------------------------------------- La connaissance de d ( u , v ) et d ( u , w ) ne permet pas de dire grand-chose sur d ( v , w ) ! v u w 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – plus courts chemins ----------------------------------------------------------------- La connaissance de d ( u , v ) et d ( u , w ) ne permet pas de dire grand-chose sur d ( v , w ) ! v u w u w v 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – plus courts chemins ----------------------------------------------------------------- La connaissance de d ( u , v ) et d ( u , w ) ne permet pas de dire grand-chose sur d ( v , w ) ! Il faut répéter la vague depuis chaque sommet « u » du graphe ! v u w u w v 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – plus courts chemins ----------------------------------------------------------------- La connaissance de d ( u , v ) et d ( u , w ) ne permet pas de dire grand-chose sur d ( v , w ) ! Il faut répéter la vague depuis chaque sommet « u » du graphe ! En temps Q ( | V | * | E | ) = O ( | V |^3 ) , nous connaissons les plus courts chemins de tout sommet à tout sommet ! v u w u w v 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – plus courts chemins ----------------------------------------------------------------- La vague Multiplication Floyd-Warshall Q ( | E | ) = O ( | V |^2 ) Q ( | V |^3 * log( | V | ) ) Q ( | V |^3 ) Connexité Q ( | V | * | E | ) = O ( | V |^3 ) Plus courts Plus légers 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – plus courts chemins ----------------------------------------------------------------- La multiplication de matrices : 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – plus courts chemins ----------------------------------------------------------------- La multiplication de matrices : Nous prenons une matrice avec des « 0 » sur la diagonale, des « 1 » lorsque l’arête existe et des « +µ » sinon. 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – plus courts chemins ----------------------------------------------------------------- La multiplication de matrices : Nous prenons une matrice avec des « 0 » sur la diagonale, des « 1 » lorsque l’arête existe et des « +µ » sinon. Nous effectuons le calcul suivant : M * M’ ( i , j ) = min M ( i , k ) + M’ ( k , j ) k 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – plus courts chemins ----------------------------------------------------------------- La multiplication de matrices : Nous prenons une matrice avec des « 0 » sur la diagonale, des « 1 » lorsque l’arête existe et des « +µ » sinon. Nous effectuons le calcul suivant : M * M’ ( i , j ) = min M ( i , k ) + M’ ( k , j ) Nous calculons : M -> M^2 -> M^4 -> . . . k 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – plus courts chemins ----------------------------------------------------------------- La multiplication de matrices : Nous prenons une matrice avec des « 0 » sur la diagonale, des « 1 » lorsque l’arête existe et des « +µ » sinon. Nous effectuons le calcul suivant : M * M’ ( i , j ) = min M ( i , k ) + M’ ( k , j ) Nous calculons : M -> M^2 -> M^4 -> . . . Propriété : M^( 2 * i ) = M^i * M^i contient tous les plus courts chemins de longueur au plus 2 * i , c’est-à-dire qu’elle contient des « +µ » et des valeurs dans { 0 , . . . , 2 * i } . k 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – plus courts chemins ----------------------------------------------------------------- La multiplication de matrices : Nous prenons une matrice avec des « 0 » sur la diagonale, des « 1 » lorsque l’arête existe et des « +µ » sinon. Nous effectuons le calcul suivant : M * M’ ( i , j ) = min M ( i , k ) + M’ ( k , j ) Nous calculons : M -> M^2 -> M^4 -> . . . Propriété : M^( 2 * i ) = M^i * M^i contient tous les plus courts chemins de longueur au plus 2 * i , c’est-à-dire qu’elle contient des « +µ » et des valeurs dans { 0 , . . . , 2 * i } . Il suffit de calculer M^k avec k >= | V |-1 à l’aide de O ( log( | V | ) ) élévations au carré ! k 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – plus courts chemins ----------------------------------------------------------------- Preuve de la propriété : La matrice M = M^1 contient tou(te)s les (longueurs des) plus courts chemins de longueur au plus 1 . 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – plus courts chemins ----------------------------------------------------------------- Preuve de la propriété : La matrice M = M^1 contient tou(te)s les (longueurs des) plus courts chemins de longueur au plus 1 . Hypothèse d’induction : M^i contient tous les . . . 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – plus courts chemins ----------------------------------------------------------------- Preuve de la propriété : La matrice M = M^1 contient tou(te)s les (longueurs des) plus courts chemins de longueur au plus 1 . Hypothèse d’induction : M^i contient tous les . . . M^( 2 * i ) ( u , v ) <> +µ 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – plus courts chemins ----------------------------------------------------------------- Preuve de la propriété : La matrice M = M^1 contient tou(te)s les (longueurs des) plus courts chemins de longueur au plus 1 . Hypothèse d’induction : M^i contient tous les . . . M^( 2 * i ) ( u , v ) <> +µ min_k M^i ( u , k ) + M^i ( k , v ) <> +µ 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – plus courts chemins ----------------------------------------------------------------- Preuve de la propriété : La matrice M = M^1 contient tou(te)s les (longueurs des) plus courts chemins de longueur au plus 1 . Hypothèse d’induction : M^i contient tous les . . . M^( 2 * i ) ( u , v ) <> +µ min_k M^i ( u , k ) + M^i ( k , v ) <> +µ $ w tel que M^i ( u , w ) + M^i ( w , v ) <> +µ et de valeur minimale. 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – plus courts chemins ----------------------------------------------------------------- Preuve de la propriété : La matrice M = M^1 contient tou(te)s les (longueurs des) plus courts chemins de longueur au plus 1 . Hypothèse d’induction : M^i contient tous les . . . M^( 2 * i ) ( u , v ) <> +µ min_k M^i ( u , k ) + M^i ( k , v ) <> +µ $ w tel que M^i ( u , w ) + M^i ( w , v ) <> +µ et de valeur minimale. M^i ( u , w ) <> +µ et M^i ( w , v ) <> +µ 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – plus courts chemins ----------------------------------------------------------------- Preuve de la propriété : La matrice M = M^1 contient tou(te)s les (longueurs des) plus courts chemins de longueur au plus 1 . Hypothèse d’induction : M^i contient tous les . . . M^( 2 * i ) ( u , v ) <> +µ min_k M^i ( u , k ) + M^i ( k , v ) <> +µ $ w tel que M^i ( u , w ) + M^i ( w , v ) <> +µ et de valeur minimale. M^i ( u , w ) <> +µ et M^i ( w , v ) <> +µ Les plus courts chemins de ( u ; w ) et de ( w ; v ) sont de longueur au plus i. 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – plus courts chemins ----------------------------------------------------------------- Preuve de la propriété : La matrice M = M^1 contient tou(te)s les (longueurs des) plus courts chemins de longueur au plus 1 . Hypothèse d’induction : M^i contient tous les . . . M^( 2 * i ) ( u , v ) <> +µ min_k M^i ( u , k ) + M^i ( k , v ) <> +µ $ w tel que M^i ( u , w ) + M^i ( w , v ) <> +µ et de valeur minimale. M^i ( u , w ) <> +µ et M^i ( w , v ) <> +µ Les plus courts chemins de ( u ; w ) et de ( w ; v ) sont de longueur au plus i. Le plus court chemin de « u » vers « v » est de longueur au plus 2 * i et c’est ( u ; w ; v ) . 21 février 2006 Cours de graphes 2 - Intranet
Lemme des plus courts chemins ! Connexité – plus courts chemins ----------------------------------------------------------------- Preuve de la propriété : La matrice M = M^1 contient tou(te)s les (longueurs des) plus courts chemins de longueur au plus 1 . Hypothèse d’induction : M^i contient tous les . . . M^( 2 * i ) ( u , v ) <> +µ min_k M^i ( u , k ) + M^i ( k , v ) <> +µ $ w tel que M^i ( u , w ) + M^i ( w , v ) <> +µ et de valeur minimale. M^i ( u , w ) <> +µ et M^i ( w , v ) <> +µ Les plus courts chemins de ( u ; w ) et de ( w ; v ) sont de longueur au plus i. Le plus court chemin de « u » vers « v » est de longueur au plus 2 * i et c’est ( u ; w ; v ) . Lemme des plus courts chemins ! 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – plus courts chemins ----------------------------------------------------------------- La vague Multiplication Floyd-Warshall Q ( | E | ) = O ( | V |^2 ) Q ( | V |^3 * log( | V | ) ) Q ( | V |^3 ) Connexité Q ( | V | * | E | ) = O ( | V |^3 ) Q ( | V |^3 * log( | V | ) ) Plus courts Plus légers 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – plus courts chemins ----------------------------------------------------------------- (0) M est la matrice d’adjacence avec des « 0 » sur la diagonale, des « 1 » lorsque l’arête existe et des « +µ » sinon. 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – plus courts chemins ----------------------------------------------------------------- (0) M est la matrice d’adjacence avec des « 0 » sur la diagonale, des « 1 » lorsque l’arête existe et des « +µ » sinon. M de Floyd-Warshall contient par hypothèse les plus courts chemins construits à l’aide de sommets intermédiaires dans l’ensemble { 0 , . . . , k-1 } . (k-1) 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – plus courts chemins ----------------------------------------------------------------- (0) M est la matrice d’adjacence avec des « 0 » sur la diagonale, des « 1 » lorsque l’arête existe et des « +µ » sinon. M de Floyd-Warshall contient par hypothèse les plus courts chemins construits à l’aide de sommets intermédiaires dans l’ensemble { 0 , . . . , k-1 } . M ( u , v ) = min ( , ) (k-1) (k) 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – plus courts chemins ----------------------------------------------------------------- (0) M est la matrice d’adjacence avec des « 0 » sur la diagonale, des « 1 » lorsque l’arête existe et des « +µ » sinon. M de Floyd-Warshall contient par hypothèse les plus courts chemins construits à l’aide de sommets intermédiaires dans l’ensemble { 0 , . . . , k-1 } . M ( u , v ) = min ( , ) (k-1) (k) (k-1) M ( u , v ) 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – plus courts chemins ----------------------------------------------------------------- (0) M est la matrice d’adjacence avec des « 0 » sur la diagonale, des « 1 » lorsque l’arête existe et des « +µ » sinon. M de Floyd-Warshall contient par hypothèse les plus courts chemins construits à l’aide de sommets intermédiaires dans l’ensemble { 0 , . . . , k-1 } . M ( u , v ) = min ( , ) (k-1) (k) (k-1) M ( u , v ) (k-1) (k-1) M ( u , k ) + M ( k , v ) 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – plus courts chemins ----------------------------------------------------------------- (0) M est la matrice d’adjacence avec des « 0 » sur la diagonale, des « 1 » lorsque l’arête existe et des « +µ » sinon. M de Floyd-Warshall contient par hypothèse les plus courts chemins construits à l’aide de sommets intermédiaires dans l’ensemble { 0 , . . . , k-1 } . M ( u , v ) = min ( , ) Le plus court chemin avec des sommets dans { 1 , . . . , k } : peut, soit, ne pas passer par « k », (k-1) (k) (k-1) M ( u , v ) (k-1) (k-1) M ( u , k ) + M ( k , v ) 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – plus courts chemins ----------------------------------------------------------------- (0) M est la matrice d’adjacence avec des « 0 » sur la diagonale, des « 1 » lorsque l’arête existe et des « +µ » sinon. M de Floyd-Warshall contient par hypothèse les plus courts chemins construits à l’aide de sommets intermédiaires dans l’ensemble { 0 , . . . , k-1 } . M ( u , v ) = min ( , ) Le plus court chemin avec des sommets dans { 1 , . . . , k } : peut, soit, ne pas passer par « k », peut, soit, passer par « k » ! (k-1) (k) (k-1) M ( u , v ) (k-1) (k-1) M ( u , k ) + M ( k , v ) 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – plus courts chemins ----------------------------------------------------------------- (0) M est la matrice d’adjacence avec des « 0 » sur la diagonale, des « 1 » lorsque l’arête existe et des « +µ » sinon. M de Floyd-Warshall contient par hypothèse les plus courts chemins construits à l’aide de sommets intermédiaires dans l’ensemble { 0 , . . . , k-1 } . M ( u , v ) = min ( , ) Le plus court chemin avec des sommets dans { 1 , . . . , k } : peut, soit, ne pas passer par « k », peut, soit, passer par « k » ! M est la matrice recherchée ! (k-1) (k) (k-1) M ( u , v ) (k-1) (k-1) M ( u , k ) + M ( k , v ) (n) 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – plus courts chemins ----------------------------------------------------------------- La vague Multiplication Floyd-Warshall Q ( | E | ) = O ( | V |^2 ) Q ( | V |^3 * log( | V | ) ) Q ( | V |^3 ) Connexité Q ( | V | * | E | ) = O ( | V |^3 ) Q ( | V |^3 * log( | V | ) ) Q ( | V |^3 ) Plus courts Plus légers 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – plus courts chemins ----------------------------------------------------------------- E S H E M I N S L U S L E G E R S 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- Sur un graphe non orienté, nous allons calculer : les composantes connexes ! Sur une composante connexe, nous allons calculer : les plus courts chemins ! Nous rajoutons une pondération strictement positive et nous allons calculer : les chemins les plus légers ! FAIT ! FAIT ! 21 février 2006 Cours de graphes 2 - Intranet
Les plus courts chemins en sont un cas particulier ! Connexité – chemins les plus légers ----------------------------------------------------------------- Sur un graphe non orienté, nous allons calculer : les composantes connexes ! Sur une composante connexe, nous allons calculer : les plus courts chemins ! Nous rajoutons une pondération strictement positive et nous allons calculer : les chemins les plus légers ! FAIT ! FAIT ! Les plus courts chemins en sont un cas particulier ! 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- Nous rajoutons une pondération strictement positive et nous allons calculer : les chemins les plus légers ! 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- Nous rajoutons une pondération strictement positive et nous allons calculer : les chemins les plus légers ! En présence de poids négatifs, le problème pourrait ne plus avoir de sens, car il pourrait y avoir des cycles de poids négatif. 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- Nous rajoutons une pondération strictement positive et nous allons calculer : les chemins les plus légers ! En présence de poids négatifs, le problème pourrait ne plus avoir de sens, car il pourrait y avoir des cycles de poids négatif. 5 10 -15 5 5 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- Nous rajoutons une pondération strictement positive et nous allons calculer : les chemins les plus légers ! En présence de poids négatifs, le problème pourrait ne plus avoir de sens, car il pourrait y avoir des cycles de poids négatif. 5 10 -15 5 Cycle de poids négatif ! 5 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- Le problème des chemins les plus légers : L’inégalité triangulaire peut ne pas être respectée ! 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- Le problème des chemins les plus légers : L’inégalité triangulaire peut ne pas être respectée ! L’algorithme de la vague (unique) ne marche plus ! ! ! 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- Le problème des chemins les plus légers : L’inégalité triangulaire peut ne pas être respectée ! L’algorithme de la vague (unique) ne marche plus ! ! ! 10 5 8 30 10 5 Etape 0 - étape 1 - étape 2 - étape 3 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- Le problème des chemins les plus légers : L’inégalité triangulaire peut ne pas être respectée ! L’algorithme de la vague (unique) ne marche plus ! ! ! 10 5 8 30 10 5 Etape 0 - étape 1 - étape 2 - étape 3 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- Le problème des chemins les plus légers : L’inégalité triangulaire peut ne pas être respectée ! L’algorithme de la vague (unique) ne marche plus ! ! ! 10 5 5 8 30 30 10 5 Etape 0 - étape 1 - étape 2 - étape 3 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- Le problème des chemins les plus légers : L’inégalité triangulaire peut ne pas être respectée ! L’algorithme de la vague (unique) ne marche plus ! ! ! 10 5 15 5 8 30 40 30 10 5 Etape 0 - étape 1 - étape 2 - étape 3 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- Le problème des chemins les plus légers : L’inégalité triangulaire peut ne pas être respectée ! L’algorithme de la vague (unique) ne marche plus ! ! ! 10 5 15 Une vague qui se brise. Nous l’ignorons ! ! ! 5 8 30 40 30 10 5 Etape 0 - étape 1 - étape 2 - étape 3 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- Le problème des chemins les plus légers : L’inégalité triangulaire peut ne pas être respectée ! L’algorithme de la vague (unique) ne marche plus ! ! ! 10 5 15 Elle n’existe plus ! 5 8 30 40 30 10 5 Etape 0 - étape 1 - étape 2 - étape 3 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- Le problème des chemins les plus légers : L’inégalité triangulaire peut ne pas être respectée ! L’algorithme de la vague (unique) ne marche plus ! ! ! 10 5 15 5 8 23 30 40 45 30 10 5 Etape 0 - étape 1 - étape 2 - étape 3 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- Le problème des chemins les plus légers : L’inégalité triangulaire peut ne pas être respectée ! L’algorithme de la vague (unique) ne marche plus ! ! ! 10 Ceci est à refaire ! 5 15 5 8 23 30 40 45 30 10 5 Etape 0 - étape 1 - étape 2 - étape 3 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- Le problème des chemins les plus légers : L’inégalité triangulaire peut ne pas être respectée ! L’algorithme de la vague (unique) ne marche plus ! ! ! Il peut y avoir « 2 » ou « 3 » vagues, ou « 4 », . . . 10 Ceci est à refaire ! 5 15 5 8 23 30 40 45 30 10 5 Etape 0 - étape 1 - étape 2 - étape 3 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- Le problème des chemins les plus légers : L’inégalité triangulaire peut ne pas être respectée ! L’algorithme de la vague (unique) ne marche plus ! ! ! Il peut y avoir « 2 » ou « 3 » vagues, ou « 4 », . . . Quand est-ce que c’est fini ? ? ? 10 Ceci est à refaire ! 5 15 5 8 23 30 40 45 30 10 5 Etape 0 - étape 1 - étape 2 - étape 3 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- Le problème des chemins les plus légers : L’inégalité triangulaire peut ne pas être respectée ! L’algorithme de la vague (unique) ne marche plus ! ! ! Il peut y avoir « 2 » ou « 3 » vagues, ou « 4 », . . . Quand est-ce que c’est fini ? ? ? STOP ! ! ! 10 Ceci est à refaire ! 5 15 5 8 23 30 40 45 30 10 5 Etape 0 - étape 1 - étape 2 - étape 3 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- Un cas pathologique : 5 8 5 8 . . . 5 8 X 20 20 20 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- Un cas pathologique : 5 8 5 8 . . . 5 8 X Y 20 20 20 2 vagues 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- Un cas pathologique : 5 8 5 8 . . . 5 8 X Y T 20 20 20 2 vagues 4 vagues dont 2 simultanées 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- Un cas pathologique : 5 8 5 8 . . . 5 8 X Y T Z 20 20 20 2 vagues O ( n / 3 ) vagues ! ! ! 4 vagues dont 2 simultanées 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- La vague Multiplication Floyd-Warshall Q ( | E | ) = O ( | V |^2 ) Q ( | V |^3 * log( | V | ) ) Q ( | V |^3 ) Connexité Q ( | V | * | E | ) = O ( | V |^3 ) Q ( | V |^3 * log( | V | ) ) Q ( | V |^3 ) Plus courts Plus légers N O N ! 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- La vague Multiplication Floyd-Warshall Q ( | E | ) = O ( | V |^2 ) Q ( | V |^3 * log( | V | ) ) Q ( | V |^3 ) Connexité Q ( | V | * | E | ) = O ( | V |^3 ) Q ( | V |^3 * log( | V | ) ) Q ( | V |^3 ) Plus courts Plus légers N O N ! C'est trop pénible ! ! ! 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- La multiplication de matrices : 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- La multiplication de matrices : Nous prenons une matrice avec des « 0 » sur la diagonale, le poids de l’arête lorsqu’elle existe et « +µ » sinon. 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- La multiplication de matrices : Nous prenons une matrice avec des « 0 » sur la diagonale, le poids de l’arête lorsqu’elle existe et « +µ » sinon. Nous effectuons le calcul suivant : M * M’ ( i , j ) = min M ( i , k ) + M’ ( k , j ) k 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- La multiplication de matrices : Nous prenons une matrice avec des « 0 » sur la diagonale, le poids de l’arête lorsqu’elle existe et « +µ » sinon. Nous effectuons le calcul suivant : M * M’ ( i , j ) = min M ( i , k ) + M’ ( k , j ) Nous calculons : M -> M^2 -> M^4 -> . . . k 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- La multiplication de matrices : Nous prenons une matrice avec des « 0 » sur la diagonale, le poids de l’arête lorsqu’elle existe et « +µ » sinon. Nous effectuons le calcul suivant : M * M’ ( i , j ) = min M ( i , k ) + M’ ( k , j ) Nous calculons : M -> M^2 -> M^4 -> . . . Propriété : M^( 2 * i ) = M^i * M^i contient tous les chemins les plus légers de longueur au plus 2 * i (nombre d’arêtes). k 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- La multiplication de matrices : Nous prenons une matrice avec des « 0 » sur la diagonale, le poids de l’arête lorsqu’elle existe et « +µ » sinon. Nous effectuons le calcul suivant : M * M’ ( i , j ) = min M ( i , k ) + M’ ( k , j ) Nous calculons : M -> M^2 -> M^4 -> . . . Propriété : M^( 2 * i ) = M^i * M^i contient tous les chemins les plus légers de longueur au plus 2 * i (nombre d’arêtes). Il suffit de calculer M^k avec k >= | V |-1 à l’aide de O ( log( | V | ) ) élévations au carré ! k 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- La vague Multiplication Floyd-Warshall Q ( | E | ) = O ( | V |^2 ) Q ( | V |^3 * log( | V | ) ) Q ( | V |^3 ) Connexité Q ( | V | * | E | ) = O ( | V |^3 ) Q ( | V |^3 * log( | V | ) ) Q ( | V |^3 ) Plus courts Q ( | V |^3 * log( | V | ) ) Plus légers N O N ! 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- La vague Multiplication Floyd-Warshall Q ( | E | ) = O ( | V |^2 ) Q ( | V |^3 * log( | V | ) ) Q ( | V |^3 ) Connexité Q ( | V | * | E | ) = O ( | V |^3 ) Q ( | V |^3 * log( | V | ) ) Q ( | V |^3 ) Plus courts Q ( | V |^3 * log( | V | ) ) Plus légers N O N ! Le même programme ! 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- (0) M est la matrice d’adjacence avec des « 0 » sur la diagonale, le poids de l’arête si elle existe et des « +µ » sinon. 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- (0) M est la matrice d’adjacence avec des « 0 » sur la diagonale, le poids de l’arête si elle existe et des « +µ » sinon. M de Floyd-Warshall contient par hypothèse les chemins les plus légers construits à l’aide de sommets intermédiaires dans l’ensemble { 0 , . . . , k-1 } . M ( u , v ) = min ( , ) Le chemin le plus léger avec des sommets dans { 1 , . . . , k } : peut, soit, ne pas passer par « k », peut, soit, passer par « k » ! M est la matrice recherchée ! (k-1) (k) (k-1) M ( u , v ) (k-1) (k-1) M ( u , k ) + M ( k , v ) (n) 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- (0) M est la matrice d’adjacence avec des « 0 » sur la diagonale, le poids de l’arête si elle existe et des « +µ » sinon. M de Floyd-Warshall contient par hypothèse les chemins les plus légers construits à l’aide de sommets intermédiaires dans l’ensemble { 0 , . . . , k-1 } . M ( u , v ) = min ( , ) Le chemin le plus léger avec des sommets dans { 1 , . . . , k } : peut, soit, ne pas passer par « k », peut, soit, passer par « k » ! M est la matrice recherchée ! Le reste ne change pas ! (k-1) (k) (k-1) M ( u , v ) (k-1) (k-1) M ( u , k ) + M ( k , v ) (n) 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- La vague Multiplication Floyd-Warshall Q ( | E | ) = O ( | V |^2 ) Q ( | V |^3 * log( | V | ) ) Q ( | V |^3 ) Connexité Q ( | V | * | E | ) = O ( | V |^3 ) Q ( | V |^3 * log( | V | ) ) Q ( | V |^3 ) Plus courts Q ( | V |^3 * log( | V | ) ) Plus légers N O N ! Q ( | V |^3 ) 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- La vague Multiplication Floyd-Warshall Q ( | E | ) = O ( | V |^2 ) Q ( | V |^3 * log( | V | ) ) Q ( | V |^3 ) Connexité Q ( | V | * | E | ) = O ( | V |^3 ) Q ( | V |^3 * log( | V | ) ) Q ( | V |^3 ) Plus courts Q ( | V |^3 * log( | V | ) ) Plus légers N O N ! Q ( | V |^3 ) Le même programme ! 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- OPTIMAUX ! La vague Multiplication Floyd-Warshall Q ( | E | ) = O ( | V |^2 ) Q ( | V |^3 * log( | V | ) ) Q ( | V |^3 ) Connexité Q ( | V | * | E | ) = O ( | V |^3 ) Q ( | V |^3 * log( | V | ) ) Q ( | V |^3 ) Plus courts Q ( | V |^3 * log( | V | ) ) Plus légers N O N ! Q ( | V |^3 ) 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- Et les graphes orientés ? ? ? 21 février 2006 Cours de graphes 2 - Intranet
Tout ce que nous venons de voir reste valable en orienté ! Connexité – chemins les plus légers ----------------------------------------------------------------- Et les graphes orientés ? ? ? Tout ce que nous venons de voir reste valable en orienté ! 21 février 2006 Cours de graphes 2 - Intranet
Tout ce que nous venons de voir reste valable en orienté ! Connexité – chemins les plus légers ----------------------------------------------------------------- Et les graphes orientés ? ? ? à ceci près que la connexité orientée par l’algorithme de la vague nécessite de répéter l’algorithme pour chaque sommet et introduit une complexité en Q ( | V | * | E | ) ! Tout ce que nous venons de voir reste valable en orienté ! 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Pour les graphes orientés ----------------------------------------------------------------- La vague Multiplication Floyd-Warshall Connexité en orienté Q ( | V | * | E | ) = O ( | V |^3 ) Q ( | V |^3 * log( | V | ) ) Q ( | V |^3 ) Q ( | V | * | E | ) = O ( | V |^3 ) Q ( | V |^3 * log( | V | ) ) Q ( | V |^3 ) Plus courts Q ( | V |^3 * log( | V | ) ) Plus légers N O N ! Q ( | V |^3 ) 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Pour les graphes orientés ----------------------------------------------------------------- OPTIMAUX ! La vague Multiplication Floyd-Warshall Connexité en orienté Q ( | V | * | E | ) = O ( | V |^3 ) Q ( | V |^3 * log( | V | ) ) Q ( | V |^3 ) Q ( | V | * | E | ) = O ( | V |^3 ) Q ( | V |^3 * log( | V | ) ) Q ( | V |^3 ) Plus courts Q ( | V |^3 * log( | V | ) ) N O N ! Q ( | V |^3 ) Plus légers 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- Deux questions : La vague construit en temps O ( | E | ) le plus court chemin d’un sommet « u » quelconque vers tous les autres sommets ! 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- Deux questions : La vague construit en temps O ( | E | ) le plus court chemin d’un sommet « u » quelconque vers tous les autres sommets ! Pouvons-nous calculer les chemins les plus légers de « u » vers les autres sommets avec la même complexité ? Oui, c’est l’algorithme de Dijkstra ! 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- Deux questions : La vague construit en temps O ( | E | ) le plus court chemin d’un sommet « u » quelconque vers tous les autres sommets ! Pouvons-nous calculer les chemins les plus légers de « u » vers les autres sommets avec la même complexité ? Oui, c’est l’algorithme de Dijkstra ! Nous avons dû exiger que les poids des arêtes soient positifs ou nuls ! 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- Deux questions : La vague construit en temps O ( | E | ) le plus court chemin d’un sommet « u » quelconque vers tous les autres sommets ! Pouvons-nous calculer les chemins les plus légers de « u » vers les autres sommets avec la même complexité ? Oui, c’est l’algorithme de Dijkstra ! Nous avons dû exiger que les poids des arêtes soient positifs ou nuls ! Pouvons-nous lever cette limitation, quitte à devoir détecter des cycles de poids négatifs ? Oui, c’est l’algorithme de Bellmann-Ford ! 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- Deux questions : La vague construit en temps O ( | E | ) le plus court chemin d’un sommet « u » quelconque vers tous les autres sommets ! Pouvons-nous calculer les chemins les plus légers de « u » vers les autres sommets avec la même complexité ? Oui, c’est l’algorithme de Dijkstra ! Nous avons dû exiger que les poids des arêtes soient positifs ou nuls ! Pouvons-nous lever cette limitation, quitte à devoir détecter des cycles de poids négatifs ? Oui, c’est l’algorithme de Bellmann-Ford ! Le graphe pourra être orienté ou non ! 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – plus courts chemins ----------------------------------------------------------------- ‘ A L G O R I T H M E D E D I J K S T R A 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- L’algorithme de Dijkstra calcule les chemins les plus légers de « s » vers tous les autres sommets ! 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- L’algorithme de Dijkstra calcule les chemins les plus légers de « s » vers tous les autres sommets ! C’est un algorithme de « relaxation », qui est un schéma classique en recherche opérationnelle. 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- L’algorithme de Dijkstra calcule les chemins les plus légers de « s » vers tous les autres sommets ! C’est un algorithme de « relaxation », qui est un schéma classique en recherche opérationnelle. Pour chaque sommet « u » nous connaissons « D ( u ) » qui est un majorant du chemin le plus léger, 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- L’algorithme de Dijkstra calcule les chemins les plus légers de « s » vers tous les autres sommets ! C’est un algorithme de « relaxation », qui est un schéma classique en recherche opérationnelle. Pour chaque sommet « u » nous connaissons « D ( u ) » qui est un majorant du chemin le plus léger, qui correspond au poids d’un chemin de « s » vers « u », 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- L’algorithme de Dijkstra calcule les chemins les plus légers de « s » vers tous les autres sommets ! C’est un algorithme de « relaxation », qui est un schéma classique en recherche opérationnelle. Pour chaque sommet « u » nous connaissons « D ( u ) » qui est un majorant du chemin le plus léger, qui correspond au poids d’un chemin de « s » vers « u », qui vaut initialement « +µ » pour tout « u » différent de « s » 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- L’algorithme de Dijkstra calcule les chemins les plus légers de « s » vers tous les autres sommets ! C’est un algorithme de « relaxation », qui est un schéma classique en recherche opérationnelle. Pour chaque sommet « u » nous connaissons « D ( u ) » qui est un majorant du chemin le plus léger, qui correspond au poids d’un chemin de « s » vers « u », qui vaut initialement « +µ » pour tout « u » différent de « s » et qui sera égal au chemin le plus léger à la fin du calcul. 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- L’algorithme de Dijkstra calcule les chemins les plus légers de « s » vers tous les autres sommets ! C’est un algorithme de « relaxation », qui est un schéma classique en recherche opérationnelle. Pour chaque sommet « u » nous connaissons « D ( u ) » qui est un majorant du chemin le plus léger, qui correspond au poids d’un chemin de « s » vers « u », qui vaut initialement « +µ » pour tout « u » différent de « s » et qui sera égal au chemin le plus léger à la fin du calcul. De plus, pour tout « u » nous connaissons « P ( u ) » qui est le sommet qui précède « u » le long du meilleur chemin courant. 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- L’opération de base « relax ( x , v ) » demande si le meilleur chemin actuel ne peut pas être amélioré si le sommet « x » devient le prédécesseur de « v » ? 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- L’opération de base « relax ( x , v ) » demande si le meilleur chemin actuel ne peut pas être amélioré si le sommet « x » devient le prédécesseur de « v » ? D ( x ) + M ( x , v ) < D ( v ) ? ? ? ? ? 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- L’opération de base « relax ( x , v ) » demande si le meilleur chemin actuel ne peut pas être amélioré si le sommet « x » devient le prédécesseur de « v » ? D ( x ) + M ( x , v ) < D ( v ) ? ? ? ? ? NON RIEN ! 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- L’opération de base « relax ( x , v ) » demande si le meilleur chemin actuel ne peut pas être amélioré si le sommet « x » devient le prédécesseur de « v » ? D ( x ) + M ( x , v ) < D ( v ) ? ? ? ? ? NON OUI RIEN ! D ( v ) <- D ( x ) + M ( x , v ) et P ( v ) <- x 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- L’opération de base « relax ( x , v ) » demande si le meilleur chemin actuel ne peut pas être amélioré si le sommet « x » devient le prédécesseur de « v » ? D ( x ) + M ( x , v ) < D ( v ) ? ? ? ? ? NON OUI RIEN ! D ( v ) <- D ( x ) + M ( x , v ) et P ( v ) <- x Donc, D ( v ) décroît et correspond à un chemin du graphe ! 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- L’opération de relaxation « relax ( x , v ) » : fonction relax ( x , v ) si D ( x ) + M ( x , v ) < D ( v ) D ( v ) <- D ( x ) + M ( x , v ) ; P ( v ) <- x ; fsi 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- pour tout u : D ( u ) <- +µ ; D ( s ) <- 0 ; pour tout u : P ( u ) <- ?? ; P ( s ) <- s ; E <- V ; tantque E <> f { u <- sommet_min_D ( E ) ; E <- E \ { u } ; pour tout v dans E et voisin de u relax ( u , v ) ; } 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- pour tout u : D ( u ) <- +µ ; D ( s ) <- 0 ; pour tout u : P ( u ) <- ?? ; P ( s ) <- s ; E <- V ; tantque E <> f { u <- sommet_min_D ( E ) ; E <- E \ { u } ; pour tout v dans E et voisin de u relax ( u , v ) ; } Nous initialisons les distances ! 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- pour tout u : D ( u ) <- +µ ; D ( s ) <- 0 ; pour tout u : P ( u ) <- ?? ; P ( s ) <- s ; E <- V ; tantque E <> f { u <- sommet_min_D ( E ) ; E <- E \ { u } ; pour tout v dans E et voisin de u relax ( u , v ) ; } Nous initialisons les distances ! Nous initialisons les prédécesseurs ! 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- pour tout u : D ( u ) <- +µ ; D ( s ) <- 0 ; pour tout u : P ( u ) <- ?? ; P ( s ) <- s ; E <- V ; tantque E <> f { u <- sommet_min_D ( E ) ; E <- E \ { u } ; pour tout v dans E et voisin de u relax ( u , v ) ; } Nous initialisons les distances ! Nous initialisons les prédécesseurs ! Nous initialisons les sommets à parcourir ! 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- pour tout u : D ( u ) <- +µ ; D ( s ) <- 0 ; pour tout u : P ( u ) <- ?? ; P ( s ) <- s ; E <- V ; tantque E <> f { u <- sommet_min_D ( E ) ; E <- E \ { u } ; pour tout v dans E et voisin de u relax ( u , v ) ; } Nous initialisons les distances ! Nous initialisons les prédécesseurs ! Nous initialisons les sommets à parcourir ! Tant qu’il reste un sommet à traiter . . . 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- pour tout u : D ( u ) <- +µ ; D ( s ) <- 0 ; pour tout u : P ( u ) <- ?? ; P ( s ) <- s ; E <- V ; tantque E <> f { u <- sommet_min_D ( E ) ; E <- E \ { u } ; pour tout v dans E et voisin de u relax ( u , v ) ; } Nous initialisons les distances ! Nous initialisons les prédécesseurs ! Nous initialisons les sommets à parcourir ! Tant qu’il reste un sommet à traiter . . . Nous retirons le sommet « u » dont « D ( u ) » est minimal ! 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- pour tout u : D ( u ) <- +µ ; D ( s ) <- 0 ; pour tout u : P ( u ) <- ?? ; P ( s ) <- s ; E <- V ; tantque E <> f { u <- sommet_min_D ( E ) ; E <- E \ { u } ; pour tout v dans E et voisin de u relax ( u , v ) ; } Nous initialisons les distances ! Nous initialisons les prédécesseurs ! Nous initialisons les sommets à parcourir ! Tant qu’il reste un sommet à traiter . . . Nous retirons le sommet « u » dont « D ( u ) » est minimal ! Nous relaxons ses voisins qui ne sont pas encore définitifs ! ! ! 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- 10 a 5 c 8 s b 20 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- 10 a 5 c 8 s b 20 E s a b c D 0 µ µ µ P s ? ? ? 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- 10 a 5 c 8 s b 20 E s a b c D 0 µ µ µ P s ? ? ? / E <- E \ { s } 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- 10 a 5 c 8 s b 20 E s a b c D 0 µ µ µ P s ? ? ? / relax ( s , a ) E <- E \ { s } relax ( s , b ) 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- 10 a 5 c 8 s b 20 E s a b c D 0 µ µ µ P s ? ? ? relax ( s , a ) E <- E \ { s } relax ( s , b ) E s a b c D 0 10 20 µ P s s s ? / 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- 10 a 5 c 8 s b 20 E s a b c D 0 µ µ µ P s ? ? ? relax ( s , a ) E <- E \ { s } relax ( s , b ) / E s a b c D 0 10 20 µ P s s s ? / E <- E \ { a } 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- 10 a 5 c 8 s b 20 E s a b c D 0 µ µ µ P s ? ? ? relax ( s , a ) E <- E \ { s } relax ( s , b ) E s a b c D 0 10 20 µ P s s s ? / / E <- E \ { a } relax ( a , b ) 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- 10 a 5 c 8 s b 20 E s a b c D 0 µ µ µ P s ? ? ? relax ( s , a ) E <- E \ { s } relax ( s , b ) E s a b c D 0 10 20 µ P s s s ? / / E <- E \ { a } relax ( a , b ) / E s a b c D 0 10 15 µ P s s a ? / 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- 10 a 5 c 8 s b 20 E s a b c D 0 µ µ µ P s ? ? ? relax ( s , a ) E <- E \ { s } relax ( s , b ) / / E s a b c D 0 10 20 µ P s s s ? E <- E \ { a } relax ( a , b ) E s a b c D 0 10 15 µ P s s a ? / / / E <- E \ { b } 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- 10 a 5 c 8 s b 20 E s a b c D 0 µ µ µ P s ? ? ? relax ( s , a ) E <- E \ { s } relax ( s , b ) / / E s a b c D 0 10 20 µ P s s s ? E <- E \ { a } relax ( a , b ) E s a b c D 0 10 15 23 P s s a b / / / E <- E \ { b } relax ( b , c ) 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- 10 a 5 c 8 s b 20 E s a b c D 0 µ µ µ P s ? ? ? relax ( s , a ) E <- E \ { s } relax ( s , b ) / / E s a b c D 0 10 20 µ P s s s ? E <- E \ { a } relax ( a , b ) E s a b c D 0 10 15 23 P s s a b / / / / E <- E \ { b } relax ( b , c ) E <- E \ { c } 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- Correction de l’algorithme, par absurde ! 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- Correction de l’algorithme, par absurde ! Soit « u » le premier sommet extrait avec « D ( u ) > d ( s , u ) » ! 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- Correction de l’algorithme, par absurde ! Soit « u » le premier sommet extrait avec « D ( u ) > d ( s , u ) » ! Ce serait la première erreur de l'algorithme ! 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- Correction de l’algorithme, par absurde ! Soit « u » le premier sommet extrait avec « D ( u ) > d ( s , u ) » ! Ce serait la première erreur de l'algorithme ! Nous allons montrer qu'elle n'existe pas ! ! ! 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- Correction de l’algorithme, par absurde ! Soit « u » le premier sommet extrait avec « D ( u ) > d ( s , u ) » ! Soit le chemin de plus léger de « s » vers « u » : s . . . x y . . . u 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- Correction de l’algorithme, par absurde ! Soit « u » le premier sommet extrait avec « D ( u ) > d ( s , u ) » ! Soit le chemin de plus léger de « s » vers « u » : s . . . x y . . . u Pas dans E ! 21 février 2006 Cours de graphes 2 - Intranet
Le raisonnement reste le même si seul le sommet "s" a été extrait ! Connexité – chemins les plus légers ----------------------------------------------------------------- Correction de l’algorithme, par absurde ! Soit « u » le premier sommet extrait avec « D ( u ) > d ( s , u ) » ! Soit le chemin de plus léger de « s » vers « u » : s . . . x y . . . u Pas dans E ! Le raisonnement reste le même si seul le sommet "s" a été extrait ! 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- Correction de l’algorithme, par absurde ! Soit « u » le premier sommet extrait avec « D ( u ) > d ( s , u ) » ! Soit le chemin de plus léger de « s » vers « u » : s . . . x y . . . u Pas dans E ! Dans E ! 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- Correction de l’algorithme, par absurde ! Soit « u » le premier sommet extrait avec « D ( u ) > d ( s , u ) » ! Soit le chemin de plus léger de « s » vers « u » : s . . . x y . . . u Pas dans E ! Dans E ! Dans E ! 21 février 2006 Cours de graphes 2 - Intranet
Le raisonnement reste le même Connexité – chemins les plus légers ----------------------------------------------------------------- Correction de l’algorithme, par absurde ! Soit « u » le premier sommet extrait avec « D ( u ) > d ( s , u ) » ! Soit le chemin de plus léger de « s » vers « u » : s . . . x y . . . u Pas dans E ! Dans E ! Dans E ! Le raisonnement reste le même si les sommets "y" et "u" sont confondus ! 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- Correction de l’algorithme, par absurde ! Soit « u » le premier sommet extrait avec « D ( u ) > d ( s , u ) » ! Soit le chemin de plus léger de « s » vers « u » : s . . . x y . . . u Pas dans E ! Dans E ! Dans E ! D ( u ) <= D ( y ) car « u » va être extrait ! 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- Correction de l’algorithme, par absurde ! Soit « u » le premier sommet extrait avec « D ( u ) > d ( s , u ) » ! Soit le chemin de plus léger de « s » vers « u » : s . . . x y . . . u Pas dans E ! Dans E ! Dans E ! D ( x ) = d ( s , x ) , car il n’ y a pas eu d’erreur avant ! D ( u ) <= D ( y ) car « u » va être extrait ! 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- Correction de l’algorithme, par absurde ! Soit « u » le premier sommet extrait avec « D ( u ) > d ( s , u ) » ! Soit le chemin de plus léger de « s » vers « u » : s . . . x y . . . u Pas dans E ! Dans E ! Dans E ! D ( x ) = d ( s , x ) , car il n’ y a pas eu d’erreur avant ! D ( u ) <= D ( y ) car « u » va être extrait ! D ( y ) = relax ( x , y ) = d ( s , y ) ! ! ! ! ! 21 février 2006 Cours de graphes 2 - Intranet
Sans le savoir, nous avons déjà la bonne valeur pour D ( y ) ! Connexité – chemins les plus légers ----------------------------------------------------------------- Correction de l’algorithme, par absurde ! Soit « u » le premier sommet extrait avec « D ( u ) > d ( s , u ) » ! Soit le chemin de plus léger de « s » vers « u » : s . . . x y . . . u Pas dans E ! Dans E ! Dans E ! D ( x ) = d ( s , x ) , car il n’ y a pas eu d’erreur avant ! D ( u ) <= D ( y ) car « u » va être extrait ! D ( y ) = relax ( x , y ) = d ( s , y ) ! ! ! ! ! Sans le savoir, nous avons déjà la bonne valeur pour D ( y ) ! 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- Correction de l’algorithme, par absurde ! Soit « u » le premier sommet extrait avec « D ( u ) > d ( s , u ) » ! Soit le chemin de plus léger de « s » vers « u » : Poids positifs ou nuls ! s . . . x y . . . u Pas dans E ! Dans E ! Dans E ! D ( x ) = d ( s , x ) , car il n’ y a pas eu d’erreur avant ! D ( u ) <= D ( y ) car « u » va être extrait ! D ( y ) = relax ( x , y ) = d ( s , y ) ! ! ! ! ! D ( y ) = d ( s , y ) <= d ( s , u ) <= D ( u ) 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- Correction de l’algorithme, par absurde ! Soit « u » le premier sommet extrait avec « D ( u ) > d ( s , u ) » ! Soit le chemin de plus léger de « s » vers « u » : Poids positifs ou nuls ! s . . . x y . . . u Pas dans E ! Dans E ! Dans E ! D ( y ) = d ( s , y ) = D ( u ) = d ( s , u ) D ( x ) = d ( s , x ) , car il n’ y a pas eu d’erreur avant ! D ( u ) <= D ( y ) car « u » va être extrait ! D ( y ) = relax ( x , y ) = d ( s , y ) ! ! ! ! ! D ( y ) = d ( s , y ) <= d ( s , u ) <= D ( u ) 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- Contradiction ! ! ! Correction de l’algorithme, par absurde ! Soit « u » le premier sommet extrait avec « D ( u ) > d ( s , u ) » ! Soit le chemin de plus léger de « s » vers « u » : Poids positifs ou nuls ! s . . . x y . . . u Pas dans E ! Dans E ! Dans E ! D ( y ) = d ( s , y ) = D ( u ) = d ( s , u ) D ( x ) = d ( s , x ) , car il n’ y a pas eu d’erreur avant ! D ( u ) <= D ( y ) car « u » va être extrait ! D ( y ) = relax ( x , y ) = d ( s , y ) ! ! ! ! ! D ( y ) = d ( s , y ) <= d ( s , u ) <= D ( u ) 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- Dijkstra calcule les chemins les plus légers d’un sommet vers tous les autres (one-to-all shortest pairs). 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- Dijkstra calcule les chemins les plus légers d’un sommet vers tous les autres (one-to-all shortest pairs). Tout sommet « u » est extrait avec une valeur « D ( u ) » qui est bien égale au chemin le plus léger et dont le poids est « d ( s , u ) » ! 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- Dijkstra calcule les chemins les plus légers d’un sommet vers tous les autres (one-to-all shortest pairs). Tout sommet « u » est extrait avec une valeur « D ( u ) » qui est bien égale au chemin le plus léger et dont le poids est « d ( s , u ) » ! La complexité vaut Q ( | V | + | E | ) , car nous parcourons, exactement une fois, tous les sommets et toutes les arêtes ! 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- Dijkstra calcule les chemins les plus légers d’un sommet vers tous les autres (one-to-all shortest pairs). Tout sommet « u » est extrait avec une valeur « D ( u ) » qui est bien égale au chemin le plus léger et dont le poids est « d ( s , u ) » ! La complexité vaut Q ( | V | + | E | ) , car nous parcourons, exactement une fois, tous les sommets et toutes les arêtes ! Et Q ( | V | + | E | ) = Q ( | E | ) car le graphe est connexe ! 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- Dijkstra calcule les chemins les plus légers d’un sommet vers tous les autres (one-to-all shortest pairs). Tout sommet « u » est extrait avec une valeur « D ( u ) » qui est bien égale au chemin le plus léger et dont le poids est « d ( s , u ) » ! La complexité vaut Q ( | V | + | E | ) , car nous parcourons, exactement une fois, tous les sommets et toutes les arêtes ! Et Q ( | V | + | E | ) = Q ( | E | ) car le graphe est connexe ! Attention, tout ceci est correct uniquement si les poids sont positifs ou nuls ! ! ! 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – plus courts chemins ----------------------------------------------------------------- ‘ A L G O R I T H M E D E B E L L M A N N - F O R D 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- Bellmann-Ford calcule les chemins les plus légers pour toutes les paires de sommets (all-to-all shortest pairs). 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- Bellmann-Ford calcule les chemins les plus légers pour toutes les paires de sommets (all-to-all shortest pairs). Les poids peuvent être négatifs, car il indique au passage la présence éventuelle de cycles de poids négatif. 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- Bellmann-Ford calcule les chemins les plus légers pour toutes les paires de sommets (all-to-all shortest pairs). Les poids peuvent être négatifs, car il indique au passage la présence éventuelle de cycles de poids négatif. La complexité est en O ( | V |^3 ) , comme Floyd-Warshall ! 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- Bellmann-Ford calcule les chemins les plus légers pour toutes les paires de sommets (all-to-all shortest pairs). Les poids peuvent être négatifs, car il indique au passage la présence éventuelle de cycles de poids négatif. La complexité est en O ( | V |^3 ) , comme Floyd-Warshall ! BF utilise la même relaxation que Dijkstra, mais ne considère jamais qu’une valeur d’un sommet est définitive (et que le sommet peut être retiré de l’ensemble « E »). 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- Bellmann-Ford calcule les chemins les plus légers pour toutes les paires de sommets (all-to-all shortest pairs). Les poids peuvent être négatifs, car il indique au passage la présence éventuelle de cycles de poids négatif. La complexité est en O ( | V |^3 ) , comme Floyd-Warshall ! BF utilise la même relaxation que Dijkstra, mais ne considère jamais qu’une valeur d’un sommet est définitive (et que le sommet peut être retiré de l’ensemble « E »). Nous continuons tant qu’il y a des poids peuvent être réduits et que . . . (nous verrons plus tard) ! 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- L’opération de relaxation « relax ( x , v ) » dit si, oui ou non, le poids du sommet « v » est resté stable. fonction relax ( x , v ) si D ( x ) + M ( x , v ) < D ( v ) D ( v ) <- D ( x ) + M ( x , v ) ; P ( v ) <- x ; rendre ( FAUX ) ; sinon rendre ( VRAI ) ; 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- L’opération de relaxation « relax ( x , v ) » dit si, oui ou non, le poids du sommet « v » est resté stable. fonction relax ( x , v ) si D ( x ) + M ( x , v ) < D ( v ) D ( v ) <- D ( x ) + M ( x , v ) ; P ( v ) <- x ; rendre ( FAUX ) ; sinon rendre ( VRAI ) ; 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- Le code presque correct : pour tout u : D ( u ) <- +µ ; D ( s ) <- 0 ; pour tout u : P ( u ) <- ?? ; P ( s ) <- s ; repeter stable <- VRAI ; pour tout u différent de s pour tout v qui est voisin de u stable <- stable & relax ( u , v ) ; jusqua stable = VRAI ; 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- Le code presque correct : pour tout u : D ( u ) <- +µ ; D ( s ) <- 0 ; pour tout u : P ( u ) <- ?? ; P ( s ) <- s ; repeter stable <- VRAI ; pour tout u différent de s pour tout v qui est voisin de u stable <- stable & relax ( u , v ) ; jusqua stable = VRAI ; La même initialisation ! 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- Le code presque correct : pour tout u : D ( u ) <- +µ ; D ( s ) <- 0 ; pour tout u : P ( u ) <- ?? ; P ( s ) <- s ; repeter stable <- VRAI ; pour tout u différent de s pour tout v qui est voisin de u stable <- stable & relax ( u , v ) ; jusqua stable = VRAI ; La même initialisation ! Nous relaxons tout ! ! ! 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- Le code presque correct : pour tout u : D ( u ) <- +µ ; D ( s ) <- 0 ; pour tout u : P ( u ) <- ?? ; P ( s ) <- s ; repeter stable <- VRAI ; pour tout u différent de s pour tout v qui est voisin de u stable <- stable & relax ( u , v ) ; jusqua stable = VRAI ; La même initialisation ! Nous nous arrêtons lorsqu’aucun poids n’a pu être réduit au dernier passage ! Nous relaxons tout ! ! ! 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- Calculer les plus courts chemins ou les chemins les plus légers avec des poids positifs revient à ne considérer que des chemins simples ! ! ! ! ! ! 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- Calculer les plus courts chemins ou les chemins les plus légers avec des poids positifs revient à ne considérer que des chemins simples ! ! ! ! ! ! L’algorithme que nous avons construit s’arrête dans ces cas ! 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- Calculer les plus courts chemins ou les chemins les plus légers avec des poids positifs revient à ne considérer que des chemins simples ! ! ! ! ! ! L’algorithme que nous avons construit s’arrête dans ces cas ! S’il y a des cycles de poids négatifs : le chemin le plus léger ne sera plus un chemin simple, l’algorithme va boucler ! 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- Calculer les plus courts chemins ou les chemins les plus légers avec des poids positifs revient à ne considérer que des chemins simples ! ! ! ! ! ! L’algorithme que nous avons construit s’arrête dans ces cas ! S’il y a des cycles de poids négatifs : le chemin le plus léger ne sera plus un chemin simple, l’algorithme va boucler ! Il faut un garde-fou : Pour « n » sommets, le chemin simple le plus long ne dépasse pas « n – 1 » étapes. 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- Un code correct : . . . k <- 0 ; repeter stable <- VRAI ; pour tout u différent de s pour tout v qui est voisin de u stable <- stable & relax ( u , v ) ; k <- k + 1 ; jusqua stable = VRAI ou k > n – 1 si k > n – 1 Il y a des cycles de poids négatifs ; 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- Un code correct : Nous comptons et limitons le nombre de tours de boucle ! . . . k <- 0 ; repeter stable <- VRAI ; pour tout u différent de s pour tout v qui est voisin de u stable <- stable & relax ( u , v ) ; k <- k + 1 ; jusqua stable = VRAI ou k > n – 1 si k > n – 1 Il y a des cycles de poids négatifs ; 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- Un code correct : Nous comptons et limitons le nombre de tours de boucle ! . . . k <- 0 ; repeter stable <- VRAI ; pour tout u différent de s pour tout v qui est voisin de u stable <- stable & relax ( u , v ) ; k <- k + 1 ; jusqua stable = VRAI ou k > n – 1 si k > n – 1 Il y a des cycles de poids négatifs ; Si « k » atteint « n » c’est qu’il y a des boucles de poids négatifs ! 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- La preuve de correction : La longueur d’aucun chemin simple n’excède « | V | - 1 ». 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- La preuve de correction : La longueur d’aucun chemin simple n’excède « | V | - 1 ». Soit le chemin simple le plus léger de « s » vers « u » : avec f <= | V | - 1 et u = a . . . s a a 1 f f 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- La preuve de correction : La longueur d’aucun chemin simple n’excède « | V | - 1 ». Soit le chemin simple le plus léger de « s » vers « u » : avec f <= | V | - 1 et u = a Après le i tour de boucle : D ( a ) = d ( s , a ) . . . . s a a 1 f f e i i 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- La preuve de correction : La longueur d’aucun chemin simple n’excède « | V | - 1 ». Soit le chemin simple le plus léger de « s » vers « u » : avec f <= | V | - 1 et u = a Après le i tour de boucle : D ( a ) = d ( s , a ) . Trivial, pour i = 0 , c’est-à-dire pour « s » ! . . . s a a 1 f f e i i 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- La preuve de correction : La longueur d’aucun chemin simple n’excède « | V | - 1 ». Soit le chemin simple le plus léger de « s » vers « u » : avec f <= | V | - 1 et u = a Après le i tour de boucle : D ( a ) = d ( s , a ) . Trivial, pour i = 0 , c’est-à-dire pour « s » ! Si c’est vrai pour « i », le i+1 tour calcule : D ( a ) = relax ( a , a ) = d ( s , a ) . . . s a a 1 f f e i i e i+1 i i+1 i+1 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- La preuve de correction : La longueur d’aucun chemin simple n’excède « | V | - 1 ». Soit le chemin simple le plus léger de « s » vers « u » : avec f <= | V | - 1 et u = a Après le i tour de boucle : D ( a ) = d ( s , a ) . Trivial, pour i = 0 , c’est-à-dire pour « s » ! Si c’est vrai pour « i », le i+1 tour calcule : D ( a ) = relax ( a , a ) = d ( s , a ) Après le tour de boucle « f » : D ( u ) = D ( a ) = d ( s , a ) . . . s a a 1 f f e i i e i+1 i i+1 i+1 f f 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- La preuve de correction : La longueur d’aucun chemin simple n’excède « | V | - 1 ». Soit le chemin simple le plus léger de « s » vers « u » : avec f <= | V | - 1 et u = a Après le i tour de boucle : D ( a ) = d ( s , a ) . Trivial, pour i = 0 , c’est-à-dire pour « s » ! Si c’est vrai pour « i », le i+1 tour calcule : D ( a ) = relax ( a , a ) = d ( s , a ) Après le tour de boucle « f » : D ( u ) = D ( a ) = d ( s , a ) . . . s a a 1 f f e i i e i+1 i i+1 i+1 f f 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- La preuve de correction (suite) : Au bout de « | V | - 1 » itérations nous avons tous les chemins simples les plus légers ! 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- La preuve de correction (suite) : Au bout de « | V | - 1 » itérations nous avons tous les chemins simples les plus légers ! S’il y a encore des modifications de poids au-delà de cette itération, c’est qu’il existe des cycles de poids négatifs ! 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- La preuve de correction (suite) : Au bout de « | V | - 1 » itérations nous avons tous les chemins simples les plus légers ! S’il y a encore des modifications de poids au-delà de cette itération, c’est qu’il existe des cycles de poids négatifs ! La complexité : en présence de cycles de poids négatifs : Q ( | V | * | E | ) 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- La preuve de correction (suite) : Au bout de « | V | - 1 » itérations nous avons tous les chemins simples les plus légers ! S’il y a encore des modifications de poids au-delà de cette itération, c’est qu’il existe des cycles de poids négatifs ! La complexité : en présence de cycles de poids négatifs : Q ( | V | * | E | ) en l’absence de cycles de poids négatifs : Q ( D ( G ) * | E | ) 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet Connexité – chemins les plus légers ----------------------------------------------------------------- La preuve de correction (suite) : Au bout de « | V | - 1 » itérations nous avons tous les chemins simples les plus légers ! S’il y a encore des modifications de poids au-delà de cette itération, c’est qu’il existe des cycles de poids négatifs ! La complexité : en présence de cycles de poids négatifs : Q ( | V | * | E | ) en l’absence de cycles de poids négatifs : Q ( D ( G ) * | E | ) Le diamètre D ( G ) est la longueur du plus long chemin simple ! 21 février 2006 Cours de graphes 2 - Intranet
Synthèse ----------------------------------------------------------------- Les plus courts chemins, les chemins les plus légers : à l’aide de la vague, à l’aide de la multiplication, à l’aide de Floyd-Warshall. Algorithmes de Dijkstra et Bellmann-Ford. 21 février 2006 Cours de graphes 2 - Intranet
Cours de graphes 2 - Intranet m E r C i e T O n N e J o U r N é E ! ! ! ‘ o U b L i E z P a S d E p R é P a R e R v O s T D ! ! ! 21 février 2006 Cours de graphes 2 - Intranet