Bestimmung der SZKn eines gerichteten Graphen

Werbung
Bestimmung der SZKn eines gerichteten Graphen
Definitionen
• Seien V (Knoten) und I (Identifikatoren) endliche Mengen und E ⊆ V ×I ×V (Kanten)
ist G = [V, E] ein gerichteter Graph (Digraph)
• Für einen Knoten v ∈ V ist v • := {v ′ | ∃e = (v, i, v ′ ) ∈ E} die Menge seiner Nachfolger
• Die Abbildungen num : V → N, low : V → N und scc : V → N weisen jedem Knoten
eine natürliche Zahl zu
• Eine Folge paarweise verschiedener Knoten u, ..., v mit
u = v0 , v = vn , ∀vi : 0 ≤ i < n, vi+1 ∈ vi• ist ein u − v − W eg
∗
• Erreichbarkeitsrelation: u −
→ v ⇔ ∃u − v−Weg
• Eine Menge V ′ ⊆ V bildet eine Stark Zusammenhängende Komponente (SZK) eines
∗
∗
Graphen G = [V, E] ⇔ ∀u, v ∈ V ′ : u −
→v∧v −
→u
• Eine SZK S ⊆ V ist maximal ⇔ ∀v ∈ V \ S : S ∪ {v} ist nicht stark zusammenhängend
• Bestimmung der SZKn eines Graphen lässt sich mit Algorithmus 2 realisieren [Tar72]
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
Set visited := ∅;
procedure df s(N ode n)
visited := visited ∪ {n};
for all n′ ∈ n• do
if n′ ∈
/ visited then
df s(n′ );
end if
end for
end procedure
procedure DFS(Digraph [V, E])
for all n ∈ V and n ∈
/ visited do
df s(n);
end for
end procedure
Algorithmus 1: einfache Tiefensuche
BTU Cottbus, Institut für Informatik, LS DSSZ
WS 06
Bestimmung der SZKn eines gerichteten Graphen
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
int counter := 0;
int sccCounter := 1;
Set stack := ∅;
Set visited := ∅;
procedure df s(N ode n)
inc(counter);
num(n, counter);
low(n, counter);
stack := stack ∪ {n};
visited := visited ∪ {n};
for all n′ ∈ n• do
if n′ 6∈ visited then
df s(n′ );
if low(n′ ) < low(n) then
low(n, low(n′ ));
end if
else
if n′ ∈ stack ∧ num(n′ ) < low(n) then
low(n, num(n′ ));
end if
end if
end for
if num(n) = low(n) then
inc(sccCounter);
Set scc := ∅;
for all n′ ∈ stack and num(n′ ) ≥ num(n) do
scc := scc ∪ {n′ };
scc(n, sccCounter);
end for
stack := stack \ scc;
end if
end procedure
procedure DFS(Digraph [V, E])
for all n ∈ V and n ∈
/ visited do
df s(n);
end for
end procedure
Algorithmus 2: Tiefensuche mit Bestimmung der SZKn
BTU Cottbus, Institut für Informatik, LS DSSZ
WS 06
LITERATUR
Bestimmung der SZKn eines gerichteten Graphen
Beispiel
c
a
h
b
d
g
e
f
i
j
Abbildung 1: gerichteter Graph G
c
a
h
b
d
g
e
f
i
j
Abbildung 2: gerichteter Graph G mit eingefärbten SZKn
Literatur
[Tar72] R.E. Tarjan. Depth-first search and linear graph algorithms. SIAM J. Compting,
1:146–160, 1972.
BTU Cottbus, Institut für Informatik, LS DSSZ
WS 06
Herunterladen