Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

Ähnliche Präsentationen


Präsentation zum Thema: "LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)"—  Präsentation transkript:

1 LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

2 LS 2 / Informatik 2 Graphalgorithmen Idee des Algorithmus von Prim  Verwende generischen Algorithmus  Nimm immer eine Kante mit minimalem Gewicht, die einen Knoten in Baum A mit einem Knoten verbindet, der nicht in Baum A ist und füge diese zu A hinzu  Die Kante ist eine leichte Kante, die Baum A mit einem weiteren Knoten verbindet  Damit ist sie sicher für A

3 LS 2 / Informatik 3 Graphalgorithmen Prim(G,r) 1. Q ←V –{r} 2. A ← ∅ 3. while Q ≠ ∅ 4. Finde Kante (u,v) mit minimalem Gewicht, die den Schnitt (Q,V-Q) kreuzt, wobei u ∈ Q 5. Q ←Q - {u} 6. A ←A ∪ {(u,v)} 7. return A 5 6 3 5 8 9 1 4 3 10 7

4 LS 2 / Informatik 4 Graphalgorithmen Prim(G,r) 1. Q ←V –{r} 2. A ← ∅ 3. while Q ≠ ∅ 4. Finde Kante (u,v) mit minimalem Gewicht, die den Schnitt (Q,V-Q) kreuzt, wobei u ∈ Q 5. Q ←Q - {u} 6. A ←A ∪ {(u,v)} 7. return A 5 6 3 5 8 9 1 4 3 10 7

5 LS 2 / Informatik 5 Prim(G,r) 1. Q ←V –{r} 2. A ← ∅ 3. while Q ≠ ∅ 4. Finde Kante (u,v) mit minimalem Gewicht, die den Schnitt (Q,V-Q) kreuzt, wobei u ∈ Q 5. Q ←Q - {u} 6. A ←A ∪ {(u,v)} 7. return A Graphalgorithmen 5 6 3 5 8 9 1 4 3 10 7

6 LS 2 / Informatik 6 Prim(G,r) 1. Q ←V –{r} 2. A ← ∅ 3. while Q ≠ ∅ 4. Finde Kante (u,v) mit minimalem Gewicht, die den Schnitt (Q,V-Q) kreuzt, wobei u ∈ Q 5. Q ←Q - {u} 6. A ←A ∪ {(u,v)} 7. return A Graphalgorithmen 5 6 3 5 8 9 1 4 3 10 7

7 LS 2 / Informatik 7 Prim(G,r) 1. Q ←V –{r} 2. A ← ∅ 3. while Q ≠ ∅ 4. Finde Kante (u,v) mit minimalem Gewicht, die den Schnitt (Q,V-Q) kreuzt, wobei u ∈ Q 5. Q ←Q - {u} 6. A ←A ∪ {(u,v)} 7. return A Graphalgorithmen 5 6 3 5 8 9 1 4 3 10 7

8 LS 2 / Informatik 8 Prim(G,r) 1. Q ←V –{r} 2. A ← ∅ 3. while Q ≠ ∅ 4. Finde Kante (u,v) mit minimalem Gewicht, die den Schnitt (Q,V-Q) kreuzt, wobei u ∈ Q 5. Q ←Q - {u} 6. A ←A ∪ {(u,v)} 7. return A Graphalgorithmen 5 6 3 5 8 9 1 4 3 10 7

9 LS 2 / Informatik 9 Prim(G,r) 1. Q ←V –{r} 2. A ← ∅ 3. while Q ≠ ∅ 4. Finde Kante (u,v) mit minimalem Gewicht, die den Schnitt (Q,V-Q) kreuzt, wobei u ∈ Q 5. Q ←Q - {u} 6. A ←A ∪ {(u,v)} 7. return A Graphalgorithmen 5 6 3 5 8 9 1 4 3 10 7

10 LS 2 / Informatik 10 Prim(G,r) 1. Q ←V –{r} 2. A ← ∅ 3. while Q ≠ ∅ 4. Finde Kante (u,v) mit minimalem Gewicht, die den Schnitt (Q,V-Q) kreuzt, wobei u ∈ Q 5. Q ←Q - {u} 6. A ←A ∪ {(u,v)} 7. return A Graphalgorithmen 5 6 3 5 8 9 1 4 3 10 7

11 LS 2 / Informatik 11 Prim(G,r) 1. Q ←V –{r} 2. A ← ∅ 3. while Q ≠ ∅ 4. Finde Kante (u,v) mit minimalem Gewicht, die den Schnitt (Q,V-Q) kreuzt, wobei u ∈ Q 5. Q ←Q - {u} 6. A ←A ∪ {(u,v)} 7. return A Graphalgorithmen 5 6 3 5 8 9 1 4 3 10 7

12 LS 2 / Informatik 12 Prim(G,r) 1. Q ←V –{r} 2. A ← ∅ 3. while Q ≠ ∅ 4. Finde Kante (u,v) mit minimalem Gewicht, die den Schnitt (Q,V-Q) kreuzt, wobei u ∈ Q 5. Q ←Q - {u} 6. A ←A ∪ {(u,v)} 7. return A Graphalgorithmen 5 6 3 5 8 9 1 4 3 10 7

13 LS 2 / Informatik 13 Prim(G,r) 1. Q ←V –{r} 2. A ← ∅ 3. while Q ≠ ∅ 4. Finde Kante (u,v) mit minimalem Gewicht, die den Schnitt (Q,V-Q) kreuzt, wobei u ∈ Q 5. Q ←Q - {u} 6. A ←A ∪ {(u,v)} 7. return A Graphalgorithmen 5 6 3 5 8 9 1 4 3 10 7

14 LS 2 / Informatik 14 Prim(G,r) 1. Q ←V –{r} 2. A ← ∅ 3. while Q ≠ ∅ 4. Finde Kante (u,v) mit minimalem Gewicht, die den Schnitt (Q,V-Q) kreuzt, wobei u ∈ Q 5. Q ←Q - {u} 6. A ←A ∪ {(u,v)} 7. return A Graphalgorithmen 5 6 3 5 8 9 1 4 3 10 7

15 LS 2 / Informatik 15 Prim(G,r) 1. Q ←V –{r} 2. A ← ∅ 3. while Q ≠ ∅ 4. Finde Kante (u,v) mit minimalem Gewicht, die den Schnitt (Q,V-Q) kreuzt, wobei u ∈ Q 5. Q ←Q - {u} 6. A ←A ∪ {(u,v)} 7. return A Graphalgorithmen 5 6 3 5 8 9 1 4 3 10 7

