Cours de graphes

48
21 février 2006 Cours de graphes 2 - Intranet 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.

description

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 - PowerPoint PPT Presentation

Transcript of Cours de graphes

Page 1: Cours de graphes

Cours de graphes 2 - Intranet 121 février 2006

Cours de graphesLes 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.

Page 2: Cours de graphes

Cours de graphes 2 - Intranet 221 février 2006

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

Page 3: Cours de graphes

Cours de graphes 2 - Intranet 321 février 2006

Connexité – plus courts chemins-----------------------------------------------------------------

Connexité

Plus courts

Plus légers

La vague Multiplication Floyd-Warshall

Q ( | E | ) = O ( | V |^2 )

Q ( | V |^3 * log( | V | ) )

Q ( | V |^3 )

Page 4: Cours de graphes

Cours de graphes 2 - Intranet 421 février 2006

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 !

Page 5: Cours de graphes

Cours de graphes 2 - Intranet 521 février 2006

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 !

Page 6: Cours de graphes

Cours de graphes 2 - Intranet 621 février 2006

Connexité – plus courts chemins-----------------------------------------------------------------

u

Etape 0 - étape 1 - étape 2 - étape 3

Touché une seconde fois !

Touché deux fois !

Page 7: Cours de graphes

Cours de graphes 2 - Intranet 721 février 2006

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 !

uv w

u

v

w

Page 8: Cours de graphes

Cours de graphes 2 - Intranet 821 février 2006

Connexité – plus courts chemins-----------------------------------------------------------------

Connexité

Plus courts

Plus légers

La vague Multiplication Floyd-Warshall

Q ( | E | ) = O ( | V |^2 )

Q ( | V |^3 * log( | V | ) )

Q ( | V |^3 )

Q ( | V | * | E | ) = O ( | V |^3 )

Page 9: Cours de graphes

Cours de graphes 2 - Intranet 921 février 2006

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

Page 10: Cours de graphes

Cours de graphes 2 - Intranet 1021 février 2006

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 ) .

Page 11: Cours de graphes

Cours de graphes 2 - Intranet 1121 février 2006

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 ) .

Page 12: Cours de graphes

Cours de graphes 2 - Intranet 1221 février 2006

Connexité – plus courts chemins-----------------------------------------------------------------

Connexité

Plus courts

Plus légers

La vague Multiplication Floyd-Warshall

Q ( | E | ) = O ( | V |^2 )

Q ( | V |^3 * log( | V | ) )

Q ( | V |^3 )

Q ( | V | * | E | ) = O ( | V |^3 )

Q ( | V |^3 * log( | V | ) )

Page 13: Cours de graphes

Cours de graphes 2 - Intranet 1321 février 2006

Connexité – plus courts chemins-----------------------------------------------------------------

• 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 !

(0)

M ( u , k ) + M ( k , v )(k-1)M ( u , v )(k-1)

(k-1)

(n)

(k)

(k-1)

Page 14: Cours de graphes

Cours de graphes 2 - Intranet 1421 février 2006

Connexité – plus courts chemins-----------------------------------------------------------------

Connexité

Plus courts

Plus légers

La vague Multiplication Floyd-Warshall

Q ( | E | ) = O ( | V |^2 )

Q ( | V |^3 * log( | V | ) )

Q ( | V |^3 )

Q ( | V | * | E | ) = O ( | V |^3 )

Q ( | V |^3 * log( | V | ) )

Q ( | V |^3 )

Page 15: Cours de graphes

Cours de graphes 2 - Intranet 1521 février 2006

• 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 !

Connexité – chemins les plus légers-----------------------------------------------------------------

Page 16: Cours de graphes

Cours de graphes 2 - Intranet 1621 février 2006

• 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.

Connexité – chemins les plus légers-----------------------------------------------------------------

5

5

5

-15

10

Cycle de poids négatif !

Page 17: Cours de graphes

Cours de graphes 2 - Intranet 1721 février 2006

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 ! ! !

