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 multiplication, à laide de Floyd-Warshall. Algorithmes de Dijkstra et Bellmann-Ford.
21 février 2006Cours de graphes 2 - Intranet2 Les grandes lignes du cours Définitions de base Définitions de base Connexité Connexité Les plus courts chemins Les plus courts chemins Dijkstra et Bellmann-Ford Dijkstra et Bellmann-Ford Arbres Arbres Arbres de recouvrement minimaux Arbres de recouvrement minimaux Problèmes de flots Problèmes de flots Coloriage de graphes Coloriage de graphes Couplage Couplage Chemins dEuler et de Hamilton Chemins dEuler et de Hamilton Problèmes NP-complets Problèmes NP-complets
21 février 2006Cours de graphes 2 - Intranet3 Connexité – plus courts chemins Connexité Plus courts Plus légers La vague MultiplicationFloyd-Warshall ( | E | ) = ( | E | ) = O ( | V |^2 ) O ( | V |^2 ) ( | V |^3 * ( | V |^3 * log( | V | ) ) log( | V | ) ) ( | V |^3 ) ( | V |^3 )
21 février 2006Cours de graphes 2 - Intranet4 Connexité – plus courts chemins Sur un graphe non orienté, nous allons calculer :Sur un graphe non orienté, nous allons calculer : –les composantes connexes ! Sur une composante connexe, nous allons calculer :Sur une composante connexe, nous allons calculer : –les plus courts chemins ! Nous rajoutons une pondération strictement positive et nous allons calculer :Nous rajoutons une pondération strictement positive et nous allons calculer : –les chemins les plus légers !
21 février 2006Cours de graphes 2 - Intranet5 Connexité – plus courts chemins La notion de distance est donné par le nombre darêtes quil faut traverser au moins !La notion de distance est donné par le nombre darêtes quil faut traverser au moins ! Lalgorithme de la « vague » :Lalgorithme 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 ( | E | ) = O ( | V |^2 ), nous connaissons les plus courts chemins du sommet « u » vers les autres !En temps ( | E | ) = O ( | V |^2 ), nous connaissons les plus courts chemins du sommet « u » vers les autres !
21 février 2006Cours de graphes 2 - Intranet6 Connexité – plus courts chemins u Etape 0 - étape 1 - étape 2 - étape 3 Touché une seconde fois ! Touché deux fois !
21 février 2006Cours de graphes 2 - Intranet7 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 ) !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 depuisIl faut répéter la vague depuis chaque sommet « u » du graphe ! chaque sommet « u » du graphe ! En temps ( | V | * | E | ) = O ( | V |^3 ), nous connaissons les plus courts chemins de tout sommet à tout sommet !En temps ( | V | * | E | ) = O ( | V |^3 ), nous connaissons les plus courts chemins de tout sommet à tout sommet ! uv w u v w
21 février 2006Cours de graphes 2 - Intranet8 Connexité – plus courts chemins Connexité Plus courts Plus légers La vague MultiplicationFloyd-Warshall ( | E | ) = ( | E | ) = O ( | V |^2 ) O ( | V |^2 ) ( | V |^3 * ( | V |^3 * log( | V | ) ) log( | V | ) ) ( | V |^3 ) ( | V |^3 ) ( | V | * | E | ) = ( | V | * | E | ) = O ( | V |^3 ) O ( | V |^3 )
21 février 2006Cours de graphes 2 - Intranet9 Connexité – plus courts chemins La multiplication de matrices :La multiplication de matrices : –Nous prenons une matrice avec des « 0 » sur la diagonale, –des « 1 » lorsque larête existe et des « » sinon –des « 1 » lorsque larête existe et des « » sinon Nous effectuons le calcul suivant :Nous effectuons le calcul suivant : M * M ( i, j ) = min M ( i, k ) + M ( k, j ) M * M ( i, j ) = min M ( i, k ) + M ( k, j ) Nous calculons : M - > M^2 - > M^4 - >...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, cest-à-dire quelle contient des « + » et des valeurs dans { 0,..., 2 * i }.Propriété : M^( 2 * i ) = M^i * M^i contient tous les plus courts chemins de longueur au plus 2 * i, cest-à-dire quelle contient des « + » et des valeurs dans { 0,..., 2 * i }. Il suffit de calculer M^k avec k >= | V | - 1 à laide de O ( log( | V | ) ) élévations au carré !Il suffit de calculer M^k avec k >= | V | - 1 à laide de O ( log( | V | ) ) élévations au carré ! k
21 février 2006Cours de graphes 2 - Intranet10 Connexité – plus courts chemins Preuve de la propriété :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 dinduction : M^i contient tous les... M^( 2 * i ) ( u, v ) <> + M^( 2 * i ) ( u, v ) <> + min_k M^i ( u, k ) + M^i ( k, v ) <> + min_k M^i ( u, k ) + M^i ( k, v ) <> + w tel que M^i ( u, w ) + M^i ( w, v ) <> + et de w tel que M^i ( u, w ) + M^i ( w, v ) <> + et de valeur minimale. valeur minimale. M^i ( u, w ) <> + et M^i ( w, v ) <> + M^i ( u, w ) <> + et M^i ( w, v ) <> + Les plus courts chemins de ( u ; w ) et de ( w ; v ) sont Les plus courts chemins de ( u ; w ) et de ( w ; v ) sont de longueur au plus i. de longueur au plus i. Le plus court chemin de « u » vers « v » est de Le plus court chemin de « u » vers « v » est de longueur au plus 2 * i et cest ( u ; w ; v ). longueur au plus 2 * i et cest ( u ; w ; v ).
21 février 2006Cours de graphes 2 - Intranet11 Connexité – plus courts chemins Preuve de la propriété :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 dinduction : M^i contient tous les... M^( 2 * i ) ( u, v ) <> + M^( 2 * i ) ( u, v ) <> + min_k M^i ( u, k ) + M^i ( k, v ) <> + min_k M^i ( u, k ) + M^i ( k, v ) <> + w tel que M^i ( u, w ) + M^i ( w, v ) <> + et de w tel que M^i ( u, w ) + M^i ( w, v ) <> + et de valeur minimale. valeur minimale. M^i ( u, w ) <> + et M^i ( w, v ) <> + M^i ( u, w ) <> + et M^i ( w, v ) <> + Les plus courts chemins de ( u ; w ) et de ( w ; v ) sont Les plus courts chemins de ( u ; w ) et de ( w ; v ) sont de longueur au plus i. de longueur au plus i. Le plus court chemin de « u » vers « v » est de Le plus court chemin de « u » vers « v » est de longueur au plus 2 * i et cest ( u ; w ; v ). longueur au plus 2 * i et cest ( u ; w ; v ).
21 février 2006Cours de graphes 2 - Intranet12 Connexité – plus courts chemins Connexité Plus courts Plus légers La vague MultiplicationFloyd-Warshall ( | E | ) = ( | E | ) = O ( | V |^2 ) O ( | V |^2 ) ( | V |^3 * ( | V |^3 * log( | V | ) ) log( | V | ) ) ( | V |^3 ) ( | V |^3 ) ( | V | * | E | ) = ( | V | * | E | ) = O ( | V |^3 ) O ( | V |^3 ) ( | V |^3 * ( | V |^3 * log( | V | ) ) log( | V | ) )
21 février 2006Cours de graphes 2 - Intranet13 Connexité – plus courts chemins M est la matrice dadjacence avec des « 0 » sur la diagonale, des « 1 » lorsque larête existe et des « » sinonM est la matrice dadjacence avec des « 0 » sur la diagonale, des « 1 » lorsque larête existe et des « » sinon M de Floyd-Warshall contient par hypothèse les plus courts chemins construits à laide de sommets intermédiaires dans lensemble { 0,..., k-1 }.M de Floyd-Warshall contient par hypothèse les plus courts chemins construits à laide de sommets intermédiaires dans lensemble { 0,..., k-1 }. M ( u, v ) = min (, M ( u, v ) = min (, ) Le plus court chemin avec des sommets dans { 1,..., k } :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 !M est la matrice recherchée ! (0) M ( u, k ) + M ( k, v ) (k - 1) M ( u, v ) (k - 1) (n) (k) (k-1)
21 février 2006Cours de graphes 2 - Intranet14 Connexité – plus courts chemins Connexité Plus courts Plus légers La vague MultiplicationFloyd-Warshall ( | E | ) = ( | E | ) = O ( | V |^2 ) O ( | V |^2 ) ( | V |^3 * ( | V |^3 * log( | V | ) ) log( | V | ) ) ( | V |^3 ) ( | V |^3 ) ( | V | * | E | ) = ( | V | * | E | ) = O ( | V |^3 ) O ( | V |^3 ) ( | V |^3 * ( | V |^3 * log( | V | ) ) log( | V | ) ) ( | V |^3 ) ( | V |^3 )
21 février 2006Cours de graphes 2 - Intranet15 Sur un graphe non orienté, nous allons calculer :Sur un graphe non orienté, nous allons calculer : –les composantes connexes ! Sur une composante connexe, nous allons calculer :Sur une composante connexe, nous allons calculer : –les plus courts chemins ! Nous rajoutons une pondération strictement positive et nous allons calculer :Nous rajoutons une pondération strictement positive et nous allons calculer : –les chemins les plus légers ! Connexité – chemins les plus légers
21 février 2006Cours de graphes 2 - Intranet16 Nous rajoutons une pondération strictement positive et nous allons calculer :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.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. Connexité – chemins les plus légers Cycle de poids négatif !
21 février 2006Cours de graphes 2 - Intranet17 Connexité – chemins les plus légers Le problème des chemins les plus légers :Le problème des chemins les plus légers : –Linégalité triangulaire peut ne pas être respectée ! Lalgorithme de la vague (unique) ne marche plus ! ! !Lalgorithme de la vague (unique) ne marche plus ! ! ! Etape 0 - étape 1 - étape 2 - étape 3 Une vague qui se brise. Nous lignorons ! ! !
21 février 2006Cours de graphes 2 - Intranet18 Connexité – chemins les plus légers Le problème des chemins les plus légers :Le problème des chemins les plus légers : –Linégalité triangulaire peut ne pas être respectée ! Lalgorithme de la vague (unique) ne marche plus ! ! !Lalgorithme de la vague (unique) ne marche plus ! ! ! Etape 0 - étape 1 - étape 2 - étape 3 Elle nexiste plus !
21 février 2006Cours de graphes 2 - Intranet19 Connexité – chemins les plus légers Le problème des chemins les plus légers :Le problème des chemins les plus légers : –Linégalité triangulaire peut ne pas être respectée ! Lalgorithme de la vague (unique) ne marche plus ! ! !Lalgorithme de la vague (unique) ne marche plus ! ! ! Il peut y avoir « 2 » ou « 3 » vagues, ou « 4 »,...Il peut y avoir « 2 » ou « 3 » vagues, ou « 4 »,... Quand est-ce que cest fini ? ? ?Quand est-ce que cest fini ? ? ? Etape 0 - étape 1 - étape 2 - étape 3 23
21 février 2006Cours de graphes 2 - Intranet20 Connexité – chemins les plus légers Un cas pathologique :Un cas pathologique : Y 2 vagues T 4 vagues dont 2 simultanées O ( n / 3 ) vagues ! ! ! XZ
21 février 2006Cours de graphes 2 - Intranet21 Connexité Plus courts Plus légers La vague MultiplicationFloyd-Warshall ( | E | ) = ( | E | ) = O ( | V |^2 ) O ( | V |^2 ) ( | V |^3 * ( | V |^3 * log( | V | ) ) log( | V | ) ) ( | V |^3 ) ( | V |^3 ) ( | V | * | E | ) = ( | V | * | E | ) = O ( | V |^3 ) O ( | V |^3 ) ( | V |^3 * ( | V |^3 * log( | V | ) ) log( | V | ) ) ( | V |^3 ) ( | V |^3 ) N O N ! Connexité – chemins les plus légers
21 février 2006Cours de graphes 2 - Intranet22 La multiplication de matrices :La multiplication de matrices : –Nous prenons une matrice avec des « 0 » sur la diagonale, –le poids de larête lorsquelle existe et « » sinon –le poids de larête lorsquelle existe et « » sinon Nous effectuons le calcul suivant :Nous effectuons le calcul suivant : M * M ( i, j ) = min M ( i, k ) + M ( k, j ) M * M ( i, j ) = min M ( i, k ) + M ( k, j ) Nous calculons : M - > M^2 - > M^4 - >...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 darêtes).Propriété : M^( 2 * i ) = M^i * M^i contient tous les chemins les plus légers de longueur au plus 2 * i (nombre darêtes). Il suffit de calculer M^k avec k >= | V | - 1 à laide de O ( log( | V | ) ) élévations au carré !Il suffit de calculer M^k avec k >= | V | - 1 à laide de O ( log( | V | ) ) élévations au carré ! k Connexité – chemins les plus légers
21 février 2006Cours de graphes 2 - Intranet23 Connexité Plus courts Plus légers La vague MultiplicationFloyd-Warshall ( | E | ) = ( | E | ) = O ( | V |^2 ) O ( | V |^2 ) ( | V |^3 * ( | V |^3 * log( | V | ) ) log( | V | ) ) ( | V |^3 ) ( | V |^3 ) ( | V | * | E | ) = ( | V | * | E | ) = O ( | V |^3 ) O ( | V |^3 ) ( | V |^3 * ( | V |^3 * log( | V | ) ) log( | V | ) ) ( | V |^3 ) ( | V |^3 ) N O N ! ( | V |^3 * ( | V |^3 * log( | V | ) ) log( | V | ) ) Le même programme ! Connexité – chemins les plus légers
21 février 2006Cours de graphes 2 - Intranet24 M est la matrice dadjacence avec des « 0 » sur la diagonale, le poids de larête si elle existe et des « » sinonM est la matrice dadjacence avec des « 0 » sur la diagonale, le poids de larête si elle existe et des « » sinon M de Floyd-Warshall contient par hypothèse les chemins les plus légers construits à laide de sommets intermédiaires dans lensemble { 0,..., k-1 }.M de Floyd-Warshall contient par hypothèse les chemins les plus légers construits à laide de sommets intermédiaires dans lensemble { 0,..., k-1 }. M ( u, v ) = min (, M ( u, v ) = min (, ) Le chemin le plus léger avec des sommets dans { 1,..., k } :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 !M est la matrice recherchée ! (0) M ( u, k ) + M ( k, v ) (k - 1) M ( u, v ) (k - 1) (n) (k) (k-1) Connexité – chemins les plus légers
21 février 2006Cours de graphes 2 - Intranet25 Connexité Plus courts Plus légers La vague MultiplicationFloyd-Warshall ( | E | ) = ( | E | ) = O ( | V |^2 ) O ( | V |^2 ) ( | V |^3 * ( | V |^3 * log( | V | ) ) log( | V | ) ) ( | V |^3 ) ( | V |^3 ) ( | V | * | E | ) = ( | V | * | E | ) = O ( | V |^3 ) O ( | V |^3 ) ( | V |^3 * ( | V |^3 * log( | V | ) ) log( | V | ) ) ( | V |^3 ) ( | V |^3 ) N O N ! ( | V |^3 * ( | V |^3 * log( | V | ) ) log( | V | ) ) ( | V |^3 ) ( | V |^3 ) Le même programme ! Connexité – chemins les plus légers
21 février 2006Cours de graphes 2 - Intranet26 Et les graphes orientés ? ? ?Et les graphes orientés ? ? ? à ceci près que la connexité orientée par lalgorithme de la vague –nécessite de répéter lalgorithme pour chaque sommet –et introduit une complexité en ( | V | * | E | ) ! Connexité – chemins les plus légers
21 février 2006Cours de graphes 2 - Intranet27 Pour les graphes orientés Connexité en orienté Plus courts Plus légers La vague MultiplicationFloyd-Warshall ( | V |^3 * ( | V |^3 * log( | V | ) ) log( | V | ) ) ( | V |^3 ) ( | V |^3 ) ( | V | * | E | ) = ( | V | * | E | ) = O ( | V |^3 ) O ( | V |^3 ) ( | V |^3 * ( | V |^3 * log( | V | ) ) log( | V | ) ) ( | V |^3 ) ( | V |^3 ) N O N ! ( | V |^3 * ( | V |^3 * log( | V | ) ) log( | V | ) ) ( | V |^3 ) ( | V |^3 ) ( | V | * | E | ) = ( | V | * | E | ) = O ( | V |^3 ) O ( | V |^3 )
21 février 2006Cours de graphes 2 - Intranet28 Deux questions :Deux questions : La vague construit en temps O ( | E | ) le plus court chemin dun sommet « u » quelconque vers tous les autres sommets !La vague construit en temps O ( | E | ) le plus court chemin dun 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, cest lalgorithme de Dijkstra ! Nous avons dû exiger que les poids des arêtes soient positifs ou nuls !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, cest lalgorithme de Bellmann-Ford ! Connexité – chemins les plus légers
21 février 2006Cours de graphes 2 - Intranet29 Lalgorithme de Dijkstra calcule les chemins les plus légers de « s » vers tous les autres sommets !Lalgorithme de Dijkstra calcule les chemins les plus légers de « s » vers tous les autres sommets ! Cest un algorithme de « relaxation », qui est un schéma classique en recherche opérationnelle.Cest un algorithme de « relaxation », qui est un schéma classique en recherche opérationnelle. Pour chaque sommet « u » nous connaissons « D ( u ) » quiPour chaque sommet « u » nous connaissons « D ( u ) » qui –est un majorant du chemin le plus léger, –qui correspond au poids dun 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.De plus, pour tout « u » nous connaissons « P ( u ) » qui est le sommet qui précède « u » le long du meilleur chemin courant. Connexité – chemins les plus légers
21 février 2006Cours de graphes 2 - Intranet30 Lopération de base « relax ( x, v ) » demandeLopé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 » ? le sommet « x » devient le prédécesseur de « v » ? D ( x ) + M ( x, v ) < D ( v ) ? ? ? ? ? D ( x ) + M ( x, v ) < D ( v ) ? ? ? ? ? Connexité – chemins les plus légers OUI D ( v ) < - D ( x ) + M ( x, v ) et P ( v ) < - x NON RIEN ! Donc, D ( v ) décroît et correspond à un chemin du graphe !
21 février 2006Cours de graphes 2 - Intranet31 Connexité – chemins les plus légers Lopération de relaxation « relax ( x, v ) » :Lopé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 2006Cours de graphes 2 - Intranet32 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 <> { 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 quil 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 2006Cours de graphes 2 - Intranet33 Connexité – chemins les plus légers s a b c E s a b c D 0 P s ? ? ? E < - E \ { s } relax ( s, a ) relax ( s, b ) E s a b c D 0 10 P s s s ? / E < - E \ { a } relax ( a, b ) / E s a b c D P s s a b / / E < - E \ { b } / relax ( b, c ) / E < - E \ { c }
21 février 2006Cours de graphes 2 - Intranet34 Connexité – chemins les plus légers Correction de lalgorithme, par absurde !Correction de lalgorithme, par absurde ! Soit « u » le premier sommet extrait avec « D ( u ) > d ( s, u ) » !Soit « u » le premier sommet extrait avec « D ( u ) > d ( s, u ) » !
21 février 2006Cours de graphes 2 - Intranet35 Connexité – chemins les plus légers Correction de lalgorithme, par absurde !Correction de lalgorithme, par absurde ! Soit « u » le premier sommet extrait avec « D ( u ) > d ( s, u ) » !Soit « u » le premier sommet extrait avec « D ( u ) > d ( s, u ) » ! Soit le chemin de plus léger de « s » vers « u » :Soit le chemin de plus léger de « s » vers « u » : s... xy u Pas dans E !
21 février 2006Cours de graphes 2 - Intranet36 Connexité – chemins les plus légers Correction de lalgorithme, par absurde !Correction de lalgorithme, par absurde ! Soit « u » le premier sommet extrait avec « D ( u ) > d ( s, u ) » !Soit « u » le premier sommet extrait avec « D ( u ) > d ( s, u ) » ! Soit le chemin de plus léger de « s » vers « u » :Soit le chemin de plus léger de « s » vers « u » : s... xy u Pas dans E ! Dans E !
21 février 2006Cours de graphes 2 - Intranet37 Connexité – chemins les plus légers Correction de lalgorithme, par absurde !Correction de lalgorithme, par absurde ! Soit « u » le premier sommet extrait avec « D ( u ) > d ( s, u ) » !Soit « u » le premier sommet extrait avec « D ( u ) > d ( s, u ) » ! Soit le chemin de plus léger de « s » vers « u » :Soit le chemin de plus léger de « s » vers « u » : s... xy u Pas dans E ! Dans E ! D ( u ) <= D ( y ) car « u » va être extrait ! D ( x ) = d ( s, x ), car il n y a pas eu derreur avant ! D ( y ) = relax ( x, y ) = d ( s, y ) ! ! ! ! !
21 février 2006Cours de graphes 2 - Intranet38 Connexité – chemins les plus légers Correction de lalgorithme, par absurde !Correction de lalgorithme, par absurde ! Soit « u » le premier sommet extrait avec « D ( u ) > d ( s, u ) » !Soit « u » le premier sommet extrait avec « D ( u ) > d ( s, u ) » ! Soit le chemin de plus léger de « s » vers « u » :Soit le chemin de plus léger de « s » vers « u » : s... xy u Pas dans E ! Dans E ! D ( u ) <= D ( y ) car « u » va être extrait ! D ( x ) = d ( s, x ), car il n y a pas eu derreur avant ! D ( y ) = relax ( x, y ) = d ( s, y ) ! ! ! ! ! D ( y ) = d ( s, y ) <= d ( s, u ) <= D ( u ) D ( y ) = d ( s, y ) = D ( u ) = d ( s, u )
21 février 2006Cours de graphes 2 - Intranet39 Connexité – chemins les plus légers Correction de lalgorithme, par absurde !Correction de lalgorithme, par absurde ! Soit « u » le premier sommet extrait avec « D ( u ) > d ( s, u ) » !Soit « u » le premier sommet extrait avec « D ( u ) > d ( s, u ) » ! Soit le chemin de plus léger de « s » vers « u » :Soit le chemin de plus léger de « s » vers « u » : s... xy u Pas dans E ! Dans E ! D ( u ) <= D ( y ) car « u » va être extrait ! D ( x ) = d ( s, x ), car il n y a pas eu derreur avant ! D ( y ) = relax ( x, y ) = d ( s, y ) ! ! ! ! ! D ( y ) = d ( s, y ) <= d ( s, u ) <= D ( u ) D ( y ) = d ( s, y ) = D ( u ) = d ( s, u )
21 février 2006Cours de graphes 2 - Intranet40 Connexité – chemins les plus légers Dijkstra calcule les chemins les plus légers dun sommet vers tous les autres (one-to-all shortest pairs).Dijkstra calcule les chemins les plus légers dun 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 ) » !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 ( | V | + | E | ), car nous parcourons, exactement une fois, tous les sommets et toutes les arêtes !La complexité vaut ( | V | + | E | ), car nous parcourons, exactement une fois, tous les sommets et toutes les arêtes ! Et ( | V | + | E | ) = ( | E | ) car le graphe est connexe !Et ( | V | + | E | ) = ( | E | ) car le graphe est connexe ! Attention, tout ceci est correct uniquement si les poids sont positifs ou nuls ! ! !Attention, tout ceci est correct uniquement si les poids sont positifs ou nuls ! ! !
21 février 2006Cours de graphes 2 - Intranet41 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).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.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 !La complexité est en O ( | V |^3 ), comme Floyd-Warshall ! BF utilise la même relaxation que Dijkstra, mais ne considère jamais quune valeur dun sommet est définitive (et que le sommet peut être retiré de lensemble « E »).BF utilise la même relaxation que Dijkstra, mais ne considère jamais quune valeur dun sommet est définitive (et que le sommet peut être retiré de lensemble « E »). Nous continuons tant quil y a des poids peuvent être réduits et que... (nous verrons plus tard) !Nous continuons tant quil y a des poids peuvent être réduits et que... (nous verrons plus tard) !
21 février 2006Cours de graphes 2 - Intranet42 Connexité – chemins les plus légers Lopération de relaxation « relax ( x, v ) » dit si, oui ou non, le poids du sommet « v » est resté stable.Lopé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 2006Cours de graphes 2 - Intranet43 Connexité – chemins les plus légers Le code presque correct :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 ! ! ! Nous nous arrêtons lorsquaucun poids na pu être réduit au dernier passage !
21 février 2006Cours de graphes 2 - Intranet44 Connexité – chemins les plus légers Calculer les plus courts chemins ou les chemins les plus légers avec des poids positifsCalculer les plus courts chemins ou les chemins les plus légers avec des poids positifs –revient à ne considérer que des chemins simples ! ! ! ! ! ! Lalgorithme que nous avons construit sarrête dans ces cas !Lalgorithme que nous avons construit sarrête dans ces cas ! Sil y a des cycles de poids négatifs :Sil y a des cycles de poids négatifs : –le chemin le plus léger ne sera plus un chemin simple, –lalgorithme va boucler ! Il faut un garde-fou :Il faut un garde-fou : –Pour « n » sommets, le chemin simple le plus long ne dépasse pas « n – 1 » étapes.
21 février 2006Cours de graphes 2 - Intranet45 Connexité – chemins les plus légers Un code correct :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 ; Nous comptons et limitons le nombre de tours de boucle ! Si « k » atteint « n » cest quil y a des boucles de poids négatifs !
21 février 2006Cours de graphes 2 - Intranet46 Connexité – chemins les plus légers La preuve de correction :La preuve de correction : La longueur daucun chemin simple nexcède « | V | - 1 ».La longueur daucun chemin simple nexcède « | V | - 1 ». Soit le chemin simple le plus léger de « s » vers « u » :Soit le chemin simple le plus léger de « s » vers « u » : avec f <= | V | - 1 et u = a avec f <= | V | - 1 et u = a Après le i tour de boucle : D ( a ) = d ( s, a ).Après le i tour de boucle : D ( a ) = d ( s, a ). –Trivial, pour i = 0, cest-à-dire pour « s » ! –Si cest vrai pour « i », le i+1 tour calcule : D ( a ) = relax ( a, a ) = d ( s, a ) D ( a ) = relax ( a, a ) = d ( s, a ) Après le tour de boucle « f » : D ( u ) = D ( a ) = d ( s, a )Après le tour de boucle « f » : D ( u ) = D ( a ) = d ( s, a ) sa... 1 a f f e ii e ii+1i+1i+1 ff
21 février 2006Cours de graphes 2 - Intranet47 Connexité – chemins les plus légers La preuve de correction (suite) :La preuve de correction (suite) : Au bout de « | V | - 1 » itérations nous avons tous les chemins simples les plus légers !Au bout de « | V | - 1 » itérations nous avons tous les chemins simples les plus légers ! Sil y a encore des modifications de poids au-delà de cette itération, cest quil existe des cycles de poids négatifs !Sil y a encore des modifications de poids au-delà de cette itération, cest quil existe des cycles de poids négatifs ! La complexité :La complexité : –en présence de cycles de poids négatifs : ( | V | * | E | ) –en labsence de cycles de poids négatifs : ( ( G ) * | E | ) Le diamètre ( G ) est la longueur du plus long chemin simple !Le diamètre ( G ) est la longueur du plus long chemin simple !
21 février 2006Cours de graphes 2 - Intranet48 Synthèse Les plus courts chemins,Les plus courts chemins, les chemins les plus légers :les chemins les plus légers : –à laide de la vague, –à laide de la multiplication, –à laide de Floyd-Warshall. –Algorithmes de Dijkstra et Bellmann-Ford.