Beruflich Dokumente
Kultur Dokumente
TECHNIQUES DE PARCOURS DE GRAPHES PARCOURS EN PROFONDEUR DABORD (DEPTH-FIRST SEARCH) PARCOURS EN LARGEUR DABORD (BREADTH-FIRST SEARCH) CALCUL DE LA FERMETURE TRANSITIVE ALGORITHME DE ROY-WARSHALL PLUS COURTS CHEMINS ALGORITHME DIJKSTRA ALGORITHME DE BELLMANN-FORD ALGORITHME DE FLOYD-WARSHALL - METHODE MATRICIELLE FLOTS ALGORITHME DE FORD-FULKERSON ALGORITHME DE BUSACKER ET GOWEN
1/10
2 2 3 4 4 5 5 6 7 8 8 10
K. Barkaoui
2/10
Programme principal : Tant qu'il existe sommet s tel que marque (s) = false dfs (s) ; fin tant que Version rcursive procdure recursif_dfs (s : sommet) ; var v : sommet ; marque : boolen ; dbut marque (s) := vrai ; imprimer (s) ; {ordre prfixe} pour tout (v successeur de s) faire : si v non marqu alors recursif_dfs (v) ; finsi finfaire imprimer (s) ; {ordre suffixe} fin. Version itrative procdure iter_dfs (s : sommet) ; var v, u : sommet ; marque : boolen ; p : pile ; dbut vide (p) ; marque (s) := vrai ; push (s, p) ; rpter u := tte (p) ; pour tout (v successeur de u) faire : si v non marqu alors marque (v) := vrai ; imprimer (v) ; {ordre prfixe} push (v, p) ; finsi finfaire imprimer (u) ; {ordre suffixe} pop (p) ; jusqu p = vide ; fin.
K. Barkaoui
3/10
Programme principal : Tant qu'il existe sommet s tel que marque (s) = false bfs (s) ; fin tant que Version itrative procdure bfs (s : sommet) ; var v, u : sommet ; marque : boolean ; q : file ; dbut vide (q) ; marque (s) := vrai ; inject (s, q) ; rpter u := tte (q) ; pour tout (v successeur de u) faire : si v non marqu alors marque (v) := vrai ; inject (v, p) ; finsi finfaire pop (q) ; jusqu q = vide ; fin.
K. Barkaoui
4/10
Calcul de la fermeture transitive Algorithme de Roy-Warshall Calcul de la fermeture transitive dun graphe G dcrit par sa matrice dadjacence M. procdure Roy-Warshall (A : tableau [1..n, 1..n] de boolen) ; var i, j, k : entier ; dbut {initialisation} pour i := 1 n faire pour j := 1 n faire A[i, j] := M[i, j] ; finfaire finfaire {calcul de la matrice dadjacence A de G} pour k = 1 n faire pour i := 1 n faire pour j := 1 n faire A[i, j] := A[i, j] ou (A[i, k] et A[k, j]) ; finfaire finfaire finfaire fin.
K. Barkaoui
5/10
Plus courts chemins Algorithme Dijkstra Calcule larborescence des plus courts chemins issus dun sommet donn source numrot 1 . Le graphe G ( X ,U ,V ) est valu positivement : V ( x, y ) 0 ( x, y ) U .
X : ensemble dentier ; d, pre : tableau [1..n] de entier ; dbut dbut {initialisation} X = {2, 3, .., n} ; d(1) := 0 ; pour i := 2 n faire pre (i) := 1 ; si (i successeur de 1) alors d(i) := V(1,i) sinon d(i) := + ; finfaire fin tant que X slectionner j X / d ( j ) = min d ( j )
i X
dbut
pour tout i X / d ( j ) + V ( j , i ) < d (i ) faire d(i) := d(j) + V(j,i) ; pre (i) := j ; finfaire fin fin.
X := X { j} ;
K. Barkaoui
6/10
Algorithme de Bellmann-Ford Calcule larborescence des plus courts chemins issus du sommet s dans un graphe valuation quelconque. X : ensemble de sommets ; s : sommet ; {source} v, last : sommet ; dist : rel ; q : file ; pass : entier ; dbut dbut {initialisation} vide (q) ; enfiler (s, q) ; dist (s) := 0 ; pass := 0 last := s ; pour tout v X , v s faire d(v) := + ; pre (v) := 0 ; finfaire fin rpter v := tte (file) ; pop (q) ; pour tout w succ(v ) / dist (v ) + val (v, w) < dist (w) faire dist (w) := dist (v) + val(v,w) ; pre (w) := v ; si w q alors enfiler (w,q) ; finfaire si (q et v = last) alors pass := pass + 1 ; last := queue (file) ; {retourne le dernier lment de la file X} finsi jusqu (q = ou pass n) {q = : terminaison normale, pass n : prsence d'un circuit absorbant} fin.
K. Barkaoui
7/10
Algorithme de Floyd-Warshall (mthode matricielle) Calcul des plus courts chemins (pcc) pour tout couple de sommets (x, y) dans un graphe G valu et dcrit par sa matrice de valuation VAL; les sommets sont numrots de 1 n. var V : tableau [1..n, 1..n] de rel ; P : tableau [1..n, 1..n] de entier ; i, j, k : entier ; dbut dbut {initialisation} pour i := 1 n faire pour j := 1 n faire V[i,i] := 0 ; P[i,i] := i ; si i j alors V[i,j] := VAL[i,j] ; P[i,j] := i ; finsi finfaire finfaire fin dbut {calcul des pcc et de la matrice des prdcesseurs P} pour k := 1 n faire pour i := 1 n faire pour j := 1 n faire si ( i j et V[i,k] + V[k,j] < V[i,j]) alors V[i,j] := V[i,k] + V[k,j] ; P[i,j] := P[k,j] ; finsi si (i = j et V[i,k] + V[k,j] < 0) alors imprimer circuit absorbant ; arrt ; finsi finfaire finfaire finfaire fin fin.
K. Barkaoui
MOCA B1/ RCP 105 Algorithmes de graphes Flots On considre un rseau avec s est le sommet source et p le sommet puit. A chaque arc du rseau est associ un triplet (b, c, d ) : - b reprsente la borne infrieure de capacit (on considre ici b = 0) c reprsente la borne suprieure de capacit (c > 0). d reprsente le cot de transport d'une unit de matire sur cet arc (d positif).
8/10
Le premier problme consiste trouver un flot f de s p de valeur maximum, compte tenu des contraintes de capacit. Il sera rsolu par l'algorithme de Ford-Fulkerson. Le second problme consiste dterminer un flot f de s p de valeur v et de cot minimum. En particulier on pourra obtenir le flot de valeur maximum et de cot minimum. Ce problme sera rsolu l'aide de l'algorithme de Busacker-Gowen (de Roy). Algorithme de Ford-Fulkerson La procdure principale partant d'un flot Phase 1 : Marquer le sommet s, s A . Phase 2 : Soit A l'ensemble des sommets marqus et x A . Marquer tous les successeurs y de x tels que f ( xy ) < c( xy ) (marquage avant). Marquer tous les prdcesseurs y de x tels que f ( yx ) > 0 (marquage arrire). Il s'agit d'un marquage en largeur. Quand on ne peut plus rien marquer, deux ventualits se prsentent : - p est marqu : passer la phase 3 . p ne peut tre marqu : passer la phase 4 .
fi
de valeur
vi
est la suivante.
tous les arcs x j x j+1 parcourus vers l'arrire ( ) sont de flot non nul : f x j +1 x j > 0 . Soit alors m2 = min f x j +1 x j pour ces arcs "arrire".
K. Barkaoui
9/10
Soit m = min(m1 , m2 ) > 0 : on peut alors le long de cette chane faire passer une quantit de
f i +1 ( xy ) = f ( xy ) si ( xy ) dfini par : f i +1 ( xy ) = f ( xy ) + m si ( xy ) + f ( xy ) = f ( xy ) m si ( xy ) i +1
On vrifie aisment que vi +1 = vi + m , et que les nouveaux flots f i +1 satisferont galement la loi de conservation des flux en chaque sommet ; on peut en effet se trouver dans l'un des quatre cas possibles :
f1
1 p
e1 p
f 2
2 p
e2 p
f 3
3 p
e3 p
f 4
4 p
e4 p
p p
s1 p
s2 p
s3 p
s4 p
On revient la phase 2. Phase 4: p ne peut tre marqu. On a ainsi construit une coupe (A, A ) avec A est lensemble des sommets marqus et A lensemble des non marqus A ( s A, p A ). x A, f ( xy ) = c( xy ) Pour cette coupe, on a : sinon on aurait pu marquer y . y A, f ( yx ) = 0 En sommant sur tous les x A, y A : f ( A, A ) = c( A, A ) et On trouve ainsi, que pour le flot et la coupe considrs : f ( A, A ) = f ( A , A) = c( A, A ) , soit en vertu de la relation fondamentale flot/coupe : v = c(A, A ).
f ( A , A) = 0 .
On est donc l'optimum : Le flot f est de valeur maximale et (A, A ) est une coupe de capacit minimale. - En pratique, on vrifiera bien que : - les arcs sortants de la coupe (du type les arcs entrants dans la coupe (du
K. Barkaoui
MOCA B1/ RCP 105 Algorithmes de graphes Algorithme de Roy (Busacker et Gowen) On recherche un flot de valeur maximale (ou de valeur v donne) et de cot minimal. Etape 0 On part d'un flot initial de valeur v 0 = 0 , ce flot est ralisable (tous les b sont nuls) et de cot minimal (tous les d sont positifs). Etape i
Soit f i1 ( xy ) les flots obtenus l'tape prcdente de valeur globale vi 1 et de cot Di 1 .
i On construit le graphe d'cart G E correspondant ce flot :
10/10
Si 0 < f i 1 ( xy ) < c( xy )
( xy ) G ( xy ) G
i E
ci ( yx ) = c( xy ) i et ( yx ) G E avec d i ( yx ) = d ( xy ) Si f i 1 ( xy ) = 0
i E
( xy ) G
i E
Si un tel chemin existe, soit mi la capacit minimale des arcs constituant ce chemin et d i le cot de passage de mi units de matire le long de ce chemin. On obtient alors un nouveau flot de valeur vi = vi 1 + mi et de cot minimal Di = Di 1 + d i .
i i Passer ltape i + 1 . (on construit directement GE+1 partir de G E )
Cet algorithme permet de fournir tous les flots de cot minimum de valeur v v max imum .
K. Barkaoui