algorithmen und datenstrukturen kapitel 2: 0.2cm ... · wiederholung korrektheit von algorithmen...

56
Wiederholung Korrektheit von Algorithmen Rekursive Algorithmen Algorithmen und Datenstrukturen Kapitel 2: Korrektheit von Algorithmen und Laufzeitanalyse rekursiver Algorithmen (mittels Rekurrenzgleichungen) Frank Heitmann [email protected] 21. Oktober 2015 Frank Heitmann [email protected] 1/56

Upload: others

Post on 23-Sep-2019

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Algorithmen und Datenstrukturen Kapitel 2: 0.2cm ... · Wiederholung Korrektheit von Algorithmen Rekursive Algorithmen O-Notation Suchen Sortieren O-Notation - De nition De nition

WiederholungKorrektheit von Algorithmen

Rekursive Algorithmen

Algorithmen und DatenstrukturenKapitel 2:

Korrektheit von Algorithmen undLaufzeitanalyse rekursiver Algorithmen

(mittels Rekurrenzgleichungen)

Frank [email protected]

21. Oktober 2015

Frank Heitmann [email protected] 1/56

Page 2: Algorithmen und Datenstrukturen Kapitel 2: 0.2cm ... · Wiederholung Korrektheit von Algorithmen Rekursive Algorithmen O-Notation Suchen Sortieren O-Notation - De nition De nition

WiederholungKorrektheit von Algorithmen

Rekursive Algorithmen

O-NotationSuchenSortieren

Algorithmenanalyse

Um Algorithmen zu bewerten beschaftigen wir uns insb. mitdem Zeit- und Platzbedarf eines Algorithmus.

Wir behandeln nachfolgend Zeit- und Platzkomplexitat. Eine(elementare) Anweisung zahlt dabei als eine Zeiteinheit. Einebenutzte (elemantare) Variable als eine Platzeinheit.

Zeit- und Platzbedarf wird abhangig von der Lange/der Kenngroßen der Eingabe gezahlt. Wir arbeiten hierfur mit Funktionenf : N→ N bzw. f : N→ R.

Frank Heitmann [email protected] 2/56

Page 3: Algorithmen und Datenstrukturen Kapitel 2: 0.2cm ... · Wiederholung Korrektheit von Algorithmen Rekursive Algorithmen O-Notation Suchen Sortieren O-Notation - De nition De nition

WiederholungKorrektheit von Algorithmen

Rekursive Algorithmen

O-NotationSuchenSortieren

O-Notation - Definition

Definition (O-Notation (und Verwandte) - Die wichtigen)

O(g(n)) = f | ∃c ∈ R+∃n0 ∈ N ∀n ≥ n0 : |f (n)| ≤ c · |g(n)|Ω(g(n)) = f | ∃c ∈ R+∃n0 ∈ N ∀n ≥ n0 : |f (n)| ≥ c · |g(n)|Θ(g(n)) = f | ∃c1, c2 ∈ R+∃n0 ∈ N ∀n ≥ n0 :

c1 · |g(n)| ≤ |f (n)| ≤ c2 · |g(n)|

Definition (O-Notation (und Verwandte) - Die nicht ganz sowichtigen)

o(g(n)) = f | ∀c ∈ R+∃n0 ∈ N ∀n ≥ n0 : |f (n)| ≤ c · |g(n)|ω(g(n)) = f | ∀c ∈ R+∃n0 ∈ N ∀n ≥ n0 : |f (n)| ≥ c · |g(n)|

Bemerkung

f ist dabei stets eine Funktion von N nach R, also f : N→ R.

Frank Heitmann [email protected] 3/56

Page 4: Algorithmen und Datenstrukturen Kapitel 2: 0.2cm ... · Wiederholung Korrektheit von Algorithmen Rekursive Algorithmen O-Notation Suchen Sortieren O-Notation - De nition De nition

WiederholungKorrektheit von Algorithmen

Rekursive Algorithmen

O-NotationSuchenSortieren

O-Notation - Variante

Satz

1 f (n) ∈ O(g(n))⇔ limn→∞f (n)g(n) <∞

2 f (n) ∈ Ω(g(n))⇔ limn→∞f (n)g(n) > 0

3 f (n) ∈ Θ(g(n))⇔ limn→∞f (n)g(n) = c ∈ R+

4 f (n) ∈ o(g(n))⇔ limn→∞f (n)g(n) = 0

5 f (n) ∈ ω(g(n))⇔ limn→∞f (n)g(n) =∞

Frank Heitmann [email protected] 4/56

Page 5: Algorithmen und Datenstrukturen Kapitel 2: 0.2cm ... · Wiederholung Korrektheit von Algorithmen Rekursive Algorithmen O-Notation Suchen Sortieren O-Notation - De nition De nition

WiederholungKorrektheit von Algorithmen

Rekursive Algorithmen

O-NotationSuchenSortieren

Erganzung: Der Satz von L’Hospital

Satz von L’Hospital

Seien f , g differenzierbar und sei g ′(n) 6= 0 fur alle n. Gehen f (n) undg(n) beide gegen 0 oder beide gegen Unendlich, wenn n gegen Unendlichgeht, so gilt:

1 Wenn limn→∞

(f ′(n)g ′(n)

)existiert, dann existiert auch lim

n→∞

(f (n)g(n)

)und

2 limn→∞

(f (n)g(n)

)= lim

n→∞

(f ′(n)g ′(n)

)Hinweis

Fur unsere Funktion ist der Satz praktisch immer anwendbar. Siehe auchden kleinen Text auf der Webseite.

Literaturhinweis

Genauere Formulierung nachzulesen in Konigsberger, Konrad: Analysis 1.Springer, 6. Auflage, 2004.

Frank Heitmann [email protected] 5/56

Page 6: Algorithmen und Datenstrukturen Kapitel 2: 0.2cm ... · Wiederholung Korrektheit von Algorithmen Rekursive Algorithmen O-Notation Suchen Sortieren O-Notation - De nition De nition

WiederholungKorrektheit von Algorithmen

Rekursive Algorithmen

O-NotationSuchenSortieren

Erganzung: Der Satz von L’Hospital

Beispiel

Als Beispiel wollen wirln(n) ∈ O( 3

√n)

unter Nutzung des Satzes von l’Hospital beweisen. Es folgt:

limn→∞

(ln(n)

3√

n

)

= limn→∞

(3n

23

n

)= lim

n→∞

(3

n13

)= lim

n→∞

(33√

n

)= 0.

(Mit 3√

n = n13 und den Ableitungen ln′(n) = 1

n und (n13 )′ = 1

3n−23 = 1

3n23

.)

