Skript in PDF - Theoretische Informatik - Technische Universität ...
Skript in PDF - Theoretische Informatik - Technische Universität ...
Skript in PDF - Theoretische Informatik - Technische Universität ...
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
6.1. BEISPIELE EFFIZIENTER ALGORITHMEN 133<br />
1 <br />
2<br />
2 <br />
2 <br />
4 <br />
3<br />
3<br />
4 <br />
5 <br />
3<br />
5 <br />
1<br />
<br />
<br />
<br />
Beispiel 1 (Topologisches Sortieren). In Abschnitt 2.7 haben wir den folgenden<br />
Algorithmus für das topologische Sortieren e<strong>in</strong>es gerichteten Graphen G = (V, E)<br />
beschrieben:<br />
1: {(1) Initialisierung}<br />
2: i := 0<br />
3: W := V {W – die Menge der noch nicht bearbeiteten Knoten}<br />
4: {(2) Rekursionsschritt}<br />
5: while e<strong>in</strong> Knoten x ∈ W ohne Vorgänger existiert do<br />
6: i := i + 1;<br />
7: ord(x) = i;<br />
8: W := W − {x}<br />
9: Löschen des Knotens x aus dem Graphen<br />
10: od<br />
Wie lange dauert dieser Algorithmus für e<strong>in</strong>en Graphen mit n Knoten? Nehmen<br />
wir an, dass e<strong>in</strong>e E<strong>in</strong>tragung <strong>in</strong> die Liste ord sowie die Modifikation der Variablen<br />
i und W e<strong>in</strong>e konstante Zahl A von Zeite<strong>in</strong>heiten dauert. Um e<strong>in</strong>en Knoten x ohne<br />
Vorgänger zu f<strong>in</strong>den, suchen wir <strong>in</strong> der Adjazenzmatrix e<strong>in</strong>e Spalte mit lauter Nullen;<br />
das dauert Km 2 Zeite<strong>in</strong>heiten, wobei K e<strong>in</strong>e Konstante ist und m die aktuelle<br />
Knotenzahl ( m = n, n − 1, . . .,1), und die Entfernung e<strong>in</strong>es Knotens dauert e<strong>in</strong>e<br />
konstante Zahl L von Zeite<strong>in</strong>heiten. Dann ist die gesamte Zahl von Zeite<strong>in</strong>heiten<br />
für diesen Algorithmus<br />
T = 2A +<br />
n<br />
m=1<br />
(Km 2 + 3A + L) > Cn 3<br />
<br />
für e<strong>in</strong>e Konstante C.<br />
Dieser Algorithmus kann viel effizienter implementiert werden. Diesmal stellen wir<br />
den Graphen mittels Adjazenzlisten dar. Wir bezeichnen für jeden Knoten v mit<br />
IN[v] (e<strong>in</strong> Array, v = 1, . . .,n)<br />
die Zahl aller Kanten mit dem Endknoten v und wir setzen<br />
U = {v; v ∈ V und IN[v] = 0}.<br />
Algorithmus für Topologisches Sortieren<br />
E<strong>in</strong>gabe: Gerichteter Graph G = (V, E) mit n Knoten und k Kanten<br />
Ausgabe: Topologische Sortierung ord : V → {1, . . .,n} von G, falls G azyklisch<br />
ist<br />
1: {(1) Initialisierung}<br />
2: i := 0 {i – die letzte Zahl, die ord benutzt hat}<br />
3: U := ∅ {U - die Menge aller Knoten v mit IN[v] = 0}<br />
4: IN[1] := 0, . . .,IN[n] := 0