16 LS 2 / Informatik 16 Prim(G,r) 1. Q ←V –{r} 2. A ← ∅ 3. while Q ≠ ∅ 4. Finde Kante (u,v) mit minimalem Gewicht, die den Schnitt (Q,V-Q) kreuzt, wobei u ∈ Q 5. Q ←Q - {u} 6. A ←A ∪ {(u,v)} 7. return A Graphalgorithmen 5 6 3 5 8 9 1 4 3 10 7

17 LS 2 / Informatik 17 Prim(G,r) 1. Q ←V –{r} 2. A ← ∅ 3. while Q ≠ ∅ 4. Finde Kante (u,v) mit minimalem Gewicht, die den Schnitt (Q,V-Q) kreuzt, wobei u ∈ Q 5. Q ←Q - {u} 6. A ←A ∪ {(u,v)} 7. return A Graphalgorithmen 5 6 3 5 8 9 1 4 3 10 7

18 LS 2 / Informatik 18 Prim(G,r) 1. Q ←V –{r} 2. A ← ∅ 3. while Q ≠ ∅ 4. Finde Kante (u,v) mit minimalem Gewicht, die den Schnitt (Q,V-Q) kreuzt, wobei u ∈ Q 5. Q ←Q - {u} 6. A ←A ∪ {(u,v)} 7. return A Graphalgorithmen 5 6 3 5 8 9 1 4 3 10 7

19 LS 2 / Informatik 19 Prim(G,r) 1. Q ←V –{r} 2. A ← ∅ 3. while Q ≠ ∅ 4. Finde Kante (u,v) mit minimalem Gewicht, die den Schnitt (Q,V-Q) kreuzt, wobei u ∈ Q 5. Q ←Q - {u} 6. A ←A ∪ {(u,v)} 7. return A Graphalgorithmen 5 6 3 5 8 9 1 4 3 10 7

20 LS 2 / Informatik 20 Prim(G,r) 1. Q ←V –{r} 2. A ← ∅ 3. while Q ≠ ∅ 4. Finde Kante (u,v) mit minimalem Gewicht, die den Schnitt (Q,V-Q) kreuzt, wobei u ∈ Q 5. Q ←Q - {u} 6. A ←A ∪ {(u,v)} 7. return A Graphalgorithmen 5 6 3 5 8 9 1 4 3 10 7

21 LS 2 / Informatik 21 Prim(G,r) 1. Q ←V –{r} 2. A ← ∅ 3. while Q ≠ ∅ 4. Finde Kante (u,v) mit minimalem Gewicht, die den Schnitt (Q,V-Q) kreuzt, wobei u ∈ Q 5. Q ←Q - {u} 6. A ←A ∪ {(u,v)} 7. return A Graphalgorithmen 5 6 3 5 8 9 1 4 3 10 7

22 LS 2 / Informatik 22 Prim(G,r) 1. Q ←V –{r} 2. A ← ∅ 3. while Q ≠ ∅ 4. Finde Kante (u,v) mit minimalem Gewicht, die den Schnitt (Q,V-Q) kreuzt, wobei u ∈ Q 5. Q ←Q - {u} 6. A ←A ∪ {(u,v)} 7. return A Graphalgorithmen 5 6 3 5 8 9 1 4 3 10 7

23 LS 2 / Informatik 23 Prim(G,r) 1. Q ←V –{r} 2. A ← ∅ 3. while Q ≠ ∅ 4. Finde Kante (u,v) mit minimalem Gewicht, die den Schnitt (Q,V-Q) kreuzt, wobei u ∈ Q 5. Q ←Q - {u} 6. A ←A ∪ {(u,v)} 7. return A Graphalgorithmen 5 6 3 5 8 9 1 4 3 10 7

24 LS 2 / Informatik 24 Prim(G,r) 1. Q ←V –{r} 2. A ← ∅ 3. while Q ≠ ∅ 4. Finde Kante (u,v) mit minimalem Gewicht, die den Schnitt (Q,V-Q) kreuzt, wobei u ∈ Q 5. Q ←Q - {u} 6. A ←A ∪ {(u,v)} 7. return A Graphalgorithmen 5 6 3 5 8 9 1 4 3 10 7

25 LS 2 / Informatik 25 Prim(G,r) 1. Q ←V –{r} 2. A ← ∅ 3. while Q ≠ ∅ 4. Finde Kante (u,v) mit minimalem Gewicht, die den Schnitt (Q,V-Q) kreuzt, wobei u ∈ Q 5. Q ←Q - {u} 6. A ←A ∪ {(u,v)} 7. return A Graphalgorithmen 5 6 3 5 8 9 1 4 3 10 7

26 LS 2 / Informatik 26 Prim(G,r) 1. Q ←V –{r} 2. A ← ∅ 3. while Q ≠ ∅ 4. Finde Kante (u,v) mit minimalem Gewicht, die den Schnitt (Q,V-Q) kreuzt, wobei u ∈ Q 5. Q ←Q - {u} 6. A ←A ∪ {(u,v)} 7. return A Graphalgorithmen 5 6 3 5 8 9 1 4 3 10 7

27 LS 2 / Informatik 27 Prim(G,r) 1. Q ←V –{r} 2. A ← ∅ 3. while Q ≠ ∅ 4. Finde Kante (u,v) mit minimalem Gewicht, die den Schnitt (Q,V-Q) kreuzt, wobei u ∈ Q 5. Q ←Q - {u} 6. A ←A ∪ {(u,v)} 7. return A Graphalgorithmen 5 6 3 5 8 9 1 4 3 10 7

28 LS 2 / Informatik 28 Prim(G,r) 1. Q ←V –{r} 2. A ← ∅ 3. while Q ≠ ∅ 4. Finde Kante (u,v) mit minimalem Gewicht, die den Schnitt (Q,V-Q) kreuzt, wobei u ∈ Q 5. Q ←Q - {u} 6. A ←A ∪ {(u,v)} 7. return A Graphalgorithmen 5 6 3 5 8 9 1 4 3 10 7

29 LS 2 / Informatik 29 Prim(G,r) 1. Q ←V –{r} 2. A ← ∅ 3. while Q ≠ ∅ 4. Finde Kante (u,v) mit minimalem Gewicht, die den Schnitt (Q,V-Q) kreuzt, wobei u ∈ Q 5. Q ←Q - {u} 6. A ←A ∪ {(u,v)} 7. return A Graphalgorithmen 5 6 3 5 8 9 1 4 3 10 7