Damit ist die Großenabschatzung (und sogar ln n ∈ o( 3√

n)) bewiesen.

Frank Heitmann [email protected] 6/56

Page 7: Algorithmen und Datenstrukturen Kapitel 2: 0.2cm ... · Wiederholung Korrektheit von Algorithmen Rekursive Algorithmen O-Notation Suchen Sortieren O-Notation - De nition De nition

WiederholungKorrektheit von Algorithmen

Rekursive Algorithmen

O-NotationSuchenSortieren

Merkhilfe

Bemerkung

Eine kleine Merkhilfe (nicht mehr!)

f ∈ O(g) ≈ f ≤ g

f ∈ Ω(g) ≈ f ≥ g

f ∈ Θ(g) ≈ f = g

f ∈ o(g) ≈ f < g

f ∈ ω(g) ≈ f > g

Wir sagen, dass f asymptotisch kleiner gleich, großer gleich, gleich,kleiner bzw. großer ist als g, wenn f ∈ O(g), f ∈ Ω(g), f ∈Θ(g), f ∈ o(g) bzw. f ∈ ω(g) gilt.

Frank Heitmann [email protected] 7/56

Page 8: Algorithmen und Datenstrukturen Kapitel 2: 0.2cm ... · Wiederholung Korrektheit von Algorithmen Rekursive Algorithmen O-Notation Suchen Sortieren O-Notation - De nition De nition

WiederholungKorrektheit von Algorithmen

Rekursive Algorithmen

O-NotationSuchenSortieren

Vorgehen

Vorgehen, wenn wir Laufzeit/Platzbedarf eines Algorithmusanalysieren:

1 Uberlegen bzgl. welcher Kenngroße der Eingabe wir messenwollen. Diese kann sich von der Große der Eingabeunterscheiden! (Beispiel: Anzahl Knoten eines Graphen).

2 Laufzeit/Speicherbedarf bzgl. dieser Kenngroße ausdrucken.

3 Nochmal uberlegen, ob dies die Aussage des Ergebnissesverfalscht (so wie bei der Fakultatsberechnung oben).

⇒ I.A. sollte sich die eigentliche Eingabegroße leicht durch dieKenngroße ausdrucken lassen und der Unterschied sollte nichtzu groß sein.

+ Beim Graphen mit n Knoten ist die Adjazenmatrix in O(n2).− Ist eine Zahl n die Eingabe, so ist die Eingabegroße in O(log n).

Eine Laufzeit von O(n) ware also exponentiell in der Eingabe!

Frank Heitmann [email protected] 8/56

Page 9: Algorithmen und Datenstrukturen Kapitel 2: 0.2cm ... · Wiederholung Korrektheit von Algorithmen Rekursive Algorithmen O-Notation Suchen Sortieren O-Notation - De nition De nition

WiederholungKorrektheit von Algorithmen

Rekursive Algorithmen

O-NotationSuchenSortieren

Suchen

Definition (Das Suchproblem)

Eingabe: Eine Menge a1, a2, . . . , an von n Objekten und einObjekt p alle vom gleichen Typ.Gesucht: Gibt es ein ai mit ai = p?

Anmerkung

Es ist hier nicht genau spezifiziert, wie die Menge von Objektengegeben ist, d.h. in welcher Datenstruktur sie abgelegt sind. Ebensoist nicht angegeben, ob eine Ordnung auf den Objekten existiert.

Ein Suchalgorithmus kann dies (beides) ggf. ausnutzen!

Frank Heitmann [email protected] 9/56

Page 10: Algorithmen und Datenstrukturen Kapitel 2: 0.2cm ... · Wiederholung Korrektheit von Algorithmen Rekursive Algorithmen O-Notation Suchen Sortieren O-Notation - De nition De nition

WiederholungKorrektheit von Algorithmen

Rekursive Algorithmen

O-NotationSuchenSortieren

Lineare Suche

Algorithmus 1 Lineare Suche

1: for i = 0 to n do2: if a[i ] == max mustermann then3: return true4: end if5: end for6: return false

Frank Heitmann [email protected] 10/56

Page 11: Algorithmen und Datenstrukturen Kapitel 2: 0.2cm ... · Wiederholung Korrektheit von Algorithmen Rekursive Algorithmen O-Notation Suchen Sortieren O-Notation - De nition De nition

WiederholungKorrektheit von Algorithmen

Rekursive Algorithmen

O-NotationSuchenSortieren

Binare Suche

Algorithmus 2 Binare Suche

1: while first ≤ last ∧ idx < 0 do2: m = first + ((last − first)/2)3: if a[m] < p then4: first = m + 15: else if a[m] > p then6: last = m − 17: else8: idx = m9: end if

10: end while11: return idx

Frank Heitmann [email protected] 11/56

Page 12: Algorithmen und Datenstrukturen Kapitel 2: 0.2cm ... · Wiederholung Korrektheit von Algorithmen Rekursive Algorithmen O-Notation Suchen Sortieren O-Notation - De nition De nition

WiederholungKorrektheit von Algorithmen

Rekursive Algorithmen

O-NotationSuchenSortieren

Zur Binaren Suche

Anmerkung

Die lineare Suche stellt sehr wenige/keine Anforderungen.Bei der binaren Suche:

mussen die Elemente bereits sortiert vorliegen,

es muss eine Ordnung (<, > etc.) existieren und

ein direkter Zugriff auf einzelne Elemente ist notig (d.h. dasElement a[m] muss direkt zugreifbar sein).

Frank Heitmann [email protected] 12/56

Page 13: Algorithmen und Datenstrukturen Kapitel 2: 0.2cm ... · Wiederholung Korrektheit von Algorithmen Rekursive Algorithmen O-Notation Suchen Sortieren O-Notation - De nition De nition

WiederholungKorrektheit von Algorithmen

Rekursive Algorithmen

O-NotationSuchenSortieren

Sortieren

Definition (Das Sortierproblem)

Eingabe: Eine Sequenz < a1, a2, . . . , an > von n Zahlen.Gesucht: Eine Permutation < a′1, a

′2, . . . , a

′n > der Eingabesequenz

mit a′1 ≤ a′2 ≤ . . . ≤ a′n.

Anmerkung

Ob die Reihenfolge zweier Elemente ai , aj (i < j) mit ai = ajbeibehalten werden soll oder nicht, ist nicht gesagt. Bleibt sieerhalten, d.h. ist a′p = ai , a′q = aj und p < q, so nennt man dasVerfahren stabil.Ferner heißt ein Sortierverfahren in-place (oder in situ), wenn derzusatzlich benotigte Speicherbedarf unabhangig von der gegebenenSequenz ist.

