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 Beispiel (Verbesserter Algorithmus für topologisches Sortieren) 1: {(0) Initialisierung} 2: i := 0 {Laufzeit A , i : die Zahl, die ord zuweisen soll} { A } 3: for alle Knoten v in V do 4: In[v] := 0 {Laufzeit A , In[v] : Vorgängeranzahl von v } 5: end for {Laufzeit A · n } { A · n } 6: for alle Knoten u in V do 7: for alle Knoten v mit einer Kante (u, v) in E do 8: In[v] := In[v] + 1 {Laufzeit A } 9: end for {Laufzeit A · k(v) , k(v) Länge der Nachfolgerliste von v } 10: end for {Laufzeit A · k bei Adjazenzlisten} { A · k } 11: U := ∅ {Laufzeit A , U - Menge aller Knoten v mit In[v] = 0 } { A } 12: for alle Knoten v in V do 13: if In[v] = 0 then 14: U := U ∪ {v} 15: end if {Laufzeit 2A } 16: end for {Laufzeit 2A · n } { 2A · n } 17: {(1) Rekursionsschritt} 18: while U einen Knoten v enthält do 19: U := U − {v} ; ord(v) := i ; i := i + 1 {Laufzeit 3A } 20: for alle Knoten w mit (v, w) ∈ E do 21: In[w] := In[w] − 1 {Laufzeit A } 22: if In[w] = 0 then 23: U := U ∪ {w} 24: end if {Laufzeit 2A } 25: end for {Laufzeit 3A · k(v) } 26: end while {Laufzeit 3A · (n + k) , Zyklus falls i < n , sonst topologische Sortierung} { 3A · (n + k) } Jürgen Koslowski (TU-BS) Theoretische Informatik 2 SS 2012 110 / 215

6. Komplexität von Algorithmen 6.1 Beispiele effizienter Algorithmen Beispiel (Fortsetzung) Gesamtlaufzeit: T (n, k) = 4A(n + k) + 2A(n + 1) ∈ O(n + k) . Die FOR-Schleifen in Zeilen 6 und 7 garantieren nur in dieser Reihenfolge eine Laufzeit von A · k in Zeile 10. Bei umgekehrter Reihenfolge, oder Verwendung von Adjazenzmatrizen, ergäbe sich hier A · n 2 . Ein ähnliches Argument liefert für die FOR-Schleife in Zeile 20 innerhalb der WHILE-Schleife in Zeile 18 den Term 3A · k in Zeile 26. Im Falle von Adjazenzmatrizen stünde hier 3A · n 2 . Damit wäre bei Verwendung von Adjazenzmatrizen die Laufzeit gegeben durch T (n) = 4A · (n + n 2 ) + 2A · (n + 1) ∈ O(n 2 ) . Bei der Bestimmung der Effizienz kommt es also darauf an, wie man die Größe der Eingabe definiert: Hinsichtlich der Knotenzahl |V | läuft der Algorithmus mit Adjazenzmatrizen in quadratischer Zeit, verglichen mit kubischer Zeit des naiven Algorithmus. Hinsichtlich der Summe |V | + |E| läuft der obige Algorithmus in linearer Zeit. Jürgen Koslowski (TU-BS) Theoretische Informatik 2 SS 2012 111 / 215

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

Beispiel (Verbesserter Algorithmus <strong>für</strong> topologisches Sortieren)<br />

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

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

3: for alle Knoten v in V do<br />

4: In[v] := 0 {Laufzeit A , In[v] : Vorgängeranzahl von v }<br />

5: end for {Laufzeit A · n } { A · n }<br />

6: for alle Knoten u in V do<br />

7: for alle Knoten v mit einer Kante (u, v) in E do<br />

8: In[v] := In[v] + 1 {Laufzeit A }<br />

9: end for {Laufzeit A · k(v) , k(v) Länge der Nachfolgerliste von v }<br />

10: end for {Laufzeit A · k bei Adjazenzlisten} { A · k }<br />

11: U := ∅ {Laufzeit A , U - Menge aller Knoten v mit In[v] = 0 } { A }<br />

12: for alle Knoten v in V do<br />

13: if In[v] = 0 then<br />

14: U := U ∪ {v}<br />

15: end if {Laufzeit 2A }<br />

16: end for {Laufzeit 2A · n } { 2A · n }<br />

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

18: while U einen Knoten v enthält do<br />

19: U := U − {v} ; ord(v) := i ; i := i + 1 {Laufzeit 3A }<br />

20: for alle Knoten w mit (v, w) ∈ E do<br />

21: In[w] := In[w] − 1 {Laufzeit A }<br />

22: if In[w] = 0 then<br />

23: U := U ∪ {w}<br />

24: end if {Laufzeit 2A }<br />

25: end for {Laufzeit 3A · k(v) }<br />

26: end while {Laufzeit 3A · (n + k) , Zyklus falls i < n , sonst topologische Sortierung} { 3A · (n + k) }<br />

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

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!