Skript in PDF - Theoretische Informatik - Technische Universität ...
Skript in PDF - Theoretische Informatik - Technische Universität ...
Skript in PDF - Theoretische Informatik - Technische Universität ...
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
134 KAPITEL 6. KOMPLEXITÄT VON ALGORITHMEN<br />
5: for alle Knoten v <strong>in</strong> V do<br />
6: for alle Knoten w mit e<strong>in</strong>er Kante (v, w) <strong>in</strong> E do<br />
7: IN[w] := IN[w] + 1<br />
8: end for<br />
9: end for<br />
10: for alle Knoten v <strong>in</strong> V do<br />
11: if IN[w] = 0 then<br />
12: U := U ∪ {v}<br />
13: end if<br />
14: end for<br />
15: {(2) Rekursionsschritt}<br />
16: while U e<strong>in</strong>en Knoten v enthält do<br />
17: U := U − v<br />
18: i := i + 1<br />
19: ord(v) := i<br />
20: for alle Knoten w mit (v, w) ∈ E do<br />
21: IN[w] := IN[w] − 1<br />
22: if IN[w] = 0 then<br />
23: U := U ∪ {w}<br />
24: end if<br />
25: end for<br />
26: od<br />
27: {(3) Ausgabe}<br />
28: Falls n = i, ist ord e<strong>in</strong>e topologische Sortierung von G.<br />
29: Falls n > i, ist die Ausgabe e<strong>in</strong> Code dafür, dass G nicht azyklisch ist.<br />
Korrektheit: Für jeden azyklischen Graphen G ist ord e<strong>in</strong>e topologische Sortierung<br />
von G. Das folgt daraus, dass jeder azyklische Graph e<strong>in</strong>en Knoten ohne Vorgänger<br />
hat. Deshalb ist U = ∅, solange nicht alle Knoten sortiert worden s<strong>in</strong>d. Für jede<br />
Kante (v, w) von G gilt: falls <strong>in</strong> e<strong>in</strong>em Durchgang der Schleife 16–26 der Wert<br />
ord(v) := i zugeordnet wird, hat vor diesem Durchgang IN[w] e<strong>in</strong>en Wert ≥ 1.<br />
Deswegen wird der Wert ord(w) erst <strong>in</strong> e<strong>in</strong>em Durchgang i + k, k ≥ 1, zugewiesen<br />
und es folgt ord(v) < ord(w).<br />
Zeitkomplexität: Wir wollen die Zahl der Zeite<strong>in</strong>heiten bestimmen, die dieser Algorithmus<br />
für Graphen mit n Knoten und k Kanten braucht. Das hängt von der<br />
Implementierung ab. Wir nehmen an, dass die mengentheoretischen Operationen<br />
(<strong>in</strong>sert, delete) so implementiert werden, dass sie e<strong>in</strong>e konstante Zahl A von Zeite<strong>in</strong>heiten<br />
brauchen, und auch jede Zuweisung A Zeite<strong>in</strong>heiten benötigt.<br />
Dann dauert die Initialisierung:<br />
Zeile Zeitkomplexität<br />
2. A<br />
3. A<br />
4. An<br />
5.–9. n + Ak<br />
10.–14. 2An<br />
(3A + 1)n + Ak Zeite<strong>in</strong>heiten<br />
Nur die Zeilen 5.–9. benötigt e<strong>in</strong>e Erklärung: bezeichnen wir mit k(v) die Zahl aller<br />
Nachfolger von v. Die Implementierung mit Adjazenzlisten erlaubt e<strong>in</strong>e Durchführung<br />
der Schleife 6.–8. <strong>in</strong> Zeit Ak(v). Die ganze Schleife dauert n+ n v=1 Ak(v) = n+Ak<br />
Zeite<strong>in</strong>heiten.<br />
Im Rekursionsschritt dauert 20.–25. 3Ak(v) Schritte. Da die Rekursion n-mal wie-