Frank Heitmann [email protected] 13/56

Page 14: Algorithmen und Datenstrukturen Kapitel 2: 0.2cm ... · Wiederholung Korrektheit von Algorithmen Rekursive Algorithmen O-Notation Suchen Sortieren O-Notation - De nition De nition

WiederholungKorrektheit von Algorithmen

Rekursive Algorithmen

O-NotationSuchenSortieren

Sortieren mit Maximumbestimmung (MaxSort)

Algorithmus 3 Sortieren mit Max

1: for i = n downto 1 do2: idx = max(A)3: B[i ] = A[idx ]4: A[idx ] = 05: end for6: return B

Algorithmus 4 Finde Maximum1: max = 12: for i = 2 to n do3: if a[i ] > a[max ] then4: max = i5: end if6: end for7: return max ;

Frank Heitmann [email protected] 14/56

Page 15: Algorithmen und Datenstrukturen Kapitel 2: 0.2cm ... · Wiederholung Korrektheit von Algorithmen Rekursive Algorithmen O-Notation Suchen Sortieren O-Notation - De nition De nition

WiederholungKorrektheit von Algorithmen

Rekursive Algorithmen

O-NotationSuchenSortieren

Pause to ponder...

Geht das auch in-place ?

Frank Heitmann [email protected] 15/56

Page 16: Algorithmen und Datenstrukturen Kapitel 2: 0.2cm ... · Wiederholung Korrektheit von Algorithmen Rekursive Algorithmen O-Notation Suchen Sortieren O-Notation - De nition De nition

WiederholungKorrektheit von Algorithmen

Rekursive Algorithmen

O-NotationSuchenSortieren

Min/MaxSort

Algorithmus 5 MaxSort(A[1 . . . n])

1: for i = n downto 2 do2: idx = max(A[1..i ])3: swap(A[i ],A[idx ])4: end for

Algorithmus 6 max(A[1 . . . n])

1: idxMax = 12: for i = 2 to n do3: if A[i ] > A[idxMax ] then4: idxMax = i5: end if6: end for7: return idxMax ;

Frank Heitmann [email protected] 16/56

Page 17: Algorithmen und Datenstrukturen Kapitel 2: 0.2cm ... · Wiederholung Korrektheit von Algorithmen Rekursive Algorithmen O-Notation Suchen Sortieren O-Notation - De nition De nition

WiederholungKorrektheit von Algorithmen

Rekursive Algorithmen

O-NotationSuchenSortieren

InsertionSort

Algorithmus 7 InsertionSort(A[1 . . . n])

1: for j = 2 to n do2: key = A[j ]3: i = j − 14: while i > 0 und A[i ] > key do5: A[i + 1] = A[i ]6: i = i − 17: end while8: A[i + 1] = key9: end for

Frank Heitmann [email protected] 17/56

Page 18: Algorithmen und Datenstrukturen Kapitel 2: 0.2cm ... · Wiederholung Korrektheit von Algorithmen Rekursive Algorithmen O-Notation Suchen Sortieren O-Notation - De nition De nition

WiederholungKorrektheit von Algorithmen

Rekursive Algorithmen

O-NotationSuchenSortieren

Analyse

Zur Laufzeit:

Lineare Suche in O(n)

Binare Suche in O(log n)

Maximumsbestimmung in O(n)

MaxSort in O(n2)

InsertionSort in O(n2)

Die Kenngroße n ist dabei stets die Anzahl der zu sortierendenElemente.

Frank Heitmann [email protected] 18/56

Page 19: Algorithmen und Datenstrukturen Kapitel 2: 0.2cm ... · Wiederholung Korrektheit von Algorithmen Rekursive Algorithmen O-Notation Suchen Sortieren O-Notation - De nition De nition

WiederholungKorrektheit von Algorithmen

Rekursive Algorithmen

O-NotationSuchenSortieren

Eine kleine Warnung zum Schluss

Wichtige Anmerkung

Die O-Notation ’verschluckt’ Konstanten. Wenn die zu gross/kleinsind, dann kann dies das Ergebnis verfalschen! In dem Fall ist danneine genauere Analyse (ohne O-Notation) notig. I.A. hat sich dieO-Notation aber bewahrt, weil Extreme wie 106 · n und 10−10 · 2nin der Praxis kaum vorkommen.Kurz: O(2n) ist nicht zwingend immer schlimmer als O(n) aber auflange Sicht (d.h. bei wachsenden Eingabelangen) auf jeden Fallund im Allgemeinen (und bei allem, was einem so i.A. in der Praxisbegegnet) ist O(2n) eben doch schlimmer als O(n).

Frank Heitmann [email protected] 19/56

Page 20: Algorithmen und Datenstrukturen Kapitel 2: 0.2cm ... · Wiederholung Korrektheit von Algorithmen Rekursive Algorithmen O-Notation Suchen Sortieren O-Notation - De nition De nition

WiederholungKorrektheit von Algorithmen

Rekursive Algorithmen

O-NotationSuchenSortieren

Vorgehen bei der Analyse und Ausblick

Bisher haben wir die Laufzeiten meist nur oberflachlichbegrundet/bewiesen. Dies werden wir in der Zukunft ausfuhrlichermachen! (Da die Algorithmen komplizierter werden.)

Zudem werden wir uns mehr auf die Korrektheit von Algorithmenkonzentrieren.

In der Zukunft daher oft:

1 Gegeben ein Problem, einen Algorithmus finden, der es lost.

2 Korrektheit des Algorithmus beweisen.

3 Laufzeit des Algorithmus ermitteln und die Behauptungbeweisen.

Frank Heitmann [email protected] 20/56

Page 21: Algorithmen und Datenstrukturen Kapitel 2: 0.2cm ... · Wiederholung Korrektheit von Algorithmen Rekursive Algorithmen O-Notation Suchen Sortieren O-Notation - De nition De nition

WiederholungKorrektheit von Algorithmen

Rekursive Algorithmen

O-NotationSuchenSortieren

Beobachtungen und Fragen

Beobachtungen und Fragen bis hierher:

1 Korrektheit der Verfahren bzw. von Algorithmen allgemein?

2 Bisher nur auf Arrays gearbeitet. Geht da auch was anderes,d.h. mit anderen Datenstrukturen? (Einerseits, um esvielleicht schneller zu machen, andererseits, weil die Datenvielleicht nicht in einem Array sind!)

3 Konnen wir schneller sortieren als in O(n2)?

