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