Handout - Institut für Theoretische Informatik - Technische ...
Handout - Institut für Theoretische Informatik - Technische ... Handout - Institut für Theoretische Informatik - Technische ...
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
- Seite 59 und 60: 4. Church-Turing-These 4.2 Rekursiv
- Seite 61 und 62: 4. Church-Turing-These 4.2 Rekursiv
- Seite 63 und 64: 4. Church-Turing-These 4.2 Rekursiv
- Seite 65 und 66: 4. Church-Turing-These 4.2 Rekursiv
- Seite 67 und 68: 4. Church-Turing-These 4.2 Rekursiv
- Seite 69 und 70: 4. Church-Turing-These 4.2 Rekursiv
- Seite 71 und 72: 4. Church-Turing-These 4.2 Rekursiv
- Seite 73 und 74: 4. Church-Turing-These 4.2 Rekursiv
- Seite 75 und 76: 4. Church-Turing-These 4.2 Rekursiv
- Seite 77 und 78: 5. Unentscheidbare Probleme Kapitel
- Seite 79 und 80: 5. Unentscheidbare Probleme 5.1 Uni
- Seite 81 und 82: 5. Unentscheidbare Probleme 5.1 Uni
- Seite 83 und 84: 5. Unentscheidbare Probleme 5.1 Uni
- Seite 85 und 86: 5. Unentscheidbare Probleme 5.2 Das
- Seite 87 und 88: 5. Unentscheidbare Probleme 5.2 Das
- Seite 89 und 90: 5. Unentscheidbare Probleme 5.3 Wei
- Seite 91 und 92: 5. Unentscheidbare Probleme 5.3 Wei
- Seite 93 und 94: 5. Unentscheidbare Probleme 5.3 Wei
- Seite 95 und 96: 5. Unentscheidbare Probleme 5.3 Wei
- Seite 97 und 98: 5. Unentscheidbare Probleme 5.4 Sat
- Seite 99 und 100: 5. Unentscheidbare Probleme 5.4 Sat
- Seite 101 und 102: 6. Komplexität von Algorithmen Kap
- Seite 103 und 104: 6. Komplexität von Algorithmen 6.0
- Seite 105 und 106: 6. Komplexität von Algorithmen 6.0
- Seite 107 und 108: 6. Komplexität von Algorithmen 6.1
- Seite 109: 6. Komplexität von Algorithmen 6.1
- Seite 113 und 114: 6. Komplexität von Algorithmen 6.1
- Seite 115 und 116: 6. Komplexität von Algorithmen 6.1
- Seite 117 und 118: 6. Komplexität von Algorithmen 6.1
- Seite 119 und 120: 6. Komplexität von Algorithmen 6.1
- Seite 121 und 122: 6. Komplexität von Algorithmen 6.2
- Seite 123 und 124: 6. Komplexität von Algorithmen 6.2
- Seite 125 und 126: 6. Komplexität von Algorithmen 6.2
- Seite 127 und 128: 6. Komplexität von Algorithmen 6.2
- Seite 129 und 130: 6. Komplexität von Algorithmen 6.3
- Seite 131 und 132: 6. Komplexität von Algorithmen 6.3
- Seite 133 und 134: 6. Komplexität von Algorithmen 6.4
- Seite 135 und 136: 6. Komplexität von Algorithmen 6.4
- Seite 137 und 138: 6. Komplexität von Algorithmen 6.4
- Seite 139 und 140: 6. Komplexität von Algorithmen 6.4
- Seite 141 und 142: 6. Komplexität von Algorithmen 6.4
- Seite 143 und 144: 6. Komplexität von Algorithmen 6.5
- Seite 145 und 146: 6. Komplexität von Algorithmen 6.5
- Seite 147 und 148: 6. Komplexität von Algorithmen 6.6
- Seite 149 und 150: 6. Komplexität von Algorithmen 6.6
- Seite 151 und 152: 6. Komplexität von Algorithmen 6.7
- Seite 153 und 154: 6. Komplexität von Algorithmen 6.7
- Seite 155 und 156: 6. Komplexität von Algorithmen 6.7
- Seite 157 und 158: 6. Komplexität von Algorithmen 6.7
- Seite 159 und 160: 6. Komplexität von Algorithmen 6.7
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