4 Wie kann man die Laufzeit rekursiver Algorithmenanalysieren?

Heute: 1. und 4.

Frank Heitmann [email protected] 21/56

Page 22: Algorithmen und Datenstrukturen Kapitel 2: 0.2cm ... · Wiederholung Korrektheit von Algorithmen Rekursive Algorithmen O-Notation Suchen Sortieren O-Notation - De nition De nition

WiederholungKorrektheit von Algorithmen

Rekursive AlgorithmenInsertionSort

Sortieren

Definition (Das Sortierproblem)

Eingabe: Eine Sequenz < a1, a2, . . . , an > von n Zahlen.Gesucht: Eine Permutation < a′1, a

′2, . . . , a

′n > der Eingabesequenz

mit a′1 ≤ a′2 ≤ . . . ≤ a′n.

Anmerkung

Ob die Reihenfolge zweier Elemente ai , aj (i < j) mit ai = ajbeibehalten werden soll oder nicht, ist nicht gesagt. Bleibt sieerhalten, d.h. ist a′p = ai , a′q = aj und p < q, so nennt man dasVerfahren stabil.Ferner heißt ein Sortierverfahren in-place (oder in situ), wenn derzusatzlich benotigte Speicherbedarf unabhangig von der gegebenenSequenz ist.

Frank Heitmann [email protected] 22/56

Page 23: Algorithmen und Datenstrukturen Kapitel 2: 0.2cm ... · Wiederholung Korrektheit von Algorithmen Rekursive Algorithmen O-Notation Suchen Sortieren O-Notation - De nition De nition

WiederholungKorrektheit von Algorithmen

Rekursive AlgorithmenInsertionSort

InsertionSort: Die Idee

Beim Sortieren durch Einfugen (InsertionSort) wird ahnlich wiebeim Spielkarten sortieren vorgegangen:

Starte mit der leeren linken Hand

Nimm ein Karte und fuge sie an der richtigen Position in derlinken Hand ein. Dazu

Vergleiche diese neue Karte von rechts nach links mit denKarten, die schon auf der linken Hand sind.Sobald eine kleinere Karte erreicht wird, fuge ein.

⇒ Zu jedem Zeitpunkt sind die Karten auf der linken Handsortiert.

⇒ Die Karten auf der linken Hand sind jeweils die oberstenKarten des Haufens.

Frank Heitmann [email protected] 23/56

Page 24: Algorithmen und Datenstrukturen Kapitel 2: 0.2cm ... · Wiederholung Korrektheit von Algorithmen Rekursive Algorithmen O-Notation Suchen Sortieren O-Notation - De nition De nition

WiederholungKorrektheit von Algorithmen

Rekursive AlgorithmenInsertionSort

InsertionSort: Der Algorithmus

Algorithmus 8 InsertionSort(A[1 . . . n])

1: for j = 2 to n do2: key = A[j ]3: i = j − 14: while i > 0 und A[i ] > key do5: A[i + 1] = A[i ]6: i = i − 17: end while8: A[i + 1] = key9: end for

Frank Heitmann [email protected] 24/56

Page 25: Algorithmen und Datenstrukturen Kapitel 2: 0.2cm ... · Wiederholung Korrektheit von Algorithmen Rekursive Algorithmen O-Notation Suchen Sortieren O-Notation - De nition De nition

WiederholungKorrektheit von Algorithmen

Rekursive AlgorithmenInsertionSort

InsertionSort: Korrektheit 1/4

Die Korrektheit zeigen wir mit folgender Schleifeninvarianten:

Zu Beginn jeder Iteration der for-Schleife besteht dasTeilfeld A[1..j − 1] aus den ursprunglich in A[1..j − 1]enthaltenden Elementen, alledings in geordneterReihenfolge.

Anmerkung

’Zu Beginn der Iteration’ heißt hier nach Zuweisung des neuenWertes an j und vor dem Test im Schleifenkopf.

Frank Heitmann [email protected] 25/56

Page 26: Algorithmen und Datenstrukturen Kapitel 2: 0.2cm ... · Wiederholung Korrektheit von Algorithmen Rekursive Algorithmen O-Notation Suchen Sortieren O-Notation - De nition De nition

WiederholungKorrektheit von Algorithmen

Rekursive AlgorithmenInsertionSort

InsertionSort: Korrektheit 2/4

Zu zeigen ist:

1 Initialisierung: Die Invariante ist vor der ersten Iteration wahr.

2 Fortsetzung: Wenn die Invariante vor der Iteration der Schleifewahr ist, so ist sie es auch vor der nachsten Iteration.

3 Terminierung: Die Schleife bricht irgendwann ab.

Wenn die Schleife abbricht, so sollte die Invariante eine nutzlicheEigenschaft liefern, die uns hilft, die Korrektheit des Algorithmuszu zeigen.

Frank Heitmann [email protected] 26/56

Page 27: Algorithmen und Datenstrukturen Kapitel 2: 0.2cm ... · Wiederholung Korrektheit von Algorithmen Rekursive Algorithmen O-Notation Suchen Sortieren O-Notation - De nition De nition

WiederholungKorrektheit von Algorithmen

Rekursive AlgorithmenInsertionSort

InsertionSort: Korrektheit 3/4

1 Initialisierung: Vor der ersten Iteration ist j = 2 und dasTeilfeld A[1..j − 1] = A[1] besteht aus nur einem Feld, dasauch ursprunglich dort war und das sortiert ist.

2 Fortsetzung: Zu zeigen ist, dass die Invariante bei jederIteration erhalten bleibt. Es wird die richtige Position fur A[j ]gesucht (darum sind nachfolgend in A[1..j ] nur jene Elemente,die dort auch vorher waren) und gefunden (daher sind sie nunsortiert). Letzteres ware mit einer weiterenSchleifeninvarianten fur die while-Schleife zu zeigen.

3 Terminierung: Die while-Schleife terminiert stets (warum?)und damit auch die for-Schleife (warum?)

Frank Heitmann [email protected] 27/56

Page 28: Algorithmen und Datenstrukturen Kapitel 2: 0.2cm ... · Wiederholung Korrektheit von Algorithmen Rekursive Algorithmen O-Notation Suchen Sortieren O-Notation - De nition De nition

WiederholungKorrektheit von Algorithmen

Rekursive AlgorithmenInsertionSort

InsertionSort: Korrektheit 4/4

Wenn die Schleife abbricht, gilt j = n + 1. Setzen wir diesen Wertfur j in die Invariante ein (die ja zu Beginn jeder Iteration wahrist!), so erhalten wir, dass A[1..n] aus den ursprunglichenElementen in sortierter Reihenfolge besteht. Damit ist das gesamteFeld sortiert und der Algorithmus korrekt!