030 10

30 405

55

1015

8

Etape 0 - étape 1 - étape 2 - étape 3

Une vague qui se brise.Nous l’ignorons ! ! !

Page 18: Cours de graphes

Cours de graphes 2 - Intranet 1821 février 2006

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 ! ! !

030 10

30 405

55

1015

8

Etape 0 - étape 1 - étape 2 - étape 3

Elle n’existe plus !

Page 19: Cours de graphes

Cours de graphes 2 - Intranet 1921 février 2006

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 ? ? ?

030 10

30 405

45

55

1015

8

Etape 0 - étape 1 - étape 2 - étape 3

23

Page 20: Cours de graphes

Cours de graphes 2 - Intranet 2021 février 2006

Connexité – chemins les plus légers-----------------------------------------------------------------

• Un cas pathologique :

20

8 5

20

85 5

20

8. . .Y

2 vagues

T

4 vaguesdont 2 simultanées

O ( n / 3 )vagues ! ! !

X Z

Page 21: Cours de graphes

Cours de graphes 2 - Intranet 2121 février 2006

Connexité

Plus courts

Plus légers

La vague Multiplication Floyd-Warshall

Q ( | E | ) = O ( | V |^2 )

Q ( | V |^3 * log( | V | ) )

Q ( | V |^3 )

Q ( | V | * | E | ) = O ( | V |^3 )

Q ( | V |^3 * log( | V | ) )

Q ( | V |^3 )

N O N !

Connexité – chemins les plus légers-----------------------------------------------------------------

Page 22: Cours de graphes

Cours de graphes 2 - Intranet 2221 février 2006

• 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

Connexité – chemins les plus légers-----------------------------------------------------------------

Page 23: Cours de graphes

Cours de graphes 2 - Intranet 2321 février 2006

Connexité

Plus courts

Plus légers

La vague Multiplication Floyd-Warshall

Q ( | E | ) = O ( | V |^2 )

Q ( | V |^3 * log( | V | ) )

Q ( | V |^3 )

Q ( | V | * | E | ) = O ( | V |^3 )

Q ( | V |^3 * log( | V | ) )

Q ( | V |^3 )

N O N ! Q ( | V |^3 * log( | V | ) )

Le même programme !

Connexité – chemins les plus légers-----------------------------------------------------------------

Page 24: Cours de graphes

Cours de graphes 2 - Intranet 2421 février 2006

• 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 !

(0)

M ( u , k ) + M ( k , v )(k-1)M ( u , v )(k-1)

(k-1)

(n)

(k)

(k-1)

Connexité – chemins les plus légers-----------------------------------------------------------------

Page 25: Cours de graphes

Cours de graphes 2 - Intranet 2521 février 2006

Connexité

Plus courts

Plus légers

La vague Multiplication Floyd-Warshall

Q ( | E | ) = O ( | V |^2 )

Q ( | V |^3 * log( | V | ) )

Q ( | V |^3 )

Q ( | V | * | E | ) = O ( | V |^3 )

Q ( | V |^3 * log( | V | ) )

Q ( | V |^3 )

N O N ! Q ( | V |^3 * log( | V | ) ) Q ( | V |^3 )

Le même programme !

Connexité – chemins les plus légers-----------------------------------------------------------------

Page 26: Cours de graphes

Cours de graphes 2 - Intranet 2621 février 2006

• 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 | ) !

Connexité – chemins les plus légers-----------------------------------------------------------------

Page 27: Cours de graphes

Cours de graphes 2 - Intranet 2721 février 2006

Pour les graphes orientés-----------------------------------------------------------------

Connexitéen orienté

Plus courts

Plus légers

La vague Multiplication Floyd-Warshall

Q ( | V |^3 * log( | V | ) )

Q ( | V |^3 )

Q ( | V | * | E | ) = O ( | V |^3 )

Q ( | V |^3 * log( | V | ) )

Q ( | V |^3 )

