You are on page 1of 7

Plan du cours

Comparaison Prim / Dijkstra Bellman Ford (Pb2)


une source, poids ngatifs O(mn)

Rappel - approche gnrique pour PCC


Pour chaque sommet x, chaque pas
D(x) distance du PCC connu entre s et x
D(s)=0, proche(s)=s

PCCs pour toutes les paires (Pb3)


programmation dynamique, O(n3logn) Floyd-Warshall, O(n3)

Proche(x) le sommet qui prcde x dans ce PCC.

Ide: propager linformation sur les distances travers les arcs.

123 / 149

124 / 149

Rappel - approche gnrique pour PCC


Relax(arc e=(x,y)) si D[x] +p(e) < D[y] alors D[y]=D[x] + p(e) proche(y)=x Quelle stratgie pour la relaxation (dans quel ordre relaxer les arcs)?
Cas des DAGs Cas des graphes sans poids ngatifs (Dijkstra)
125 / 149

Lalgorithme de Dijkstra
Initialisation:
D(s)=0, proche(s)=s D(x)= , proche(x)=null S= (sommets traits)

Tant que S X:
x = sommet de X-S ayant la valeur D(x) minimale diffrente de S:=S+{x} pour chaque arc e=(x,y) dans E t.q. y dans X-S: relax(e)

126 / 149

PCC partir du sommet A


2704 1846 867 849 740 621 187

Algorithme de Prim pour lACM


E
371

G
2467

F
621

D
328

Ide: construit un ACM partir dun sommet r racine chaque tape on a S (sommets dj couverts), arbre T couvrant S. on choisi larte (x,y) la plus lgre t.q x S, y X-S S:=S + y, T:= T + (x,y)
9 9

337

1464

802

C
184

144 1258

b
6 4 5

b
6 4 5

184

a
5

2 4

d
5

a
5

2 4

d
5

H
2658

I
1235
1423

1391 946 1121 2342

A
0

1090

B
946
127 / 149 128 / 149

Algorithme de Prim
Tant que S X : 1. pivot:= le sommet uX-S avec D(u) minimum S:=S + u T:=T + (proche(u), u) 2. m..j. des valeurs d et proche pour chaque sommet vX-S adjacent u. si p(u,v) < D(v): a. proche(v) = u b. D(v) = p(u,v)

Prim vs. Dijsktra


9

b
6 4 5

a
5

2 4

d
5

ACM avec a Prim


5

b
6 4 5

2 4

d
5

Dijkstra donne un arbre couvrant. PCC avec Dijkstra pour la source d? PCC avec Dijkstra pour la source e?
129 / 149 130 / 149

Plan du cours
Comparaison Prim / Dijkstra Bellman Ford (Pb2)
une source, poids ngatifs O(mn)

Algorithme de Bellman-Ford
Ide: relaxer tous les arcs n-1 fois. Ide de preuve: chaque chemin de poids minimal vers un sommet contient au plus n-1 arcs. Distance possibles: (sommets nonatteignables), - (sommets sans pcc), les autres

PCCs pour toutes les paires (Pb3)


programmation dynamique, O(n3logn) Floyd-Warshall, O(n3)

131 / 149

132 / 149

Algorithme de Bellman-Ford
Bellman-Ford:
D(s)=0, proche(s)=s D(x)= , proche(x)=null

Exemple

rpter n-1 fois pour chaque arc e=(x,y): relax(e) pour chaque arc e=(x,y) si D[y] > D[x] + p(x, y): return FALSE //cycle absorbant ou sans-pcc(y) //si on veut les sommets //des circuits absorbants sans-pcc(sommet y) si D[y] > - D[y]= - pour chaque arc e=(y,z) sans-pcc(z) 133 / 149

0 1 2 3 4 5

0 0 0 0 0 0 0

50 50 25 25 25


80 80 55 55

15 15 15 15 15


45 45 45 45


75

75 65

134 / 149

Complexit de Bellman-Ford
Initialisation: O(n) Boucle et relaxation darcs: n appels pour m arcs, O(nm) Complexit: O(nm)

Preuve
1er cas: graphe sans circuit absorbant partir de la source s Considrons un sommet vk et son plus court chemin p = < v0 , v1,..., vk>, ayant k n - 1 arcs Par induction sur k: Si k=0, D(s) = 0 aprs linitialisation Supposons D(vi-1) le cout du PCC de s vers vi-1 aprs litration (i-1) Comme larc (vi-1,vi) est relax litration (i), D(vi) doit tre le cout du PCC de s vers vi. Comme on fait n 1 k itrations, D(vk) doit etre le cout du PCC de s vers vk 2me cas: par contradiction
135 / 149 136 / 149