Frank Heitmann [email protected] 28/56

Page 29: Algorithmen und Datenstrukturen Kapitel 2: 0.2cm ... · Wiederholung Korrektheit von Algorithmen Rekursive Algorithmen O-Notation Suchen Sortieren O-Notation - De nition De nition

WiederholungKorrektheit von Algorithmen

Rekursive AlgorithmenInsertionSort

InsertionSort: Laufzeit

Die Laufzeit ist in O(n2), da der der Rumpf der for-Schleife n − 1mal ausgefuhrt wird und im i-ten Durchgang der for-Schleife derRumpf der while-Schleife maximal i-mal ausgefuhrt wird. Damitwird der Rumpf der while-Schleife maximal1 + 2 + ...+ n − 1 = n(n−1)

2 -mal ausgefuhrt.

Hinweis

Eine detailliertere Analyse ist in Kapitel 2.2 im [Cormen] zu finden.

Frank Heitmann [email protected] 29/56

Page 30: Algorithmen und Datenstrukturen Kapitel 2: 0.2cm ... · Wiederholung Korrektheit von Algorithmen Rekursive Algorithmen O-Notation Suchen Sortieren O-Notation - De nition De nition

WiederholungKorrektheit von Algorithmen

Rekursive AlgorithmenInsertionSort

Zu Korrektheitsbeweisen

Zum Vorgehen bei Korrektheitsbeweisen:

Kein generelles Verfahren! Jeder Algorithmus muss “neu” alskorrekt bewiesen werden.

Schleifeninvarianten sind oft nutzlich - aber auch diese lassensich nicht automatisch bestimmen! Man muss also jedes Malneu uberlegen, was eine sinnvolle Schleifeninvariante seinkonnte und dann beweisen, dass diese gilt (um sie dannhoffentlich beim Korrektheitsbeweis sinnvoll nutzen zukonnen).

Ansonsten: Wie bei mathematischen Beweisen! Ein StuckText schreiben, dass euer Gegenuber von der Richtigkeit derAussage uberzeugt. Bei der Beweisfuhrung ist i.A. anirgendeiner Stelle ein kreativer Schritt notig (Erfahrung hilfthier und wir uben dies im Laufe der Vorlesung).

Frank Heitmann [email protected] 30/56

Page 31: Algorithmen und Datenstrukturen Kapitel 2: 0.2cm ... · Wiederholung Korrektheit von Algorithmen Rekursive Algorithmen O-Notation Suchen Sortieren O-Notation - De nition De nition

WiederholungKorrektheit von Algorithmen

Rekursive AlgorithmenInsertionSort

Zu Korrektheitsbeweisen

Eine letzte Anmerkung:

Oft wird die Idee zu einem Algorithmus als korrekt bewiesen.In der Implementierung konnten sich dann trotzdem Fehlereinschleichen. Diese musste also ebenfalls als korrektnachgewiesen werden. Hierzu gibt es hilfreiche Tools, das gehtaber uber diese Vorlesung hinaus.

Frank Heitmann [email protected] 31/56

Page 32: Algorithmen und Datenstrukturen Kapitel 2: 0.2cm ... · Wiederholung Korrektheit von Algorithmen Rekursive Algorithmen O-Notation Suchen Sortieren O-Notation - De nition De nition

WiederholungKorrektheit von Algorithmen

Rekursive Algorithmen

EinfuhrungRekurrenzgleichungenZusammenfassung

Eine andere Art von Algorithmen

Algorithmus 9 fac(n)

1: if n == 0 then2: return 13: else4: return n · fac(n − 1)5: end if

Dies ist ein rekursiver Algorithmus... unsere bisherigen Technikensind hier bei der Analyse wenig hilfreich (vor allem beikomplizierteren rekursiven Algorithmen).

Frank Heitmann [email protected] 32/56

Page 33: Algorithmen und Datenstrukturen Kapitel 2: 0.2cm ... · Wiederholung Korrektheit von Algorithmen Rekursive Algorithmen O-Notation Suchen Sortieren O-Notation - De nition De nition

WiederholungKorrektheit von Algorithmen

Rekursive Algorithmen

EinfuhrungRekurrenzgleichungenZusammenfassung

Fakultatsfunktion - Iterativ

Jeder rekursive Algorithmus lasst sich auch iterativ schreiben (undumgekehrt)...

Algorithmus 10 fac(n)

1: res = 12: for i = 1 to n do3: res = res · i4: end for5: return res

Anmerkung

Die Laufzeit ist in O(n). Aber Achtung! Dies ist exponentiell inder Große der Eingabe! Diese ist namlich nur in O(log n). DenWert einer Zahl als Kenngroße zu nehmen ist i.A. nicht sinnvoll.

Frank Heitmann [email protected] 33/56

Page 34: Algorithmen und Datenstrukturen Kapitel 2: 0.2cm ... · Wiederholung Korrektheit von Algorithmen Rekursive Algorithmen O-Notation Suchen Sortieren O-Notation - De nition De nition

WiederholungKorrektheit von Algorithmen

Rekursive Algorithmen

EinfuhrungRekurrenzgleichungenZusammenfassung

Rekursive Algorithmen

Rekursive Algorithmen sind oft aufgrund der wiederholtenFunktionsaufrufe und der mit den rekursiven Aufrufeneinhergehenden Kontextspeicherung langsam.

Andererseits lohnt sich fur kompliziertere Probleme einrekursiver Ansatz oft, da dieser meist ubersichtlicher ist. Hierwerden iterative Ansatze oft ebenfalls langsam, da sie vielverwalten mussen (im schlimmsten Fall muss dieStackverwaltung des rekursiven Algorithmus selbstgeschrieben werden).

⇒ Wir wollen nachfolgend die Laufzeit rekursiver Algorithmenmittels Rekurrenz- oder auch Rekursionsgleichungenanalysieren...

Frank Heitmann [email protected] 34/56

Page 35: Algorithmen und Datenstrukturen Kapitel 2: 0.2cm ... · Wiederholung Korrektheit von Algorithmen Rekursive Algorithmen O-Notation Suchen Sortieren O-Notation - De nition De nition

WiederholungKorrektheit von Algorithmen

Rekursive Algorithmen

EinfuhrungRekurrenzgleichungenZusammenfassung

Die Turme von Hanoi

Definition (Aufgabenstellung)