N O N ! Q ( | V |^3 * log( | V | ) ) Q ( | V |^3 )

Q ( | V | * | E | ) = O ( | V |^3 )

Page 28: Cours de graphes

Cours de graphes 2 - Intranet 2821 février 2006

• 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 !

Connexité – chemins les plus légers-----------------------------------------------------------------

Page 29: Cours de graphes

Cours de graphes 2 - Intranet 2921 février 2006

• 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.

Connexité – chemins les plus légers-----------------------------------------------------------------

Page 30: Cours de graphes

Cours de graphes 2 - Intranet 3021 février 2006

• 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 ) ? ? ? ? ?

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 !

Page 31: Cours de graphes

Cours de graphes 2 - Intranet 3121 février 2006

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

Page 32: Cours de graphes

Cours de graphes 2 - Intranet 3221 février 2006

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 quine sont pas encore définitifs ! ! !

Page 33: Cours de graphes

Cours de graphes 2 - Intranet 3321 février 2006

Connexité – chemins les plus légers-----------------------------------------------------------------

s

a

bc

20

105 8

E s a b cD 0 µ µ µP s ? ? ?

E <- E \ { s }relax ( s , a )

relax ( s , b )

E s a b cD 0 10 20 µP s s s ?

/E <- E \ { a } relax ( a , b )

/

E s a b cD 0 10 15 23P s s a b

/ /E <- E \ { b }

/relax ( b , c )

/

E <- E \ { c }

Page 34: Cours de graphes

Cours de graphes 2 - Intranet 3421 février 2006

Connexité – chemins les plus légers-----------------------------------------------------------------

• Correction de l’algorithme, par absurde !• Soit « u » le premier sommet extrait avec « D ( u ) > d

( s , u ) » !

Page 35: Cours de graphes

Cours de graphes 2 - Intranet 3521 février 2006

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 !

Page 36: Cours de graphes

Cours de graphes 2 - Intranet 3621 février 2006

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 !

Page 37: Cours de graphes

Cours de graphes 2 - Intranet 3721 février 2006

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 !

D ( x ) = d ( s , x ) , car iln’ y a pas eu d’erreur avant !

D ( y ) = relax ( x , y ) = d ( s , y ) ! ! ! ! !

Page 38: Cours de graphes

Cours de graphes 2 - Intranet 3821 février 2006

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 !

D ( x ) = d ( s , x ) , car iln’ y a pas eu d’erreur 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 )

Page 39: Cours de graphes

Cours de graphes 2 - Intranet 3921 février 2006

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 !

D ( x ) = d ( s , x ) , car iln’ y a pas eu d’erreur 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 )

Page 40: Cours de graphes

Cours de graphes 2 - Intranet 4021 février 2006

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 ! ! !

Page 41: Cours de graphes

Cours de graphes 2 - Intranet 4121 février 2006

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) !

Page 42: Cours de graphes

Cours de graphes 2 - Intranet 4221 février 2006

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 ) ;

Page 43: Cours de graphes

Cours de graphes 2 - Intranet 4321 février 2006

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 ! ! !

Nous nous arrêtons lorsqu’aucun poidsn’a pu être réduit au dernier passage !

Page 44: Cours de graphes

Cours de graphes 2 - Intranet 4421 février 2006

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.

Page 45: Cours de graphes

Cours de graphes 2 - Intranet 4521 février 2006

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 – 1si k > n – 1 Il y a des cycles de poids négatifs ;

Nous comptons et limitons lenombre de tours de boucle !

Si « k » atteint « n » c’est qu’il ya des boucles de poids négatifs !

Page 46: Cours de graphes

Cours de graphes 2 - Intranet 4621 février 2006

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 . . .1

af f

ei i

e

ii+1 i+1 i+1

f f

Page 47: Cours de graphes

Cours de graphes 2 - Intranet 4721 février 2006

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 !

Page 48: Cours de graphes

Cours de graphes 2 - Intranet 4821 février 2006

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.