30 LS 2 / Informatik 30 Prim(G,r) 1. Q ←V –{r} 2. A ← ∅ 3. while Q ≠ ∅ 4. Finde Kante (u,v) mit minimalem Gewicht, die den Schnitt (Q,V-Q) kreuzt, wobei u ∈ Q 5. Q ←Q - {u} 6. A ←A ∪ {(u,v)} 7. return A Graphalgorithmen 5 6 3 5 8 9 1 4 3 10 7

31 LS 2 / Informatik 31 Prim(G,r) 1. Q ←V –{r} 2. A ← ∅ 3. while Q ≠ ∅ 4. Finde Kante (u,v) mit minimalem Gewicht, die den Schnitt (Q,V-Q) kreuzt, wobei u ∈ Q 5. Q ←Q - {u} 6. A ←A ∪ {(u,v)} 7. return A Graphalgorithmen 5 6 3 5 8 9 1 4 3 10 7

32 LS 2 / Informatik 32 Prim(G,r) 1. Q ←V –{r} 2. A ← ∅ 3. while Q ≠ ∅ 4. Finde Kante (u,v) mit minimalem Gewicht, die den Schnitt (Q,V-Q) kreuzt, wobei u ∈ Q 5. Q ←Q - {u} 6. A ←A ∪ {(u,v)} 7. return A Graphalgorithmen 5 6 3 5 8 9 1 4 3 10 7

33 LS 2 / Informatik 33 Prim(G,r) 1. Q ←V –{r} 2. A ← ∅ 3. while Q ≠ ∅ 4. Finde Kante (u,v) mit minimalem Gewicht, die den Schnitt (Q,V-Q) kreuzt, wobei u ∈ Q 5. Q ←Q - {u} 6. A ←A ∪ {(u,v)} 7. return A Graphalgorithmen 5 6 3 5 8 9 1 4 3 10 7

34 LS 2 / Informatik 34 Prim(G,r) 1. Q ←V –{r} 2. A ← ∅ 3. while Q ≠ ∅ 4. Finde Kante (u,v) mit minimalem Gewicht, die den Schnitt (Q,V-Q) kreuzt, wobei u ∈ Q 5. Q ←Q - {u} 6. A ←A ∪ {(u,v)} 7. return A Graphalgorithmen 5 6 3 5 8 9 1 4 3 10 7

35 LS 2 / Informatik 35 Prim(G,r) 1. Q ←V –{r} 2. A ← ∅ 3. while Q ≠ ∅ 4. Finde Kante (u,v) mit minimalem Gewicht, die den Schnitt (Q,V-Q) kreuzt, wobei u ∈ Q 5. Q ←Q - {u} 6. A ←A ∪ {(u,v)} 7. return A Graphalgorithmen 5 6 3 5 8 9 1 4 3 10 7

36 LS 2 / Informatik 36 Graphalgorithmen Prioritätenschlange  Alle Knoten, die noch nicht zum Baum gehören, werden in Prioritätenschlange Q abgespeichert  key[v]: minimales Gewicht einer Kante, die v mit Baum verbindet  parent[v]: Vorgänger von v im Baum  Menge A implizit gegeben durch A = {(v,parent[v]) | v ∈ V –{r} –Q} 5 6 3 5 8 9 1 4 3 10 7 7 85 5

37 LS 2 / Informatik 37 Graphalgorithmen Prim(G,r) 1. Q ←V 2. For each vertex u ∈ Q do key[u] ←∞ 3. key[r] ←0, parent[r] ←nil 4. While Q ≠ ∅ do 5. u ←Extract-Min(Q) 6. For each v ∈ Adj[u] do 7. If v ∈ Q and w(u,v)<key[v] then 8. key[v] ←w(u,v), parent[v] ←u

38 LS 2 / Informatik 38 Graphalgorithmen Prim(G,r) 1. Q ←V 2. For each vertex u ∈ Q do key[u] ←∞ 3. key[r] ←0, parent[r] ←nil 4. While Q ≠ ∅ do 5. u ←Extract-Min(Q) 6. For each v ∈ Adj[u] do 7. If v ∈ Q and w(u,v)<key[v] then 8. key[v] ←w(u,v), parent[v] ←u Zu Beginn ist jeder Knoten in der Schlange Q

39 LS 2 / Informatik 39 Prim(G,r) 1. Q ←V 2. For each vertex u ∈ Q do key[u] ←∞ 3. key[r] ←0, parent[r] ←nil 4. While Q ≠ ∅ do 5. u ←Extract-Min(Q) 6. For each v ∈ Adj[u] do 7. If v ∈ Q and w(u,v)<key[v] then 8. key[v] ←w(u,v), parent[v] ←u Graphalgorithmen r bildet die Wurzel des Spannbaums

40 LS 2 / Informatik 40 Prim(G,r) 1. Q ←V 2. For each vertex u ∈ Q do key[u] ←∞ 3. key[r] ←0, parent[r] ←nil 4. While Q ≠ ∅ do 5. u ←Extract-Min(Q) 6. For each v ∈ Adj[u] do 7. If v ∈ Q and w(u,v)<key[v] then 8. key[v] ←w(u,v), parent[v] ←u Graphalgorithmen u ist inzident zu leichter Kante, die Schnitt (Q,V-Q) kreuzt

41 LS 2 / Informatik 41 Prim(G,r) 1. Q ←V 2. For each vertex u ∈ Q do key[u] ←∞ 3. key[r] ←0, parent[r] ←nil 4. While Q ≠ ∅ do 5. u ←Extract-Min(Q) 6. For each v ∈ Adj[u] do 7. If v ∈ Q and w(u,v)<key[v] then 8. key[v] ←w(u,v), parent[v] ←u Graphalgorithmen Gehört v noch nicht zum Baum und könnte über u billiger erreicht werden als bisher bekannt?

42 LS 2 / Informatik 42 Prim(G,r) 1. Q ←V 2. For each vertex u ∈ Q do key[u] ←∞ 3. key[r] ←0, parent[r] ←nil 4. While Q ≠ ∅ do 5. u ←Extract-Min(Q) 6. For each v ∈ Adj[u] do 7. If v ∈ Q and w(u,v)<key[v] then 8. key[v] ←w(u,v), parent[v] ←u Graphalgorithmen Wenn ja, dann ist u neuer Vorgänger von v und key[v] gibt die neuen Kosten für v an

43 LS 2 / Informatik 43 Graphalgorithmen Implementierung  Q als binäre Halde Laufzeit  Initialisierung von Q: O(|V|)  Ausführung der while-Schleife: O(|V|)-mal  Extract-Min: O(log |V|)  Länge aller Adjazenzlisten: O(|E|)  Test v ∈ Q: O(1)  Änderung eines Schlüsselwertes: O(log |V|)  Gesamtlaufzeit: O(|V| log |V| + |E| log |V|) = O(|E| log |V|)