Plan du cours
Comparaison Prim / Dijkstra Bellman Ford (Pb2)
une source, poids ngatifs O(mn)

Problme 3
Trouver pour toutes les paires i, j, le chemin de poids minimum de i j. On suppose les sommets numrots de 1 n. On va utiliser la reprsentation de graphe par matrice dadjacence A. On veut trouver
matrice des poids D[i,j] des PCCs les PCSs: matrice de sommets, P, t.q. P[i,j] donne le sommet qui prcde j dans le chemin de poids minimal de i j.

PCCs pour toutes les paires (Pb3)


prog. dynamique Floyd-Warshall

137 / 149

138 / 149

Rduction au Pb2?
Avec Dijkstra/Bellman-Ford? Complexit? Initialisation D:
D[i,i] = 0 D[i,j] = A[i,j], si arc (i,j) D[i,j] = sinon

Approche par programmation dynamique


Si D(m) la matrice des distances des PCCs ayant au plus m arcs Lide: D(m+1)[i,j] = min{ D(m)[i,j], min1kn { D(m)[i,k] + A[k,j] } }
= min1kn { D(m)[i,k] + A[k,j] } comme A[j,j]=0
Cest la multiplication de matrices avec min la place de laddition + la place de la multiplication D(m+1) = D(m) x A, donc D(m) = Am !
139 / 149 140 / 149

Initialisation P:
P[i,i] = null P[i,j] = i, si arc (i,i) P[i,j] = null sinon

Approche par programmation dynamique


On sait que D(n-1)=A(n-1) donne les PCCs (voir Bellman-Ford) Multiplication de 2 matrices taille nxn: O(n3) prog-dynamique-nave: initialiser D rpter n-1 fois: D := D x A Complexit O(n4). Comment faire mieux, en O(n3log2n)?
141 / 149

Plan du cours
Comparaison Prim / Dijkstra Bellman Ford (Pb2)
une source, poids ngatifs O(mn)

PCCs pour toutes les paires (Pb3)


programmation dynamique Floyd-Warshall

142 / 149

Floyd-Warshall
Aussi par programmation dynamique. Itrations succesive, apres literation k, matrice A(k): A(k)[i,j] donne la distance du pcc de i j qui ne passe pas par un sommet plus grand que k. A(k)[i,j] = min (A(k-1)[i,j] , A(k-1) [i,k]+ A(k-1)[k,j]) Rsultat final A(n)
143 / 149

Floyd-Warshall
initialisation W[i,j] pour k de 1 n pour i de 1 n pour j de 1 n si (A[i,j] > A[i,k]+A[k,j]) A[i,j] := A[i,k]+A[k,j]; Complexit O(n3).

144 / 149

Exemple Floyd-Warshall

Le problme 1 (requte de PCC) ?


Etant donns deux sommets x et y, quel est le chemin de poids minimum les reliant? (exemple: planification de trajet sur un rseau routier)
3 Dijskstra avec source x jusquau moment quon traite y 2 excution de Dijskstra en parallle, une avec source x, lautre avec source y sur le graphe inverse (condition de terminaison moins vidente) beaucoup dheuristiques mais la mme complexit asymptotique

8 1 3 5 2

145 / 149

146 / 149

Variantes du PCC
Plusieurs fonctions de cout en mme temps
PCC avec contraintes (exemple: distances, pages, et stations dessences)

Exercice - Dijkstra
Si les poids des arcs sont des entiers dans {0, ,L}, comment modifier Dijkstra pour quil calcule les pcc en O(nL + m)? Comment modifier cet algorithme pour une complexit O((n + m) lg L ) ?

PCC dans un espace multidimensionnel / gomtrique


optique: indice de rfraction & propagation de la lumire

147 / 149

148 / 149

Exercice Bellman-Ford
Arbitrage: On veut utiliser les diffrences entre taux dchanges pour transformer une unit dune devise donne dans plus quune unit de la mme devise.
n devises T[i,j]: taux dchange de la devise i vers la devise j
1 unit i = T[i,j] units j

Comment tester sil existe un arbitrage, cest--dire une squence i1, i2, , ik,i1 tel que T[i1,i2] x T[i2,i3] x x T[ik-1,ik] x T[ik,i1] > 1 ?
149 / 149

You might also like