1 / 48

Cours de graphes

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. Les grandes lignes du cours. Définitions de base Connexité Les plus courts chemins

abla
Télécharger la présentation

Cours de graphes

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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. Cours de graphes 2 - Intranet

  2. 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 Cours de graphes 2 - Intranet

  3. 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 Cours de graphes 2 - Intranet

  4. 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 ! Cours de graphes 2 - Intranet

  5. 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é ? Cours de graphes 2 - Intranet

  6. Connexité – plus courts chemins----------------------------------------------------------------- Touché une seconde fois ! u Touché deux fois ! Etape 0-étape 1-étape 2- étape 3 Cours de graphes 2 - Intranet

  7. 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 Cours de graphes 2 - Intranet

  8. 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 Cours de graphes 2 - Intranet

  9. 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 Cours de graphes 2 - Intranet

  10. 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 ) . Cours de graphes 2 - Intranet

  11. 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 ! Cours de graphes 2 - Intranet

  12. 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 Cours de graphes 2 - Intranet

  13. 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) Cours de graphes 2 - Intranet

  14. 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 Cours de graphes 2 - Intranet

  15. 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 ! Cours de graphes 2 - Intranet

  16. 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 Cours de graphes 2 - Intranet

  17. 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 0 30 40 30 10 5 Etape 0-étape 1-étape 2- étape 3 Cours de graphes 2 - Intranet

  18. 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 0 30 40 30 10 5 Etape 0-étape 1-étape 2- étape 3 Cours de graphes 2 - Intranet

  19. 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 0 30 40 45 30 10 5 Etape 0-étape 1-étape 2-étape 3 Cours de graphes 2 - Intranet

  20. Connexité – chemins les plus légers----------------------------------------------------------------- • Un cas pathologique : 5 5 . . . 5 8 8 8 X Y T Z 20 20 20 2 vagues O ( n / 3 ) vagues ! ! ! 4 vagues dont 2 simultanées Cours de graphes 2 - Intranet

  21. 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 N O N ! Plus légers C'est trop pénible ! ! ! Cours de graphes 2 - Intranet

  22. 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 Cours de graphes 2 - Intranet

  23. 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 | ) ) N O N ! Plus légers Le même programme ! Cours de graphes 2 - Intranet

  24. 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) Cours de graphes 2 - Intranet

  25. 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 | ) ) Q ( | V |^3 ) N O N ! Plus légers Le même programme ! Cours de graphes 2 - Intranet

  26. 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é ! Cours de graphes 2 - Intranet

  27. Pour les graphes orientés----------------------------------------------------------------- OPTIMAUX ! La vague Multiplication Floyd-Warshall Q ( | V | * | E | ) = O ( | V |^3 ) Q ( | V |^3 * log( | V | ) ) Connexité en orienté Q ( | V |^3 ) Q ( | V | * | E | ) = O ( | V |^3 ) Q ( | V |^3 * log( | V | ) ) Q ( | V |^3 ) Plus courts Q ( | V |^3 * log( | V | ) ) Q ( | V |^3 ) N O N ! Plus légers Cours de graphes 2 - Intranet

  28. 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 ! Cours de graphes 2 - Intranet

  29. 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. Cours de graphes 2 - Intranet

  30. 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 ! Cours de graphes 2 - Intranet

  31. 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 Cours de graphes 2 - Intranet

  32. 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 ! ! ! Cours de graphes 2 - Intranet

  33. Connexité – chemins les plus légers----------------------------------------------------------------- a 10 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 sa b c D 010 20 µ P ss s ? E <- E \ { a } relax ( a , b ) / / / / E sabc D 0101523 P ssab E <- E \ { b } relax ( b , c ) E <- E \ { c } Cours de graphes 2 - Intranet

  34. 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 ! ! ! Cours de graphes 2 - Intranet

  35. 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 ! Cours de graphes 2 - Intranet

  36. 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 ! Cours de graphes 2 - Intranet

  37. 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 ) ! Cours de graphes 2 - Intranet

  38. 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 ) Cours de graphes 2 - Intranet

  39. 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 ) Cours de graphes 2 - Intranet

  40. 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 ! ! ! Cours de graphes 2 - Intranet

  41. 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) ! Cours de graphes 2 - Intranet

  42. 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 ) ; Cours de graphes 2 - Intranet

  43. 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 ! ! ! Cours de graphes 2 - Intranet

  44. 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. Cours de graphes 2 - Intranet

  45. 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 ! Cours de graphes 2 - Intranet

  46. 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 f 1 f e i i e i+1 i i+1 i+1 f f Cours de graphes 2 - Intranet

  47. 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 ! Cours de graphes 2 - Intranet

  48. Synthèse-----------------------------------------------------------------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. Cours de graphes 2 - Intranet

More Related