Seien drei Stangen A, B, C gegeben und n Scheiben, die der Großenach sortiert auf Stange A liegen. Die Aufgabe ist es, den ganzenTurm von Scheiben auf Stange C zu verschieben, dabei nur eineScheibe in einem Zeitschritt zu bewegen und nie eine großereScheibe auf eine kleinere zu legen.

Ein rekursiver Algorithmus

1 Verschiebe die n − 1 oberen Scheiben von A auf B.

2 Verschiebe die großte Scheibe von A auf C.

3 Verschiebe alle n − 1 Scheiben von B auf C.

Frank Heitmann [email protected] 35/56

Page 36: Algorithmen und Datenstrukturen Kapitel 2: 0.2cm ... · Wiederholung Korrektheit von Algorithmen Rekursive Algorithmen O-Notation Suchen Sortieren O-Notation - De nition De nition

WiederholungKorrektheit von Algorithmen

Rekursive Algorithmen

EinfuhrungRekurrenzgleichungenZusammenfassung

Die Turme von Hanoi - Analyse

Sei T (n) die Anzahl der Verschiebungen, die obiger Algorithmusbraucht, um n Scheiben zu verschieben. Es gilt:

T (n) =

1 , falls n = 12T (n − 1) + 1 , falls n ≥ 2

Wie ermitteln wir eine geschlossene Form fur T (n)?

Frank Heitmann [email protected] 36/56

Page 37: Algorithmen und Datenstrukturen Kapitel 2: 0.2cm ... · Wiederholung Korrektheit von Algorithmen Rekursive Algorithmen O-Notation Suchen Sortieren O-Notation - De nition De nition

WiederholungKorrektheit von Algorithmen

Rekursive Algorithmen

EinfuhrungRekurrenzgleichungenZusammenfassung

Die Turme von Hanoi - Analyse. Methode 1

Methode 1. Wir berechnen T (n) fur kleine Werte, Raten eineLosung und beweisen diese.

T (n) =

1 , falls n = 12T (n − 1) + 1 , falls n ≥ 2

n 1 2 3 4 5 6 7 8 9 10

T (n) 1 3 7 15 31 63 127 255 511 1023

Losung raten? ... T (n) = 2n − 1. Dies ist nun noch zu beweisen!

Frank Heitmann [email protected] 37/56

Page 38: Algorithmen und Datenstrukturen Kapitel 2: 0.2cm ... · Wiederholung Korrektheit von Algorithmen Rekursive Algorithmen O-Notation Suchen Sortieren O-Notation - De nition De nition

WiederholungKorrektheit von Algorithmen

Rekursive Algorithmen

EinfuhrungRekurrenzgleichungenZusammenfassung

Die Turme von Hanoi - Analyse. Methode 1

Gegeben:

T (n) =

1 , falls n = 12T (n − 1) + 1 , falls n ≥ 2

Zu zeigen: T (n) = 2n − 1. - Machen wir mittels Induktion...

Induktionsanfang. Fur n = 1 gilt T (1) = 21 − 1 = 1.

Induktionsannahme. Wir nehmen an, dass fur ein n ≥ 1 dieBehauptung gilt, d.h. dass T (n) = 2n − 1 ist.

Induktionsschritt.T (n + 1) = 2T (n) + 1 = 2(2n − 1) + 1 = 2n+1 − 1.

Damit sind wir fertig. Fur alle n ≥ 1 gilt damit T (n) = 2n − 1.

Frank Heitmann [email protected] 38/56

Page 39: Algorithmen und Datenstrukturen Kapitel 2: 0.2cm ... · Wiederholung Korrektheit von Algorithmen Rekursive Algorithmen O-Notation Suchen Sortieren O-Notation - De nition De nition

WiederholungKorrektheit von Algorithmen

Rekursive Algorithmen

EinfuhrungRekurrenzgleichungenZusammenfassung

Die Turme von Hanoi - Analyse. Methode 2

Methode 2. Rekursives Einsetzen (Substitutions- oderAbwicklungsmethode)

T (n) =

1 , falls n = 12T (n − 1) + 1 , falls n ≥ 2

T (n) = 2T (n − 1) + 1

= 2(2T (n − 2) + 1) + 1 = 4T (n − 2) + 2 + 1

= 4(2T (n − 3) + 1) + 2 + 1 = 8T (n − 3) + 4 + 2 + 1

= ...

= 2kT (n − k) + 2k−1 + 2k−2 + . . .+ 21 + 20 (∗)

(*) Diese Zeile ist mit vollstandiger Induktion zu zeigen (Ubung)!Frank Heitmann [email protected] 39/56

Page 40: Algorithmen und Datenstrukturen Kapitel 2: 0.2cm ... · Wiederholung Korrektheit von Algorithmen Rekursive Algorithmen O-Notation Suchen Sortieren O-Notation - De nition De nition

WiederholungKorrektheit von Algorithmen

Rekursive Algorithmen

EinfuhrungRekurrenzgleichungenZusammenfassung

Die Turme von Hanoi - Analyse. Methode 2

Methode 2. Rekursives Einsetzen (Substitutions- oderAbwicklungsmethode)

T (n) =

1 , falls n = 12T (n − 1) + 1 , falls n ≥ 2

T (n) = 2kT (n − k) + 2k−1 + 2k−2 + . . .+ 21 + 20

Wann bricht die Rekursion ab? Bei k = n − 1

Frank Heitmann [email protected] 40/56

Page 41: Algorithmen und Datenstrukturen Kapitel 2: 0.2cm ... · Wiederholung Korrektheit von Algorithmen Rekursive Algorithmen O-Notation Suchen Sortieren O-Notation - De nition De nition

WiederholungKorrektheit von Algorithmen

Rekursive Algorithmen

EinfuhrungRekurrenzgleichungenZusammenfassung

Die Turme von Hanoi - Analyse. Methode 2

Methode 2. Rekursives Einsetzen (Substitutions- oderAbwicklungsmethode)

T (n) =

1 , falls n = 12T (n − 1) + 1 , falls n ≥ 2

T (n) = 2kT (n − k) + 2k−1 + 2k−2 + . . .+ 21 + 20 (∗)= 2n−1T (n − (n − 1)) + 2n−2 + 2n−3 + . . .+ 21 + 20

=n−1∑i=0

2i =2n − 1

2− 1= 2n − 1 ∈ Θ(2n)

(*) Da bei T (1), also n − k = 1, die Rekursion abbricht, wird mitk = n − 1 weiter gerechnet.

Frank Heitmann [email protected] 41/56

