1. Übung – Algorithmen I Timo Bingmann, Christian Schulz I NSTITUT FÜR T HEORETISCHE I NFORMATIK , P ROF. S ANDERS Bingmann, Schulz 1 KITTimo – Universität des Landes Christian Baden-Württemberg und nationales Forschungszentrum in der Helmholtz-Gemeinschaft 1. Übung – Algorithmen I Fakultät für Informatik www.kit.edu Institut für Theoretische Informatik Organistorisches Bonus - Änderung 0% ≤ der Übungspunkte < 25% ⇒ 0 Bonuspunkt 25% ≤ der Übungspunkte < 50% ⇒ 1 Bonuspunkt 50% ≤ der Übungspunkte < 75% ⇒ 2 Bonuspunkte 75% ≤ der Übungspunkte ⇒ 3 Bonuspunkte für die Klausur 2 Timo Bingmann, Christian Schulz 1. Übung – Algorithmen I Fakultät für Informatik Institut für Theoretische Informatik Asymptotik 3 Timo Bingmann, Christian Schulz 1. Übung – Algorithmen I Fakultät für Informatik Institut für Theoretische Informatik Rechenzeit bei 109 Ops pro Sekunde n 1000 log2 n 10 3.3 µs 4.3 µs 20 50 5.6 µs 100 6.6 µs 250 8.0 µs 500 9.0 µs 1 000 10.0 µs 5 000 12.3 µs 10 000 13.3 µs 100 000 16.6 µs 106 20 µs 107 23 µs 108 27 µs 109 30 µs 1010 33 µs 1011 36 µs 4 Timo Bingmann, Christian Schulz 1. Übung – Algorithmen I 500n 100n log2 n 5 µs 3.3 µs 10 µs 8.6 µs 25 µs 28.2 µs 50 µs 66.4 µs 125 µs 199 µs 250 µs 448 µs 500 µs 1 ms 2.5 ms 6.1 ms 5 ms 13.3 ms 50 ms 166 ms 500 ms 2s 5s 23 s 50 s 4.4 min 8.3 min 50 min 1.4 h 9.2 h 13.9 h 4.2 d 10n2 1 µs 4 µs 25 µs 100 µs 625 µs 2.5 ms 10 ms 250 ms 1s 100 s 2.7 h 11.6 d 3.2 a 317 a 104.5 a − n3 1 µs 8 µs 125 µs 1 ms 15 ms 125 ms 1s 125 s 16 min 11.6 d 31.7 a 104.5 a 107.5 a − 2n 1 µs 1.05 ms 13 h 1013 a − Fakultät für Informatik Institut für Theoretische Informatik O-Kalkül 5 Timo Bingmann, Christian Schulz 1. Übung – Algorithmen I Fakultät für Informatik Institut für Theoretische Informatik O-Kalkül O(g (n)) = {f : N → R | ∃ c > 0 ∃ n0 ∈ N ∀ n ≥ n0 : f (n) ≤ c · g (n)} Ω(g (n)) = {f : N → R | ∃ c > 0 ∃ n0 ∈ N ∀ n ≥ n0 : f (n) ≥ c · g (n)} 5 Timo Bingmann, Christian Schulz 1. Übung – Algorithmen I Fakultät für Informatik Institut für Theoretische Informatik O-Kalkül O(g (n)) = {f : N → R | ∃ c > 0 ∃ n0 ∈ N ∀ n ≥ n0 : f (n) ≤ c · g (n)} Ω(g (n)) = {f : N → R | ∃ c > 0 ∃ n0 ∈ N ∀ n ≥ n0 : f (n) ≥ c · g (n)} o(g (n)) = {f : N → R | ∀ c > 0 ∃ n0 ∈ N ∀ n ≥ n0 : f (n) ≤ c · g (n)} ω(g (n)) = {f : N → R | ∀ c > 0 ∃ n0 ∈ N ∀ n ≥ n0 : f (n) ≥ c · g (n)} 5 Timo Bingmann, Christian Schulz 1. Übung – Algorithmen I Fakultät für Informatik Institut für Theoretische Informatik O-Kalkül O(g (n)) = {f : N → R | ∃ c > 0 ∃ n0 ∈ N ∀ n ≥ n0 : f (n) ≤ c · g (n)} Ω(g (n)) = {f : N → R | ∃ c > 0 ∃ n0 ∈ N ∀ n ≥ n0 : f (n) ≥ c · g (n)} Θ(g (n)) = {f : N → R | ∃ c1 > 0, c2 > 0 ∃ n0 ∈ N ∀ n ≥ n0 : c1 · g (n) ≤ f (n) ≤ c2 · g (n)} o(g (n)) = {f : N → R | ∀ c > 0 ∃ n0 ∈ N ∀ n ≥ n0 : f (n) ≤ c · g (n)} ω(g (n)) = {f : N → R | ∀ c > 0 ∃ n0 ∈ N ∀ n ≥ n0 : f (n) ≥ c · g (n)} 5 Timo Bingmann, Christian Schulz 1. Übung – Algorithmen I Fakultät für Informatik Institut für Theoretische Informatik Intuition zum O-Kalkül O(g (n)) = {f : N → R | ∃ c > 0 ∃ n0 ∈ N ∀ n ≥ n0 : f (n) ≤ c · g (n)} 80 60 f1 (n) 40 20 0 0 1 2 6 Timo Bingmann, Christian Schulz 1. Übung – Algorithmen I 3 4 5 6 7 8 9 10 Fakultät für Informatik Institut für Theoretische Informatik Intuition zum O-Kalkül O(g (n)) = {f : N → R | ∃ c > 0 ∃ n0 ∈ N ∀ n ≥ n0 : f (n) ≤ c · g (n)} 80 c1 · n 60 f1 (n) 40 20 0 0 1 2 6 Timo Bingmann, Christian Schulz 1. Übung – Algorithmen I 3 4 5 6 7 8 9 10 Fakultät für Informatik Institut für Theoretische Informatik Intuition zum O-Kalkül O(g (n)) = {f : N → R | ∃ c > 0 ∃ n0 ∈ N ∀ n ≥ n0 : f (n) ≤ c · g (n)} 80 c1 · n 60 f1 (n) 40 20 0 0 1 2 6 Timo Bingmann, Christian Schulz 1. Übung – Algorithmen I 3 4 5 6 7 8 9 10 Fakultät für Informatik Institut für Theoretische Informatik Intuition zum O-Kalkül O(g (n)) = {f : N → R | ∃ c > 0 ∃ n0 ∈ N ∀ n ≥ n0 : f (n) ≤ c · g (n)} 80 c1 · n 60 f1 (n) = O(n) 40 20 n0 → 0 0 1 2 6 Timo Bingmann, Christian Schulz 1. Übung – Algorithmen I 3 4 5 6 7 8 9 10 Fakultät für Informatik Institut für Theoretische Informatik Intuition zum O-Kalkül O(g (n)) = {f : N → R | ∃ c > 0 ∃ n0 ∈ N ∀ n ≥ n0 : f (n) ≤ c · g (n)} 80 f2 (n) c1 · n 60 f1 (n) 40 20 n0 → 0 0 1 2 6 Timo Bingmann, Christian Schulz 1. Übung – Algorithmen I 3 4 5 6 7 8 9 10 Fakultät für Informatik Institut für Theoretische Informatik Intuition zum O-Kalkül Ω(g (n)) = {f : N → R | ∃ c > 0 ∃ n0 ∈ N ∀ n ≥ n0 : f (n) ≥ c · g (n)} 80 f2 (n) = Ω(n) c1 · n 60 f1 (n) 40 20 n0 → 0 0 1 2 6 Timo Bingmann, Christian Schulz 1. Übung – Algorithmen I 3 4 5 6 7 8 9 10 Fakultät für Informatik Institut für Theoretische Informatik Intuition zum O-Kalkül ω(g (n)) = {f : N → R | ∀ c > 0 ∃ n0 ∈ N ∀ n ≥ n0 : f (n) ≥ c · g (n)} 80 c1 · n f2 (n) = ω(n) 60 f1 (n) 40 20 n0 → 0 0 1 2 6 Timo Bingmann, Christian Schulz 1. Übung – Algorithmen I 3 4 5 6 7 8 9 10 Fakultät für Informatik Institut für Theoretische Informatik Intuition zum O-Kalkül ω(g (n)) = {f : N → R | ∀ c > 0 ∃ n0 ∈ N ∀ n ≥ n0 : f (n) ≥ c · g (n)} 150 c1 · n 100 f2 (n) 6= ω(n) 50 0 0 2 4 7 Timo Bingmann, Christian Schulz 1. Übung – Algorithmen I n0 → 6 8 10 12 14 16 18 20 Fakultät für Informatik Institut für Theoretische Informatik Intuition zum O-Kalkül ω(g (n)) = {f : N → R | ∀ c > 0 ∃ n0 ∈ N ∀ n ≥ n0 : f (n) ≥ c · g (n)} 150 Nur Intuition! c1 · n 100 f2 (n) 6= ω(n) 50 0 0 2 4 7 Timo Bingmann, Christian Schulz 1. Übung – Algorithmen I n0 → 6 8 10 12 14 16 18 20 Fakultät für Informatik Institut für Theoretische Informatik O-Kalkül Für nicht-negative f , g : N → R gelten folgende Äquivalenzen: 1 f (n) = O(g (n)) ⇐⇒ 0 ≤ lim sup n→∞ 8 Timo Bingmann, Christian Schulz 1. Übung – Algorithmen I f (n) < ∞, g (n ) Fakultät für Informatik Institut für Theoretische Informatik O-Kalkül Für nicht-negative f , g : N → R gelten folgende Äquivalenzen: 1 f (n) = O(g (n)) ⇐⇒ 2 f (n) = Ω (g (n)) ⇐⇒ 3 f (n) = o(g (n)) ⇐⇒ 4 f (n) = ω(g (n)) ⇐⇒ 5 f (n) = Θ(g (n)) 8 Timo Bingmann, Christian Schulz 1. Übung – Algorithmen I ⇐= f (n) < ∞, n→∞ g (n) f (n) ≤ ∞, 0 < lim inf n→∞ g (n) f (n) lim = 0, n→∞ g (n) f (n) lim = ∞, n→∞ g (n) f (n ) lim = c > 0. n→∞ g (n) 0 ≤ lim sup Fakultät für Informatik Institut für Theoretische Informatik Basis des Logarithmus O(log n) FAQ: Zu welcher Basis ist der Logarithmus? 9 Timo Bingmann, Christian Schulz 1. Übung – Algorithmen I Fakultät für Informatik Institut für Theoretische Informatik Basis des Logarithmus O(log n) FAQ: Zu welcher Basis ist der Logarithmus? Im Zweifelsfall zur Basis 2 (in der Informatik). Im O(·)-Kalkül meistens egal: z. B. O . . . · logk n für fixes k denn loga x = logb x / logb a = c logb x für eine Konstante c ⇒ kein Unterschied im O-Kalkül 9 Timo Bingmann, Christian Schulz 1. Übung – Algorithmen I Fakultät für Informatik Institut für Theoretische Informatik Invarianten in der Informatik 10 Timo Bingmann, Christian Schulz 1. Übung – Algorithmen I Fakultät für Informatik Institut für Theoretische Informatik Invarianten in der Informatik Idee der Anwendung finde Schleifeninvariante zeige Schleifeninvariante Schleifeninvariante und sonstiges Wissen ⇒ Korrektheit des Algorithmus Function max(A : Array [0..n] of R) : assert A.size() > 0 i=0 : N≥0 for j := 1 to n do if A[j ] > A[i ] then i := j assert i = argmax`≤n A[`] return i 11 Timo Bingmann, Christian Schulz 1. Übung – Algorithmen I // // Vorbedingung Nachbedingung Fakultät für Informatik Institut für Theoretische Informatik Invarianten in der Informatik Beispiel I for j := 0 to n do if A[j ] > A[i ] then i := j assert i = argmax`≤j A[`] // Invariante Beweis: j = 0: klar j − 1 → j: es gilt i = argmax`<j A[`], also A[i ] = max`<j A[`] 1 2 Fall 1: A[j ] > A[i ] = max`<j A[`] → update i → Beh. Fall 2: A[j ] ≤ A[i ] = max`<j A[`] → kein update → Beh. 12 Timo Bingmann, Christian Schulz 1. Übung – Algorithmen I Fakultät für Informatik Institut für Theoretische Informatik Invarianten in der Informatik Beispiel I Function max(A : Array [0..n] of R) : assert A.size() > 0 i=0 : N≥0 for j := 1 to n do if A[j ] > A[i ] then i := j assert i = argmax`≤j A[`] assert i = argmax`≤n A[`] return i // Vorbedingung // // Invariante Nachbedingung Nach Beenden der Schleife gilt j = n und i = argmax`≤j A[`] Also die Nachbedingung: i = argmax`≤n A[`] und damit die Korrektheit unseres Algorithmus 13 Timo Bingmann, Christian Schulz 1. Übung – Algorithmen I Fakultät für Informatik Institut für Theoretische Informatik Invarianten in der Informatik Beispiel II Function funWithAlgorithms(n : N) : assert n odd Z := {1, . . . , 2n} P P2n S := z ∈Z z = i =1 i while |Z | > 1 do pick a, b with a 6= b from Z Z ← Z \{a, b} // Z ← ∪{|a − b|} assert |Z | = 1 14 Timo Bingmann, Christian Schulz 1. Übung – Algorithmen I // Vorbedingung enferne zwei zufällige Zahlen aus Z // füge |a − b| hinzu // Nachbedingung I Fakultät für Informatik Institut für Theoretische Informatik Invarianten in der Informatik Beispiel II Ziel: Zeige die Zahl die übrig bleibt ist ungerade Function funWithAlgorithms(n : N) : assert n odd Z := {1, . . . , 2n} P P2n S := z ∈Z z = i =1 i while |Z | > 1 do pick a, b with a 6= b from Z Z ← Z \{a, b} // Z ← ∪{|a − b|} assert |Z | = 1 assert Z [0] odd 15 Timo Bingmann, Christian Schulz 1. Übung – Algorithmen I // Vorbedingung enferne zwei zufällige Zahlen aus Z // füge |a − b| hinzu // Nachbedingung I // Nachbedingung II Fakultät für Informatik Institut für Theoretische Informatik Invarianten in der Informatik Beispiel II Ziel: Zeige die Zahl die übrig bleibt ist ungerade Function funWithAlgorithms(n : N) : assert n odd Z := {1, . . . , 2n} P P2n S := z ∈Z z = i =1 i assert S odd while |Z | > 1 do pick a, b with a 6= b from Z Z ← Z \{a, b} // Z ←Z∪ {| a − b |} P assert z ∈Z z odd assert Z [0] odd 16 Timo Bingmann, Christian Schulz 1. Übung – Algorithmen I // Vorbedingung // Vorbedingung enferne zwei zufällige Zahlen aus Z // // füge |a − b| hinzu // Invariante Nachbedingung I Fakultät für Informatik Institut für Theoretische Informatik Invarianten Beispiel II P2n IA: S = i =1 i = 21 (2n(2n + 1)) = n(2n + 1) ungerade P IS: Annahme S = z ∈Z z ungerade P zu zeigen: S 0 := z ∈Z \{a,b}∪{|a−b|} z ungerade Beweis: S 0 = S − a − b + |a − b| = S − 2 · min a, b Also P z ∈Z z bleibt ungerade! 17 Timo Bingmann, Christian Schulz 1. Übung – Algorithmen I Fakultät für Informatik Institut für Theoretische Informatik Invarianten in der Informatik Beispiel III Ziel: Nach Terminierung enthält b die binäre Repräsentation von n Function convertToBinary(n : N) : b := Array < 0, . . . , 0 > t := n k := −1 while t > 0 do k := k + 1 b[k ] := t mod 2 t := t div 2 18 Timo Bingmann, Christian Schulz 1. Übung – Algorithmen I // binary representation of n Fakultät für Informatik Institut für Theoretische Informatik Invarianten in der Informatik Beispiel III Wieder drei Schritte zu tun: 1 Hypothese vor Beginn der Schleife wahr 2 Invar. gilt im k ’ten ⇒ Invar. gilt im k + 1’ten Schritt 3 Nach Terminierung, Invariante ⇒ Korrektheit des Algorithmus Invariante: n = t · 2k +1 + m mit m die Zahl, die durch b[0, . . . , k ] repräsentiert wird 19 Timo Bingmann, Christian Schulz 1. Übung – Algorithmen I Fakultät für Informatik Institut für Theoretische Informatik Invarianten in der Informatik Beispiel III - Anfang m die Zahl, die durch b[0, . . . , k ] repräsentiert wird Function convertToBinary(n : N) : b := Array < 0, . . . , 0 > t := n k := −1 assert n = t · 2k +1 + m while t > 0 do k := k + 1 b[k ] := t mod 2 t := t div 2 20 Timo Bingmann, Christian Schulz 1. Übung – Algorithmen I // binary representation of n Fakultät für Informatik Institut für Theoretische Informatik Invarianten in der Informatik Beispiel III - Schluss m die Zahl, die durch b[0, . . . , k ] repräsentiert wird k := k + 1 b[k ] := t mod 2 t := t div 2 Beweis (k → k + 1): es gelte vor der Iteration n = t · 2k +1 + m Fall 1: t gerade 1 2 3 b[k + 1] = t mod 2 = 0 t 0 := t /2 k 0 := k + 1, m unverändert nach der Iteration: t /2 · 2k +2 + m = t · 2k +1 + m = n 21 Timo Bingmann, Christian Schulz 1. Übung – Algorithmen I Fakultät für Informatik Institut für Theoretische Informatik Invarianten in der Informatik Beispiel III - IS m die Zahl, die durch b[0, . . . , k ] repräsentiert wird Beweis (k → k + 1): es gelte vor der Iteration n = t · 2k +1 + m Fall 2: t ungerade 1 2 3 b[k + 1] = t mod 2 = 1 → m0 := m + 2k +1 t 0 := (t − 1)/2 k 0 := k + 1 nach der Iteration: (t − 1)/2 · 2k +2 + m + 2k +1 = (t − 1) · 2k +1 + m + 2k +1 = t · 2k +1 + m = n 22 Timo Bingmann, Christian Schulz 1. Übung – Algorithmen I Fakultät für Informatik Institut für Theoretische Informatik Invarianten in der Informatik Beispiel III - Schluss m die Zahl, die durch b[0, . . . , k ] repräsentiert wird while t > 0 do k := k + 1 b[k ] := t mod 2 t := t div 2 assert n = t · 2k +1 + m nach der Ausführung der Schleife t = 0 damit folgt die Korrektheit des Algorithmus 23 Timo Bingmann, Christian Schulz 1. Übung – Algorithmen I Fakultät für Informatik Institut für Theoretische Informatik Modellierungen mit Graphen 24 Timo Bingmann, Christian Schulz 1. Übung – Algorithmen I Fakultät für Informatik Institut für Theoretische Informatik Modellierungen Tasks mit Abhängigkeiten Problem: Frage: Menge von Aufgaben/Task und Abhängigkeiten Aufgaben ausführbar? Reihenfolge? Welche der dargestellten Pläne sind ausführbar? 25 Timo Bingmann, Christian Schulz 1. Übung – Algorithmen I Fakultät für Informatik Institut für Theoretische Informatik Modellierungen Tasks mit Abhängigkeiten Problem: Frage: Menge von Aufgaben/Task und Abhängigkeiten Aufgaben ausführbar? Reihenfolge? s t z v w x y u Wie findet man einen Schedule? w, y, u, t, ... 26 Timo Bingmann, Christian Schulz 1. Übung – Algorithmen I Fakultät für Informatik Institut für Theoretische Informatik Modellierungen Tasks mit Abhängigkeiten Problem: Frage: Menge von Aufgaben/Task und Abhängigkeiten Aufgaben ausführbar? Reihenfolge? Wie findet man einen Schedule? w, y, u, t, ... Algorithmus aus der VL (DAG)! Iteratives entfernen von Knoten mit Ausgangsgrad 0! 27 Timo Bingmann, Christian Schulz 1. Übung – Algorithmen I Fakultät für Informatik Institut für Theoretische Informatik Modellierungen Tasks mit Abhängigkeiten Iteratives entfernen von Knoten mit Ausgangsgrad 0! w 28 Timo Bingmann, Christian Schulz 1. Übung – Algorithmen I Fakultät für Informatik Institut für Theoretische Informatik Modellierungen Tasks mit Abhängigkeiten Iteratives entfernen von Knoten mit Ausgangsgrad 0! y,w 29 Timo Bingmann, Christian Schulz 1. Übung – Algorithmen I Fakultät für Informatik Institut für Theoretische Informatik Modellierungen Tasks mit Abhängigkeiten Iteratives entfernen von Knoten mit Ausgangsgrad 0! u,y,w 30 Timo Bingmann, Christian Schulz 1. Übung – Algorithmen I Fakultät für Informatik Institut für Theoretische Informatik Modellierungen Tasks mit Abhängigkeiten Iteratives entfernen von Knoten mit Ausgangsgrad 0! t,u,y,w 31 Timo Bingmann, Christian Schulz 1. Übung – Algorithmen I Fakultät für Informatik Institut für Theoretische Informatik Modellierungen Tasks mit Abhängigkeiten Iteratives entfernen von Knoten mit Ausgangsgrad 0! ...,s,t,u,y,w 32 Timo Bingmann, Christian Schulz 1. Übung – Algorithmen I Fakultät für Informatik Institut für Theoretische Informatik Modellierungen Topologische Sortieren Topologische Sortierung t: ∀(u , v ) ∈ E : t (u ) < t (v ) x 1 v 2 z 3 s 4 t 5 u w y 7 6 8 Merke: isDAG (aus VL) kann topologischen Sortieren nur falls G kreisfrei 33 Timo Bingmann, Christian Schulz 1. Übung – Algorithmen I Fakultät für Informatik Institut für Theoretische Informatik