Handout - Institut für Theoretische Informatik - Technische ...

Handout - Institut für Theoretische Informatik - Technische ... Handout - Institut für Theoretische Informatik - Technische ...

iti.cs.tu.bs.de
von iti.cs.tu.bs.de Mehr von diesem Publisher
05.11.2013 Aufrufe

6. Komplexität von Algorithmen 6.1 Beispiele effizienter Algorithmen Definition Einer topologischen Sortierung eines gerichteten Graphen G = 〈V , E〉 mit n Knoten ist eine Funktion V ord n = {0, . . . , n − 1} mit der Eigenschaft 〈u, v〉 ∈ E impliziert ord(u) < ord(v) Beispiel •1 •0 •3 •4 •2 Die neue Kante von 4 nach 1 zerstört die topologische Sortierbarkeit. Allgemein kann ein gerichteter Graph genau dann topologisch sortiert werden, wenn er keine Zyklen hat (Test für die Existenz von Zyklen). Jürgen Koslowski (TU-BS) Theoretische Informatik 2 SS 2012 108 / 215

6. Komplexität von Algorithmen 6.1 Beispiele effizienter Algorithmen Beispiel (Naiver Algorithmus für Topologisches Sortieren) Eingabe: Gerichteter Graph G = (V , E) mit n Knoten und k Kanten Ausgabe: Topologische Sortierung V ord n, falls G azyklisch 1: {(0) Initialisierung} 2: i := 0 { i : die Zahl, die ord zuweisen soll} 3: W := V { W : die Menge der noch nicht bearbeiteten Knoten} 4: {(1) Rekursionsschritt} 5: while ein Knoten x ∈ W ohne Vorgänger in W existiert do 6: ord(x) := i 7: i := i + 1 8: W := W − {x} 9: end while {Zyklus falls W ≠ ∅ , sonst topologische Sortierung} Korrektheit: klar. Laufzeit: (unter Verwendung von Adjazenzmatrizen) Die Befehle in Zeilen 3,2,6,7 und 8 benötigen konstante Zeit A . Schleife 5 wird m 2 -mal durchlaufen, mit m = n, . . . , 1 , da W schrumpft; in der Rest-Matrix über W ist eine 0-Spalte zu finden, in Zeit K . n∑ n∑ T (n) = 2A + (Km 2 + 3A) = 2A + K m 2 + 3An ∈ O(n 3 ) m=1 m=1 Jürgen Koslowski (TU-BS) Theoretische Informatik 2 SS 2012 109 / 215

6. Komplexität von Algorithmen 6.1 Beispiele effizienter Algorithmen<br />

Beispiel (Naiver Algorithmus <strong>für</strong> Topologisches Sortieren)<br />

Eingabe: Gerichteter Graph G = (V , E) mit n Knoten und k Kanten<br />

Ausgabe: Topologische Sortierung V ord n, falls G azyklisch<br />

1: {(0) Initialisierung}<br />

2: i := 0 { i : die Zahl, die ord zuweisen soll}<br />

3: W := V { W : die Menge der noch nicht bearbeiteten Knoten}<br />

4: {(1) Rekursionsschritt}<br />

5: while ein Knoten x ∈ W ohne Vorgänger in W existiert do<br />

6: ord(x) := i<br />

7: i := i + 1<br />

8: W := W − {x}<br />

9: end while {Zyklus falls W ≠ ∅ , sonst topologische Sortierung}<br />

Korrektheit: klar.<br />

Laufzeit: (unter Verwendung von Adjazenzmatrizen)<br />

Die Befehle in Zeilen 3,2,6,7 und 8 benötigen konstante Zeit A .<br />

Schleife 5 wird m 2 -mal durchlaufen, mit m = n, . . . , 1 , da W schrumpft;<br />

in der Rest-Matrix über W ist eine 0-Spalte zu finden, in Zeit K .<br />

n∑<br />

n∑<br />

T (n) = 2A + (Km 2 + 3A) = 2A + K m 2 + 3An ∈ O(n 3 )<br />

m=1<br />

m=1<br />

Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 109 / 215

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!