Page 42: Algorithmen und Datenstrukturen Kapitel 2: 0.2cm ... · Wiederholung Korrektheit von Algorithmen Rekursive Algorithmen O-Notation Suchen Sortieren O-Notation - De nition De nition

WiederholungKorrektheit von Algorithmen

Rekursive Algorithmen

EinfuhrungRekurrenzgleichungenZusammenfassung

Methode 2 - Vorgehen

Das Vorgehen bei der Substitutionsmethode:

1 Abwickeln, bis eine Formel abhangig von k erkennbar ist.

2 Diese Formel mittels Induktion beweisen.

3 Den Wert von k bestimmen, bei dem die Rekursion abbricht.

4 Einsetzen und zu einem Ergebnis kommen.

5 Eventuell mit diesem Ergebnis noch Abschatzungen machen,um zu Aussagen bzgl. der O-Notation zu kommen.

Frank Heitmann [email protected] 42/56

Page 43: Algorithmen und Datenstrukturen Kapitel 2: 0.2cm ... · Wiederholung Korrektheit von Algorithmen Rekursive Algorithmen O-Notation Suchen Sortieren O-Notation - De nition De nition

WiederholungKorrektheit von Algorithmen

Rekursive Algorithmen

EinfuhrungRekurrenzgleichungenZusammenfassung

Eine andere Rekurrenzgleichung

Die Rekurrenzgleichung

T (n) =

c , falls n = 13T (n/3) + 1/n , falls n ≥ 2

Kann auch mit der Substitutionsmethode gelost werden.

Eine Alternative bietet das Mastertheorem.

Frank Heitmann [email protected] 43/56

Page 44: Algorithmen und Datenstrukturen Kapitel 2: 0.2cm ... · Wiederholung Korrektheit von Algorithmen Rekursive Algorithmen O-Notation Suchen Sortieren O-Notation - De nition De nition

WiederholungKorrektheit von Algorithmen

Rekursive Algorithmen

EinfuhrungRekurrenzgleichungenZusammenfassung

Mastertheorem

Definition (Mastertheorem)

Das Mastertheorem gilt fur Rekurrenzen der Form:

T (n) =

c falls n = 1a · T (nb ) + f (n) falls n > 1

Hierbei sind a ≥ 1, b > 1 und c Konstanten, nb wird als bnbc oder

dnbe verstanden und T (n) uber N definiert. Es gilt:

1 T (n) ∈ Θ(nlogb(a)), falls f (n) ∈ O(nlogb(a)−ε) fur ein ε > 0.

2 T (n) ∈ Θ(nlogb(a) log2(n)), falls f (n) ∈ Θ(nlogb(a)).

3 T (n) ∈ Θ(f (n)), falls f (n) ∈ Ω(nlogb(a)+ε) fur ein ε > 0 unda · f (nb ) ≤ δ · f (n) fur ein δ < 1 und große n.

Frank Heitmann [email protected] 44/56

Page 45: Algorithmen und Datenstrukturen Kapitel 2: 0.2cm ... · Wiederholung Korrektheit von Algorithmen Rekursive Algorithmen O-Notation Suchen Sortieren O-Notation - De nition De nition

WiederholungKorrektheit von Algorithmen

Rekursive Algorithmen

EinfuhrungRekurrenzgleichungenZusammenfassung

Mastertheorem - Beispiel

T (n) ∈ Θ(nlogb(a)), falls f (n) ∈ O(nlogb(a)−ε) fur ein ε > 0

T (n) =

c ′

3T (n/3) + 1/nT (n) =

ca · T (nb ) + f (n)

Wegen logb(a) = log3(3) = 1 und f (n) = 1n ist f (n) ∈ O(n1−ε) bei

Wahl von z.B. ε = 2 > 0.

Es liegt also Fall 1 vor und dies ergibt (wie auch beim Abwickeln)T (n) ∈ Θ(n).

Frank Heitmann [email protected] 45/56

Page 46: Algorithmen und Datenstrukturen Kapitel 2: 0.2cm ... · Wiederholung Korrektheit von Algorithmen Rekursive Algorithmen O-Notation Suchen Sortieren O-Notation - De nition De nition

WiederholungKorrektheit von Algorithmen

Rekursive Algorithmen

EinfuhrungRekurrenzgleichungenZusammenfassung

Mastertheorem. Methode 3

Anmerkung

Das Mastertheorem ist die dritte Methode, die wir zur Losungvon Rekurrenzgleichungen nutzen werden.Das Mastertheorem ist ein machtiges Hilfsmittel. Es ist aber nichtimmer einsetzbar! Z.B. bei T (n) = 2 · T (n/2) + n · log n nicht.

Literaturhinweis

Das Mastertheorem selbst wollen wir hier nicht beweisen. Einen Be-weis findet man im [Cormen].

Frank Heitmann [email protected] 46/56

Page 47: Algorithmen und Datenstrukturen Kapitel 2: 0.2cm ... · Wiederholung Korrektheit von Algorithmen Rekursive Algorithmen O-Notation Suchen Sortieren O-Notation - De nition De nition

WiederholungKorrektheit von Algorithmen

Rekursive Algorithmen

EinfuhrungRekurrenzgleichungenZusammenfassung

Zusammenfassung und Wiederholung

Ubliches Vorgehen in der Algorithmik:

1 Gegeben ein Problem, einen Algorithmus finden, der es lost.

2 Korrektheit des Algorithmus beweisen.

3 Laufzeit des Algorithmus ermitteln und beweisen.

Frank Heitmann [email protected] 47/56

Page 48: Algorithmen und Datenstrukturen Kapitel 2: 0.2cm ... · Wiederholung Korrektheit von Algorithmen Rekursive Algorithmen O-Notation Suchen Sortieren O-Notation - De nition De nition

WiederholungKorrektheit von Algorithmen

Rekursive Algorithmen

EinfuhrungRekurrenzgleichungenZusammenfassung

Zusammenfassung und Wiederholung

Zu 1. Algorithmentechniken / Algorithmenentwurf. Bisher:

Lineare Methoden (z.B. Suche, Maximum/Minimum)

Binare Suche (’Halbieren’)

Suchraum komplett durcharbeiten (geht (fast) immer, aberteuer)

Frank Heitmann [email protected] 48/56

Page 49: Algorithmen und Datenstrukturen Kapitel 2: 0.2cm ... · Wiederholung Korrektheit von Algorithmen Rekursive Algorithmen O-Notation Suchen Sortieren O-Notation - De nition De nition

WiederholungKorrektheit von Algorithmen

Rekursive Algorithmen

EinfuhrungRekurrenzgleichungenZusammenfassung