44 LS 2 / Informatik 44 Graphalgorithmen Satz 76 Der Algorithmus von Prim berechnet einen minimalen Spannbaum eines gewichteten, zusammenhängenden, ungerichteten Graphen in O(|E| log |V|) Zeit. Beweis Die Laufzeit haben wir bereits analysiert. Die Korrektheit folgt aus der Tatsache, dass wir nur sichere Kanten verwenden und dass der Algorithmus einen Baum berechnet

45 LS 2 / Informatik 45 Graphalgorithmen Graphtraversierung  Breitensuche, Tiefensuche Kürzeste Wege  Breitensuche, Algorithmus von Dijkstra, Algorithmus von Floyd-Warshall Minimale Spannbäume  Algorithmen von Kruskal und Prim

46 LS 2 / Informatik 46 Weiterführende Fragestellungen Grundlegende Fragestellungen  Kann man zeigen, dass ein Problem nicht effizient(er) gelöst werden kann?  Wie geht man mit Problemen um, die man nicht effizient lösen kann?

47 LS 2 / Informatik 47 Untere Schranken Vergleichsbasiertes Sortieren  Ein Algorithmus ist ein vergleichsbasierter Sortierer, wenn er  (1) für eine Eingabe von n unterschiedlichen Zahlen a,…, a eine Reihenfolge  berechnet, so dass a <… < a gilt und  (2) wenn sich die Reihenfolge bereits zwingend aus den vom Algorithmus durchgeführten Vergleichen ( ) zwischen Eingabeelementen ergibt 1 n  (1)  (n)

48 LS 2 / Informatik 48 Untere Schranken Vergleichsbasiertes Sortieren  Ein Algorithmus ist ein vergleichsbasierter Sortierer, wenn er  (1) für eine Eingabe von n unterschiedlichen Zahlen a,…, a eine Reihenfolge  berechnet, so dass a <… < a gilt und  (2) wenn sich die Reihenfolge bereits zwingend aus den vom Algorithmus durchgeführten Vergleichen ( ) zwischen Eingabeelementen ergibt Erste Beobachtung  MergeSort und Heapsort sind vergleichsbasiert (die Algorithmen führen zwar ≤ Operationen durch, wenn die Eingabe jedoch aus unterschiedlichen Zahlen besteht, kann man diese durch ersetzen) 1 n  (1)  (n)

49 LS 2 / Informatik 49 Untere Schranken Vergleichsbasiertes Sortieren  Ein Algorithmus ist ein vergleichsbasierter Sortierer, wenn er  (1) für eine Eingabe von n unterschiedlichen Zahlen a,…, a eine Reihenfolge  berechnet, so dass a <… < a gilt und  (2) wenn sich die Reihenfolge bereits zwingend aus den vom Algorithmus durchgeführten Vergleichen ( ) zwischen Eingabeelementen ergibt Zweite Beobachtung  Jeder Vergleich benötigt  (1) Zeit.  Benötigt ein Algorithmus f(n) Vergleiche, so ist seine Laufzeit  (f(n))  Ziel: Zeige, dass jeder vergleichsbasierte Sortierer  (n log n) Vergleiche benötigt 1 n  (1)  (n)

50 LS 2 / Informatik 50 Untere Schranken Baumdarstellung eines vergleichsbasierten Sortierers  Wir geben Ablauf der Vergleiche an, die der Algorithmus bei Eingabe der Länge n ausführt  Der Algorithmus führt einen eindeutigen ersten Vergleich aus, dieser wird Wurzel des Baum  Je nach Ausgang des Vergleichs wird der Algorithmus auf unterschiedliche Weise fortgesetzt  Das linke Kind eines Knotens entspricht dem Vergleichsausgang a a  Jedes Blatt wird mit einer Reihenfolge  bezeichnet a < a ? ij j i i j a < a i j a > a i j

51 LS 2 / Informatik 51 Baumdarstellung eines vergleichsbasierten Sortierers (Beispiel InsertionSort, n=3) InsertionSort(Array A) 1.for j  2 to length[A] do 2. key  A[j] 3. i  j-1 4. while i>0 and A[i]>key do 5. A[i+1]  A[i] 6. i  i-1 7. A[i+1]  key Untere Schranken

52 LS 2 / Informatik 52 Baumdarstellung eines vergleichsbasierten Sortierers (Beispiel InsertionSort, n=3) InsertionSort(Array A) 1.for j  2 to length[A] do 2. key  A[j] 3. i  j-1 4. while i>0 and A[i]>key do 5. A[i+1]  A[i] 6. i  i-1 7. A[i+1]  key Untere Schranken a > a 1,2,3 nein ja a > a ja nein 1,3,2 … 3,1,2 23 31 21

53 LS 2 / Informatik 53 Untere Schranken Beobachtungen  Die Tiefe eines Sortierbaums ist eine untere Schranke für die Worst-Case Laufzeit bei Eingabegröße n  Jeder Sortierbaum ist ein Binärbaum  Der Sortierbaum hat für jede Ausgabereihenfolge mindestens ein Blatt  Es gibt n! Ausgabereihenfolgen

54 LS 2 / Informatik 54 Untere Schranken Beobachtungen  Die Tiefe eines Sortierbaums ist eine untere Schranke für die Worst-Case Laufzeit bei Eingabegröße n  Jeder Sortierbaum ist ein Binärbaum  Der Sortierbaum hat für jede Ausgabereihenfolge mindestens ein Blatt  Es gibt n! Ausgabereihenfolgen Überlegung  Wie tief ist ein Binärbaum mit n! Blättern mindestens?  Ein Binärbaum der Tiefe k hat höchstens 2 Blätter (vollständiger Binärbaum)  Umgekehrt: Ein Binärbaum mit n! Blättern hat mindestens Tiefe log (n!) k

55 LS 2 / Informatik 55 Untere Schranken Stirling Formel  Für alle natürlichen Zahlen n gilt:

56 LS 2 / Informatik 56 Untere Schranken Stirling Formel  Für alle natürlichen Zahlen n gilt: Satz 78  Ein Binärbaum mit n! Blättern hat Tiefe  (n log n).

57 LS 2 / Informatik 57 Untere Schranken Korollar 79  Jeder vergleichsbasierte Sortieralgorithmus hat eine Laufzeit von  (n log n). Beweis  Die Baumdarstellung eines vergleichsbasierten Sortieralgorithmus bei Eingabegröße n hat n! Blätter und somit Tiefe  (n log n).

