Académique Documents
Professionnel Documents
Culture Documents
Rachid Kadouche
Université de Sherbrooke
18 juillet 2013
1
Parcours en largeur (BFS)
Parcours des graphes Parcours en profondeur (DFS)
Tri-Topologique
Algo BFS
2
Parcours en largeur (BFS)
Parcours des graphes Parcours en profondeur (DFS)
Tri-Topologique
BFS : détails
3
Parcours en largeur (BFS)
Parcours des graphes Parcours en profondeur (DFS)
Tri-Topologique
BFS - Pseudo
Algorithme : BFS(G, s)
1 foreach u ∈ S − {s} do
2 color[u] ← Blanc ; d[u] ← ∞ ; π[u] ← NIL;
3 color[s] ← Gris ; d[s] ← 0 ; π[s] ← NIL;
4 Q ← ∅ ; Enqueue(Q,s);
5 while Q 6= ∅ do
6 u ← Dequeue(Q);
7 foreach v ∈ Adj[u] do
8 if color[v] = Blanc then
9 color[v] ← Gris ; d[v] ← d[u] + 1 ; π[v ] ← u;
10 Enqueue(Q,v);
11 color[u] ← Noir;
4
Parcours en largeur (BFS)
Parcours des graphes Parcours en profondeur (DFS)
Tri-Topologique
Exemple BFS
5
Parcours en largeur (BFS)
Parcours des graphes Parcours en profondeur (DFS)
Tri-Topologique
Breadth-First Tree
6
Parcours en largeur (BFS)
Parcours des graphes Parcours en profondeur (DFS)
Tri-Topologique
1 foreach u ∈ S − {s} do
2 color[u] ← Blanc ; d[u] ← ∞ ; π[u] ← NIL;
3 color[s] ← Gris ; d[s] ← 0 ; π[s] ← NIL;
4 Q ← ∅ ; Enqueue(Q,s);
5 while Q 6= ∅ do
6 u ← Dequeue(Q);
7 foreach v ∈ Adj[u] do
8 if color[v] = Blanc then
9 color[v] ← Gris ; d[v] ← d[u] + 1 ; π[v ] ← u;
10 Enqueue(Q,v);
11 color[u] ← Noir;
7
Parcours en largeur (BFS)
Parcours des graphes Parcours en profondeur (DFS)
Tri-Topologique
1 foreach u ∈ S − {s} do
2 color[u] ← Blanc ; d[u] ← ∞ ; π[u] ← NIL;
3 color[s] ← Gris ; d[s] ← 0 ; π[s] ← NIL;
4 Q ← ∅ ; Enqueue(Q,s);
5 while Q 6= ∅ do
6 u ← Dequeue(Q);
7 foreach v ∈ Adj[u] do
8 if color[v] = Blanc then
9 color[v] ← Gris ; d[v] ← d[u] + 1 ; π[v ] ← u;
10 Enqueue(Q,v);
11 color[u] ← Noir;
8
Parcours en largeur (BFS)
Parcours des graphes Parcours en profondeur (DFS)
Tri-Topologique
1 foreach u ∈ S − {s} do
2 color[u] ← Blanc ; d[u] ← ∞ ; π[u] ← NIL;
3 color[s] ← Gris ; d[s] ← 0 ; π[s] ← NIL;
4 Q ← ∅ ; Enqueue(Q,s);
5 while Q 6= ∅ do
6 u ← Dequeue(Q);
7 foreach v ∈ Adj[u] do
8 if color[v] = Blanc then
9 color[v] ← Gris ; d[v] ← d[u] + 1 ; π[v ] ← u;
10 Enqueue(Q,v);
11 color[u] ← Noir;
9
Parcours en largeur (BFS)
Parcours des graphes Parcours en profondeur (DFS)
Tri-Topologique
1 foreach u ∈ S − {s} do
2 color[u] ← Blanc ; d[u] ← ∞ ; π[u] ← NIL;
3 color[s] ← Gris ; d[s] ← 0 ; π[s] ← NIL;
4 Q ← ∅ ; Enqueue(Q,s);
5 while Q 6= ∅ do
6 u ← Dequeue(Q);
7 foreach v ∈ Adj[u] do
8 if color[v] = Blanc then
9 color[v] ← Gris ; d[v] ← d[u] + 1 ; π[v ] ← u;
10 Enqueue(Q,v);
11 color[u] ← Noir;
10
Parcours en largeur (BFS)
Parcours des graphes Parcours en profondeur (DFS)
Tri-Topologique
1 foreach u ∈ S − {s} do
2 color[u] ← Blanc ; d[u] ← ∞ ; π[u] ← NIL;
3 color[s] ← Gris ; d[s] ← 0 ; π[s] ← NIL;
4 Q ← ∅ ; Enqueue(Q,s);
5 while Q 6= ∅ do
6 u ← Dequeue(Q);
7 foreach v ∈ Adj[u] do
8 if color[v] = Blanc then
9 color[v] ← Gris ; d[v] ← d[u] + 1 ; π[v ] ← u;
10 Enqueue(Q,v);
11 color[u] ← Noir;
T (A, S) = O(S + A)
11
Parcours en largeur (BFS)
Parcours des graphes Parcours en profondeur (DFS)
Tri-Topologique
DFS : détails
12
Parcours en largeur (BFS)
Parcours des graphes Parcours en profondeur (DFS)
Tri-Topologique
DFS - Pseudo
Algorithme : DFS(G)
1 foreach u ∈ S do
2 color[u] ← Blanc;
3 π[u] ← NIL ;
4 time ← 0;
5 foreach u ∈ S do
6 if color[u] = Blanc then
7 DFS-Visit(u)
Algorithme : DFS-Visit(u)
1 color[u] ← Gris;
2 time ← time + 1;
3 d[u] ← time;
4 foreach v ∈ Adj[u] do
5 if color[v] = Blanc then
6 π[v ] ← u;
7 DFS-Visit(v);
8 color[u] ← Noir;
9 time ← time +1;
10 f[u] ← time;
13
Parcours en largeur (BFS)
Parcours des graphes Parcours en profondeur (DFS)
Tri-Topologique
Exemple DFS
14
Parcours en largeur (BFS)
Parcours des graphes Parcours en profondeur (DFS)
Tri-Topologique
Exemple DFS
15
Parcours en largeur (BFS)
Parcours des graphes Parcours en profondeur (DFS)
Tri-Topologique
16
Parcours en largeur (BFS)
Parcours des graphes Parcours en profondeur (DFS)
Tri-Topologique
1 foreach u ∈ S do
2 color[u] ← Blanc;
3 π[u] ← NIL ;
4 time ← 0;
5 foreach u ∈ S do
6 if color[u] = Blanc then
7 DFS-Visit(u)
Algorithme : DFS-Visit(u)
1 color[u] ← Gris;
2 time ← time + 1;
3 d[u] ← time;
4 foreach v ∈ Adj[u] do
5 if color[v] = Blanc then
6 π[v ] ← u;
7 DFS-Visit(v);
8 color[u] ← Noir;
9 time ← time +1;
10 f[u] ← time;
17
Parcours en largeur (BFS)
Parcours des graphes Parcours en profondeur (DFS)
Tri-Topologique
18
Parcours en largeur (BFS)
Parcours des graphes Parcours en profondeur (DFS)
Tri-Topologique
19
Parcours en largeur (BFS)
Parcours des graphes Parcours en profondeur (DFS)
Tri-Topologique
TDFS−Visit (v ) = |Adj[v ]|
X
TDFSligne:5−7 (A, S) = |Adj[v ]| = Θ(A)
v ∈S
20
Parcours en largeur (BFS)
Parcours des graphes Parcours en profondeur (DFS)
Tri-Topologique
TDFS−Visit (v ) = |Adj[v ]|
X
TDFSligne:5−7 (A, S) = |Adj[v ]| = Θ(A)
v ∈S
T (A, S) = Θ(S + A)
21
Parcours en largeur (BFS)
Parcours des graphes Parcours en profondeur (DFS)
Tri-Topologique
22
Parcours en largeur (BFS)
Parcours des graphes Parcours en profondeur (DFS)
Tri-Topologique
23
Parcours en largeur (BFS)
Parcours des graphes Parcours en profondeur (DFS)
Tri-Topologique
Tri-Topologique
24
Parcours en largeur (BFS)
Parcours des graphes Parcours en profondeur (DFS)
Tri-Topologique
25