Zusammenfassung und Wiederholung

Zu 2. Vorgehen beim Korrektheitsbeweis:

Kein generelles Verfahren! Jeder Algorithmus muss “neu” alskorrekt bewiesen werden.

Schleifeninvarianten sind oft nutzlich.

Ansonsten: Vorgehen wie bei mathematischen Beweisen!Erfahrung hilft!

Frank Heitmann [email protected] 49/56

Page 50: Algorithmen und Datenstrukturen Kapitel 2: 0.2cm ... · Wiederholung Korrektheit von Algorithmen Rekursive Algorithmen O-Notation Suchen Sortieren O-Notation - De nition De nition

WiederholungKorrektheit von Algorithmen

Rekursive Algorithmen

EinfuhrungRekurrenzgleichungenZusammenfassung

Zusammenfassung und Wiederholung

Zu 3. Laufzeitanalyse...

... mittels O-Notation.

Laufzeitanalyse einfacher sequentieller Algorithmen.

Laufzeitanalyse rekursiver Algorithmen (z.B. von Divide andConquer Verfahren) mittels dreier Methoden:

Raten und BeweisenAbwickelnMastertheorem

Frank Heitmann [email protected] 50/56

Page 51: Algorithmen und Datenstrukturen Kapitel 2: 0.2cm ... · Wiederholung Korrektheit von Algorithmen Rekursive Algorithmen O-Notation Suchen Sortieren O-Notation - De nition De nition

WiederholungKorrektheit von Algorithmen

Rekursive Algorithmen

EinfuhrungRekurrenzgleichungenZusammenfassung

Zusammenfassung und Wiederholung

Wichtig bei der Laufzeitanalyse:

1 Uberlegen bzgl. welcher Kenngroße der Eingabe wir messenwollen. Diese kann sich von der Große der Eingabeunterscheiden! (Beispiel: Anzahl Knoten eines Graphen).

2 Laufzeit/Speicherbedarf bzgl. dieser Kenngroße ausdrucken.

3 Nochmal uberlegen, ob dies die Aussage des Ergebnissesverfalscht (so wie bei der Fakultatsberechnung oben).

⇒ I.A. sollte sich die eigentliche Eingabegroße leicht durch dieKenngroße ausdrucken lassen und der Unterschied sollte nichtzu groß sein.

+ Beim Graphen mit n Knoten ist die Adjazenmatrix in O(n2).− Ist eine Zahl n die Eingabe, so ist die Eingabegroße in O(log n).

Eine Laufzeit von O(n) ware also exponentiell in der Eingabe!

Frank Heitmann [email protected] 51/56

Page 52: Algorithmen und Datenstrukturen Kapitel 2: 0.2cm ... · Wiederholung Korrektheit von Algorithmen Rekursive Algorithmen O-Notation Suchen Sortieren O-Notation - De nition De nition

WiederholungKorrektheit von Algorithmen

Rekursive Algorithmen

EinfuhrungRekurrenzgleichungenZusammenfassung

Ausblick

Nachstes Mal:

Divide and Conquer als klassische Algorithmentechnik (=Algorithmen-’Muster’) bzw. klassisches rekursives Verfahren

⇒ Großere Probleme werden in kleinere zerlegt, die dann seperat(und i.A. rekursiv) nach der gleichen Methode (!) gelostwerden. Die Teilergebnisse werden dann passend zur Losungdes Problems zusammengesetzt.Unter anderem MergeSort als BeispielRekurrenzgleichungen sind hier wichtig

Mehr zum MastertheoremNutzliches Hilfsmittel: Variablentransformation

Frank Heitmann [email protected] 52/56

Page 53: Algorithmen und Datenstrukturen Kapitel 2: 0.2cm ... · Wiederholung Korrektheit von Algorithmen Rekursive Algorithmen O-Notation Suchen Sortieren O-Notation - De nition De nition

WiederholungKorrektheit von Algorithmen

Rekursive Algorithmen

EinfuhrungRekurrenzgleichungenZusammenfassung

Anhang

Anhang

Frank Heitmann [email protected] 53/56

Page 54: Algorithmen und Datenstrukturen Kapitel 2: 0.2cm ... · Wiederholung Korrektheit von Algorithmen Rekursive Algorithmen O-Notation Suchen Sortieren O-Notation - De nition De nition

WiederholungKorrektheit von Algorithmen

Rekursive Algorithmen

EinfuhrungRekurrenzgleichungenZusammenfassung

Ein weitere Beispiel

T (n) =

c , falls n = 13T (n/3) + 1/n , falls n ≥ 2

T (n) = 3 · T (n

3) +

1

n

= 3 ·(

3 · T (n

32) +

3

n

)+

1

n

= 32 · T (n

32) +

32

n+

30

n

= 32 ·(

3 · T (n

33) +

32

n

)+

32

n+

30

n

= 33 · T (n

33) +

34

n+

32

n+

30

n= . . .

Frank Heitmann [email protected] 54/56

Page 55: Algorithmen und Datenstrukturen Kapitel 2: 0.2cm ... · Wiederholung Korrektheit von Algorithmen Rekursive Algorithmen O-Notation Suchen Sortieren O-Notation - De nition De nition

WiederholungKorrektheit von Algorithmen

Rekursive Algorithmen

EinfuhrungRekurrenzgleichungenZusammenfassung

Ein weitere Beispiel

T (n) = 33 · T (n

33) +

34

n+

32

n+

30

n= . . .

= 3k · T (n

3k) +

1

n

k−1∑i=0

32i (∗)

= c · n +1

n

32k − 1

32 − 1(mit k = log3(n) bzw. n = 3k)

= c · n +n2 − 1

8n= c · n +

1

8

(n − 1

n

)

(*) Diese Zeile ist wieder mit vollstandiger Induktion zu zeigen!

Frank Heitmann [email protected] 55/56

Page 56: Algorithmen und Datenstrukturen Kapitel 2: 0.2cm ... · Wiederholung Korrektheit von Algorithmen Rekursive Algorithmen O-Notation Suchen Sortieren O-Notation - De nition De nition

WiederholungKorrektheit von Algorithmen

Rekursive Algorithmen

EinfuhrungRekurrenzgleichungenZusammenfassung

Ein weitere Beispiel

Aus

T (n) = c · n +1

8

(n − 1

n

)folgt nun

T (n) < (c + 18) · n und damit T (n) ∈ O(n) und

T (n) > c · n und damit T (n) ∈ Ω(n).

Insgesamt haben wir also

T (n) ∈ Θ(n)

gezeigt!

Frank Heitmann [email protected] 56/56