58 LS 2 / Informatik 58 Untere Schranken Korollar 79  Jeder vergleichsbasierte Sortieralgorithmus hat eine Laufzeit von  (n log n). Beweis  Die Baumdarstellung eines vergleichsbasierten Sortieralgorithmus bei Eingabegröße n hat n! Blätter und somit Tiefe  (n log n).  Die Tiefe der Baumdarstellung gibt eine untere Schranke für die Worst-Case Laufzeit des Algorithmus, da der Algorithmus bei entsprechender Eingabe alle Vergleiche des längsten Astes durchführt und für jeden Vergleich O(1) Zeit benötigt.

59 LS 2 / Informatik 59 Untere Schranken Korollar 79  Jeder vergleichsbasierte Sortieralgorithmus hat eine Laufzeit von  (n log n). Beweis  Die Baumdarstellung eines vergleichsbasierten Sortieralgorithmus bei Eingabegröße n hat n! Blätter und somit Tiefe  (n log n).  Die Tiefe der Baumdarstellung gibt eine untere Schranke für die Worst-Case Laufzeit des Algorithmus, da der Algorithmus bei entsprechender Eingabe alle Vergleiche des längsten Astes durchführt und für jeden Vergleich O(1) Zeit benötigt.  Somit folgt das Korollar.

60 LS 2 / Informatik 60 Untere Schranken Korollar 79  Jeder vergleichsbasierte Sortieralgorithmus hat eine Laufzeit von  (n log n). Beweis  Die Baumdarstellung eines vergleichsbasierten Sortieralgorithmus bei Eingabegröße n hat n! Blätter und somit Tiefe  (n log n).  Die Tiefe der Baumdarstellung gibt eine untere Schranke für die Worst-Case Laufzeit des Algorithmus, da der Algorithmus bei entsprechender Eingabe alle Vergleiche des längsten Astes durchführt und für jeden Vergleich O(1) Zeit benötigt.  Somit folgt das Korollar.

61 LS 2 / Informatik 61 Untere Schranken Wie kann man untere Schranken für andere Probleme zeigen?  Will zeigen, dass jeder Algorithmus für Problem A Laufzeit  (f(n)) hat  Ich weiss, dass jeder Algorithmus für Problem B Laufzeit  (f(n)) hat Generelle Beweisidee  Baue Algorithmus C der Problem B löst und dabei einen optimalen Algorithmus für Problem A als Unterprogramm benutzt

62 LS 2 / Informatik 62 Untere Schranken Wie kann man untere Schranken für andere Probleme zeigen?  Will zeigen, dass jeder Algorithmus für Problem A Laufzeit  (f(n)) hat  Ich weiss, dass jeder Algorithmus für Problem B Laufzeit  (f(n)) hat Generelle Beweisidee  Baue Algorithmus C der Problem B löst und dabei einen optimalen Algorithmus für Problem A als Unterprogramm benutzt  Zeige: Die Laufzeit des Algorithmus ist o(f(n))+Laufzeit für Problem A

63 LS 2 / Informatik 63 Untere Schranken Wie kann man untere Schranken für andere Probleme zeigen?  Will zeigen, dass jeder Algorithmus für Problem A Laufzeit  (f(n)) hat  Ich weiss, dass jeder Algorithmus für Problem B Laufzeit  (f(n)) hat Generelle Beweisidee  Baue Algorithmus C der Problem B löst und dabei einen optimalen Algorithmus für Problem A als Unterprogramm benutzt  Zeige: Die Laufzeit des Algorithmus ist o(f(n))+Laufzeit für Problem A  Dann hat jeder Algorithmus für Problem A eine Laufzeit von  (f(n))

64 LS 2 / Informatik 64 Untere Schranken Wie kann man untere Schranken für andere Probleme zeigen?  Will zeigen, dass jeder Algorithmus für Problem A Laufzeit  (f(n)) hat  Ich weiss, dass jeder Algorithmus für Problem B Laufzeit  (f(n)) hat Generelle Beweisidee  Baue Algorithmus C der Problem B löst und dabei einen optimalen Algorithmus für Problem A als Unterprogramm benutzt  Zeige: Die Laufzeit des Algorithmus ist o(f(n))+Laufzeit für Problem A  Dann hat jeder Algorithmus für Problem A eine Laufzeit von  (f(n))  (Wäre dies nicht so, dann gäbe es einen Algorithmus mit Laufzeit o(f(n)) für Problem A. Somit Kann ich Problem B mit Algorithmus C in o(f(n)) Zeit lösen. Widerspruch, da die Laufzeit für Problem B  (f(n)) ist)

65 LS 2 / Informatik 65 Untere Schranken Wie kann man untere Schranken für andere Probleme zeigen?  Will zeigen, dass jeder Algorithmus für Problem A Laufzeit  (f(n)) hat  Ich weiss, dass jeder Algorithmus für Problem B Laufzeit  (f(n)) hat Generelle Beweisidee  Baue Algorithmus C der Problem B löst und dabei einen optimalen Algorithmus für Problem A als Unterprogramm benutzt  Zeige: Die Laufzeit des Algorithmus ist o(f(n))+Laufzeit für Problem A  Dann hat jeder Algorithmus für Problem A eine Laufzeit von  (f(n))  (Wäre dies nicht so, dann gäbe es einen Algorithmus mit Laufzeit o(f(n)) für Problem A. Somit Kann ich Problem B mit Algorithmus C in o(f(n)) Zeit lösen. Widerspruch, da die Laufzeit für Problem B  (f(n)) ist)

66 LS 2 / Informatik 66 Untere Schranken Satz 80 Die Berechnung der konvexen Hülle einer Punktmenge von n Punkten in der Ebene benötigt  (n log n) Zeit. Beweis Annahme: Ich kann die konvexe Hülle von n Punkten in der Ebene in f(n)=o(n log n) Zeit berechnen

67 LS 2 / Informatik 67 Untere Schranken Satz 80 Die Berechnung der konvexen Hülle einer Punktmenge von n Punkten in der Ebene benötigt  (n log n) Zeit. Beweis Annahme: Ich kann die konvexe Hülle von n Punkten in der Ebene in f(n)=o(n log n) Zeit berechnen Dann sei Algorithmus FastHull ein Algorithmus der dies tut

68 LS 2 / Informatik 68 Untere Schranken Satz 80 Die Berechnung der konvexen Hülle einer Punktmenge von n Punkten in der Ebene benötigt  (n log n) Zeit. Beweis Annahme: Ich kann die konvexe Hülle von n Punkten in der Ebene in f(n)=o(n log n) Zeit berechnen Dann sei Algorithmus FastHull ein Algorithmus der dies tut Zeige: Man kann dann Algorithmus FastSort konstruieren, der in o(n log n) sortiert

69 LS 2 / Informatik 69 Untere Schranken Satz 80 Die Berechnung der konvexen Hülle einer Punktmenge von n Punkten in der Ebene benötigt  (n log n) Zeit. Beweis Annahme: Ich kann die konvexe Hülle von n Punkten in der Ebene in f(n)=o(n log n) Zeit berechnen Dann sei Algorithmus FastHull ein Algorithmus der dies tut Zeige: Man kann dann Algorithmus FastSort konstruieren, der in o(n log n) sortiert Dies ist aufgrund unserer unteren Schranke nicht möglich (streng genommen gilt dies natürlich nur für vergleichsbasierte Algorithmen; wir schummeln also hier ein wenig)

70 LS 2 / Informatik 70 Untere Schranken Satz 80 Die Berechnung der konvexen Hülle einer Punktmenge von n Punkten in der Ebene benötigt  (n log n) Zeit. Beweis Annahme: Ich kann die konvexe Hülle von n Punkten in der Ebene in f(n)=o(n log n) Zeit berechnen Dann sei Algorithmus FastHull ein Algorithmus der dies tut Zeige: Man kann dann Algorithmus FastSort konstruieren, der in o(n log n) sortiert Dies ist aufgrund unserer unteren Schranke nicht möglich (streng genommen gilt dies natürlich nur für vergleichsbasierte Algorithmen; wir schummeln also hier ein wenig)

71 LS 2 / Informatik 71 Untere Schranken Beweis FastSort(A) 1. Initialisiere Feld B für n Punkte 2. for i  1 to n do 3. Für Zahl x=A[i] Schreibe Punkt (x,x²) in Feld B 4. Berechne konvexe Hülle mit FastHull(B) 5. Gib Punkte in der Reihenfolge aus, in der sie auf der Hülle auftreten

72 LS 2 / Informatik 72 Untere Schranken Beweis FastSort(A) 1. Initialisiere Feld B für n Punkte 2. for i  1 to n do 3. Für Zahl x=A[i] Schreibe Punkt (x,x²) in Feld B 4. Berechne konvexe Hülle mit FastHull(B) 5. Gib Punkte in der Reihenfolge aus, in der sie auf der Hülle auftreten

73 LS 2 / Informatik 73 Untere Schranken Beweis FastSort(A) 1. Initialisiere Feld B für n Punkte 2. for i  1 to n do 3. Für Zahl x=A[i] Schreibe Punkt (x,x²) in Feld B 4. Berechne konvexe Hülle mit FastHull(B) 5. Gib Punkte in der Reihenfolge aus, in der sie auf der Hülle auftreten

74 LS 2 / Informatik 74 Untere Schranken Beweis FastSort(A) 1. Initialisiere Feld B für n Punkte 2. for i  1 to n do 3. Für Zahl x=A[i] Schreibe Punkt (x,x²) in Feld B 4. Berechne konvexe Hülle mit FastHull(B) 5. Gib Punkte in der Reihenfolge aus, in der sie auf der Hülle auftreten

75 LS 2 / Informatik 75 Untere Schranken Beweis FastSort(A) 1. Initialisiere Feld B für n Punkte 2. for i  1 to n do 3. Für Zahl x=A[i] Schreibe Punkt (x,x²) in Feld B 4. Berechne konvexe Hülle mit FastHull(B) 5. Gib Punkte in der Reihenfolge aus, in der sie auf der Hülle auftreten Alle Punkte liegen auf der konvexen Hülle!

76 LS 2 / Informatik 76 Untere Schranken Beweis FastSort(A) 1. Initialisiere Feld B für n Punkte 2. for i  1 to n do 3. Für Zahl x=A[i] Schreibe Punkt (x,x²) in Feld B 4. Berechne konvexe Hülle mit FastHull(B) 5. Gib Punkte in der Reihenfolge aus, in der sie auf der Hülle auftreten Die Laufzeit von FastSort ist O(n)+f(n)

77 LS 2 / Informatik 77 Untere Schranken Beweis FastSort(A) 1. Initialisiere Feld B für n Punkte 2. for i  1 to n do 3. Für Zahl x=A[i] Schreibe Punkt (x,x²) in Feld B 4. Berechne konvexe Hülle mit FastHull(B) 5. Gib Punkte in der Reihenfolge aus, in der sie auf der Hülle auftreten Die Laufzeit von FastSort ist O(n)+f(n) Hat also FastHull eine Laufzeit von o(n log n), so hat auch FastSort eine solche Laufzeit

78 LS 2 / Informatik 78 Untere Schranken Beweis FastSort(A) 1. Initialisiere Feld B für n Punkte 2. for i  1 to n do 3. Für Zahl x=A[i] Schreibe Punkt (x,x²) in Feld B 4. Berechne konvexe Hülle mit FastHull(B) 5. Gib Punkte in der Reihenfolge aus, in der sie auf der Hülle auftreten Die Laufzeit von FastSort ist O(n)+f(n) Hat also FastHull eine Laufzeit von o(n log n), so hat auch FastSort eine solche Laufzeit Da wir wissen, dass jeder (vergleichsbasierte) Sortieralgorithmus Laufzeit  (n log n) hat, kann dies nicht sein und FastHull (und jeder andere vergleichsbasierte Algorithmus zur Berechnung der konvexen Hülle) hat Laufzeit  (n log n).

79 LS 2 / Informatik 79 Untere Schranken Beweis FastSort(A) 1. Initialisiere Feld B für n Punkte 2. for i  1 to n do 3. Für Zahl x=A[i] Schreibe Punkt (x,x²) in Feld B 4. Berechne konvexe Hülle mit FastHull(B) 5. Gib Punkte in der Reihenfolge aus, in der sie auf der Hülle auftreten Die Laufzeit von FastSort ist O(n)+f(n) Hat also FastHull eine Laufzeit von o(n log n), so hat auch FastSort eine solche Laufzeit Da wir wissen, dass jeder (vergleichsbasierte) Sortieralgorithmus Laufzeit  (n log n) hat, kann dies nicht sein und FastHull (und jeder andere vergleichsbasierte Algorithmus zur Berechnung der konvexen Hülle) hat Laufzeit  (n log n).

80 LS 2 / Informatik 80 Untere Schranken 3SUM  Sei S eine Menge von n Integers. Gibt es 3 unterschiedliche Zahlen in S, die sich zu 0 aufsummieren? Vermutung  3SUM kann nicht in o(n²) Laufzeit gelöst werden Kommentar  Die Laufzeit hängt immer auch vom genauen Rechenmodell ab  In bestimmten Rechenmodellen gibt es Algorithmus, deren Laufzeit etwas besser ist als O(n²)

81 LS 2 / Informatik 81 Untere Schranken Kolinearitätsproblem  Seien n Punkte in der Ebene gegeben. Gibt es 3 Punkte, die auf einer Linie liegen?

82 LS 2 / Informatik 82 Untere Schranken Kolinearitätsproblem  Seien n Punkte in der Ebene gegeben. Gibt es 3 Punkte, die auf einer Linie liegen?

83 LS 2 / Informatik 83 Untere Schranken Wie testet man Kolinearität von 3 Punkten?

84 LS 2 / Informatik 84 Untere Schranken Wie testet man Kolinearität von 3 Punkten?  Seien x=(x, x ) und y=(y, y ) zwei Punkte/Vektoren.  Dann gibt  die Fläche des von den beiden Vektoren aufgespannten Parallelograms an x y x+y 1 21 2

85 LS 2 / Informatik 85 Untere Schranken Wie testet man Kolinearität von 3 Punkten?  Seien x=(x, x ) und y=(y, y ) zwei Punkte/Vektoren.  Dann gibt  die Fläche des von den beiden Vektoren aufgespannten Parallelograms an  Sind die Vektoren x und y linear abhängig, so hat das Parallelogram Fläche 0 x y x+y 1 21 2

86 LS 2 / Informatik 86 Untere Schranken Wie testet man Kolinearität von 3 Punkten?  Seien x=(x, x ) und y=(y, y ) zwei Punkte/Vektoren.  Dann gibt  die Fläche des von den beiden Vektoren aufgespannten Parallelograms an  Sind die Vektoren x und y linear abhängig, so hat das Parallelogram Fläche 0  Hat man nun drei Punkte a,b,c, so kann man Kolinerität testen, indem man testet, ob b-a und c-a linear abhängig sind x y x+y 1 21 2

87 LS 2 / Informatik 87 Untere Schranken Wie testet man Kolinearität von 3 Punkten?  Seien x=(x, x ) und y=(y, y ) zwei Punkte/Vektoren.  Dann gibt  die Fläche des von den beiden Vektoren aufgespannten Parallelograms an  Sind die Vektoren x und y linear abhängig, so hat das Parallelogram Fläche 0  Hat man nun drei Punkte a,b,c, so kann man Kolinerität testen, indem man testet, ob b-a und c-a linear abhängig sind x y x+y 1 21 2

88 LS 2 / Informatik 88 Untere Schranken Satz 81  Sei f(n) eine untere Schranke für die Worst-Case Laufzeit des besten Algorithmus für 3SUM. Dann hat auch das Kolinearitätsproblem eine Laufzeit von  (f(n)).

89 LS 2 / Informatik 89 Untere Schranken Satz 81  Sei f(n) eine untere Schranke für die Worst-Case Laufzeit des besten Algorithmus für 3SUM. Dann hat auch das Kolinearitätsproblem eine Laufzeit von  (f(n)). Beweis  Sei Kolinear ein optimaler Algorithmus für das Kolinearitätsproblem mit Laufzeit g(n).

90 LS 2 / Informatik 90 Untere Schranken Satz 81  Sei f(n) eine untere Schranke für die Worst-Case Laufzeit des besten Algorithmus für 3SUM. Dann hat auch das Kolinearitätsproblem eine Laufzeit von  (f(n)). Beweis  Sei Kolinear ein optimaler Algorithmus für das Kolinearitätsproblem mit Laufzeit g(n).  Wir entwerfen zunächst einen Algorithmus 3SUM-Fast für 3SUM mit Laufzeit g(n)+O(n), der Algorithmus Kolinear benutzt.

91 LS 2 / Informatik 91 Untere Schranken Satz 81  Sei f(n) eine untere Schranke für die Worst-Case Laufzeit des besten Algorithmus für 3SUM. Dann hat auch das Kolinearitätsproblem eine Laufzeit von  (f(n)). Beweis  Sei Kolinear ein optimaler Algorithmus für das Kolinearitätsproblem mit Laufzeit g(n).  Wir entwerfen zunächst einen Algorithmus 3SUM-Fast für 3SUM mit Laufzeit g(n)+O(n), der Algorithmus Kolinear benutzt.

92 LS 2 / Informatik 92 3SUM-Fast(S) 1. P  2. Für jede Zahl x  S füge Punkt (x,x³) zu Punktmenge P hinzu 3. return Kolinear(P) Untere Schranken a=-1 c=0.75 b=0.25 h(x)=x³

93 LS 2 / Informatik 93 Untere Schranken Behauptung  3SUM-Fast löst das 3SUM Problem in Laufzeit g(n)+O(n).

94 LS 2 / Informatik 94 Untere Schranken Behauptung  3SUM-Fast löst das 3SUM Problem in Laufzeit g(n)+O(n). Beweis  Die Laufzeit folgt sofort, da nur die n Zahlen aus S in n Punkte umgeformt werden müssen und dann Kolinear aufgerufen wird.

95 LS 2 / Informatik 95 Untere Schranken Behauptung  3SUM-Fast löst das 3SUM Problem in Laufzeit g(n)+O(n). Beweis  Die Laufzeit folgt sofort, da nur die n Zahlen aus S in n Punkte umgeformt werden müssen und dann Kolinear aufgerufen wird.  Wir müssen zeigen, dass die Punkte (a,a³), (b,b³) und (c,c³) genau dann kollinear sind, wenn a+b+c=0 ist (d.h. 3SUM erfüllt ist). Dabei sind a,b,c unterschiedliche Zahlen aus S

96 LS 2 / Informatik 96 Untere Schranken Behauptung  3SUM-Fast löst das 3SUM Problem in Laufzeit g(n)+O(n). Beweis  Die Laufzeit folgt sofort, da nur die n Zahlen aus S in n Punkte umgeformt werden müssen und dann Kolinear aufgerufen wird.  Wir müssen zeigen, dass die Punkte (a,a³), (b,b³) und (c,c³) genau dann kollinear sind, wenn a+b+c=0 ist (d.h. 3SUM erfüllt ist). Dabei sind a,b,c unterschiedliche Zahlen aus S

97 LS 2 / Informatik 97 Untere Schranken Behauptung  3SUM-Fast löst das 3SUM Problem in Laufzeit g(n)+O(n). Beweis  Um zu überprüfen, ob die 3 Punkte kollinear sind, rechnen wir die Determinante von (a-c,a³-c³), (b-c,b³-c³) aus

98 LS 2 / Informatik 98 Untere Schranken Behauptung  3SUM-Fast löst das 3SUM Problem in Laufzeit g(n)+O(n). Beweis  Um zu überprüfen, ob die 3 Punkte kollinear sind, rechnen wir die Determinante von (a-c,a³-c³), (b-c,b³-c³) aus

99 LS 2 / Informatik 99 Untere Schranken Behauptung  3SUM-Fast löst das 3SUM Problem in Laufzeit g(n)+O(n). Beweis  Um zu überprüfen, ob die 3 Punkte kollinear sind, rechnen wir die Determinante von (a-c,a³-c³), (b-c,b³-c³) aus  Da a,b und c unterschiedliche Zahlen sind, wird dieses Polynom genau dann 0, wenn a+b+c=0 ist.

100 LS 2 / Informatik 100 Untere Schranken Behauptung  3SUM-Fast löst das 3SUM Problem in Laufzeit g(n)+O(n). Beweis  Um zu überprüfen, ob die 3 Punkte kollinear sind, rechnen wir die Determinante von (a-c,a³-c³), (b-c,b³-c³) aus  Da a,b und c unterschiedliche Zahlen sind, wird dieses Polynom genau dann 0, wenn a+b+c=0 ist.

101 LS 2 / Informatik 101 Untere Schranken Beweis von Satz 81 (fortgesetzt)  Wir nehmen nun an, dass f(n) eine untere Schranke für die Laufzeit des besten 3SUM Algorithmus ist. Ist f(n)= O(n), so müssen wir nichts zeigen, da man sich für das Lösen des Kolinearitätsproblems alle Eingabepunkte angucken muss

102 LS 2 / Informatik 102 Untere Schranken Beweis von Satz 81 (fortgesetzt)  Wir nehmen nun an, dass f(n) eine untere Schranke für die Laufzeit des besten 3SUM Algorithmus ist. Ist f(n)= O(n), so müssen wir nichts zeigen, da man sich für das Lösen des Kolinearitätsproblems alle Eingabepunkte angucken muss  Sei also f(n)=  (n)

103 LS 2 / Informatik 103 Untere Schranken Beweis von Satz 81 (fortgesetzt)  Wir nehmen nun an, dass f(n) eine untere Schranke für die Laufzeit des besten 3SUM Algorithmus ist. Ist f(n)= O(n), so müssen wir nichts zeigen, da man sich für das Lösen des Kolinearitätsproblems alle Eingabepunkte angucken muss  Sei also f(n)=  (n)  Angenommen, es gibt einen Algorithmus für das Kolinearitätsproblem mit Laufzeit g(n)=o(f(n))

104 LS 2 / Informatik 104 Untere Schranken Beweis von Satz 81 (fortgesetzt)  Wir nehmen nun an, dass f(n) eine untere Schranke für die Laufzeit des besten 3SUM Algorithmus ist. Ist f(n)= O(n), so müssen wir nichts zeigen, da man sich für das Lösen des Kolinearitätsproblems alle Eingabepunkte angucken muss  Sei also f(n)=  (n)  Angenommen, es gibt einen Algorithmus für das Kolinearitätsproblem mit Laufzeit g(n)=o(f(n))  Dann hat Algorithmus 3SUM-Fast eine Laufzeit g(n)+O(n) = o(f(n)).

105 LS 2 / Informatik 105 Untere Schranken Beweis von Satz 81 (fortgesetzt)  Wir nehmen nun an, dass f(n) eine untere Schranke für die Laufzeit des besten 3SUM Algorithmus ist. Ist f(n)= O(n), so müssen wir nichts zeigen, da man sich für das Lösen des Kolinearitätsproblems alle Eingabepunkte angucken muss  Sei also f(n)=  (n)  Angenommen, es gibt einen Algorithmus für das Kolinearitätsproblem mit Laufzeit g(n)=o(f(n))  Dann hat Algorithmus 3SUM-Fast eine Laufzeit g(n)+O(n) = o(f(n)).  Widerspruch zur Annahme, dass f(n) eine untere Schranke für die Laufzeit des besten 3SUM Algorithmus ist.

106 LS 2 / Informatik 106 Untere Schranken Beweis von Satz 81 (fortgesetzt)  Wir nehmen nun an, dass f(n) eine untere Schranke für die Laufzeit des besten 3SUM Algorithmus ist. Ist f(n)= O(n), so müssen wir nichts zeigen, da man sich für das Lösen des Kolinearitätsproblems alle Eingabepunkte angucken muss  Sei also f(n)=  (n)  Angenommen, es gibt einen Algorithmus für das Kolinearitätsproblem mit Laufzeit g(n)=o(f(n))  Dann hat Algorithmus 3SUM-Fast eine Laufzeit g(n)+O(n) = o(f(n)).  Widerspruch zur Annahme, dass f(n) eine untere Schranke für die Laufzeit des besten 3SUM Algorithmus ist.  Also hat jeder Algorithmus für das Kolinearitätsproblem Laufzeit  (f(n))

107 LS 2 / Informatik 107 Untere Schranken Beweis von Satz 81 (fortgesetzt)  Wir nehmen nun an, dass f(n) eine untere Schranke für die Laufzeit des besten 3SUM Algorithmus ist. Ist f(n)= O(n), so müssen wir nichts zeigen, da man sich für das Lösen des Kolinearitätsproblems alle Eingabepunkte angucken muss  Sei also f(n)=  (n)  Angenommen, es gibt einen Algorithmus für das Kolinearitätsproblem mit Laufzeit g(n)=o(f(n))  Dann hat Algorithmus 3SUM-Fast eine Laufzeit g(n)+O(n) = o(f(n)).  Widerspruch zur Annahme, dass f(n) eine untere Schranke für die Laufzeit des besten 3SUM Algorithmus ist.  Also hat jeder Algorithmus für das Kolinearitätsproblem Laufzeit  (f(n))

108 LS 2 / Informatik 108 Untere Schranken Die 1.000.000$ Frage  Zeigen Sie, dass es keine Konstante c gibt, so dass das Rucksackproblem in O(n ) Zeit gelöst werden kann  Dabei dürfen die Eingabezahlen exponentiell in n groß sein! c

109 LS 2 / Informatik 109 Untere Schranken Zusammenfassung  Für einige (sehr wenige) Probleme können wir untere Schranken beweisen  Die Schranken können vom gewählten Modell abhängen  Will man zeigen, dass ein Problem A schwer ist und hat man bereits eine untere Schranke für ein anderes Problem B, so kann man einen Algorithmus entwickeln, der Problem A mit Hilfe von Problem B löst und so die Schwierigkeit der Probleme zueinander in Relation setzen  Es ist i.a. sehr schwer untere Schranken zu zeigen


Herunterladen ppt "LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)"

Ähnliche Präsentationen


Google-Anzeigen