3. Laufzeitabschätzung mit O und Ω

3.2 Formale Definition von O und Ω

Fassen wir die Ergebnisse zusammen, die wir über die drei Sortieralgorithmen Quicksort, Mergesort und Heapsort erhalten haben: die Anzahl der Vergleichsoperationen im Worst-Case ist ungefähr

  • nlog2n für Mergesort,
  • 2nlnn für Quicksort,
  • 3nlog2n für Heapsort.

Alle drei Werte sind von der Form Cnlogn für eine Konstante C, die vom Algorithmus abhängt, aber nicht von der Inputgröße. Für die Sortieralgorithmen können wir den Wert von C genau bestimmen. Im weiteren Verlauf der Vorlesung wird dies aber nicht immer möglich sein, und oft auch nicht interessant. Wir führen daher eine Definition ein, die uns erlaubt, dieses C zu ignorieren.

Definition 3.2.1 Seien f,g:NR0+ zwei Funktionen. Wir schreiben fO(g), falls es Zahlen n0N und C>0 gibt, so dass f(n)Cg(n)nn0 gilt. Wir schreiben fΩ(g), falls es (womöglich andere) Zahlen n0N und C>0 gibt, so dass f(n)Cg(n)nn0 gilt. Wenn sowohl fO(g) als auch fΩ(g), dann schreiben wir fΘ(g).

Am Besten lernen Sie, mit dieser Notation umzugehen, indem Sie Beispiele durchrechnen und Übungsaufgaben lösen.

Behauptung 3.2.2 log2(n+1)O(log2n).
Beweis. Wir müssen zeigen, dass log2(n+1)Clog2n gilt, zumindest für große Werte von n. Dabei dürfen wir frei wählen, was C ist und was "große Werte" bedeutet. Um einen Anfang zu machen, schreiben wir einfach mal log2(n+1) hin und schätzen es nach oben ab: log2(n+1)log2(n+1)+1(falls n1)log2(2n)+1=log2n+2 .

Das ganze soll nun Clog2n sein. Wie sollen wir C wählen? Probieren wir mal C=2 aus:

log2n+2?2log2n2?log2n4?n .

Wir schließen also: für alle n4 gilt log(n+1)2log2n. Wir wählen also n0:=4 und C:=2; damit gilt log2(n+1)O(log2n).

Bitte beachten Sie, dass wir bei der Wahl von CR+ und n0N recht viel Freiheit haben. Probieren wir die obige Rechnung also nochmal mit C:=1.1:

log2n+2?1.1log2n2?0.1log2n20?log2nn?220 . Die gleiche Rechnung funktioniert also auch für C=1.1, allerdings allerdings erst für rechts große Werte n, nämlich für nn0:=220.
Behauptung 3.2.3 log2(n+1)Ω(log2n).
Beweis. Dies ist viel einfacher: log2(n+1)log2(n+1)log2n , und somit können wir C=1 und n0=1 setzen.

Wir haben also gezeigt, dass log2(n+1)Θ(log2n) gilt.

Übungsaufgabe 3.2.1 Zeigen Sie, dass die Worst-Case-Anzahl der Vergleichsoperationen in Quicksort, Mergesort und Heapsort alle Θ(nlogn) sind, also

  • nlog2nΘ(nlogn),
  • 2nlnnΘ(nlogn),
  • 3nlog2nΘ(nlogn).

Übungsaufgabe 3.2.2 SelectionSort macht n(n1)/2 Vergleichsoperationen. Zeigen Sie, dass dies Θ(n2) ist.

Zeigen Sie, dass auch n(n+1)2Θ(n2) ist.

Erinnern Sie sich an den Binomialkoeffizienten (nk). Dies ist definiert als die Anzahl der k-elementigen Teilmengen der Menge {1,2,,n}. Es gilt

(nk)=n!(nk)!k! .

Übungsaufgabe 3.2.3 Zeigen Sie, dass (n3)Θ(n3) gilt, (n4)Θ(n4) und ganz generell (nk)Θ(nk) für jede natürliche Zahl k gilt.

Summen

In der Analyse von Algorithmen treten häufig Summen auf. Da ist es besonders wichtig, diese durch einen prägnanten Ausdruck abzuschätzen.

Übungsaufgabe 3.2.4 Zeigen Sie, dass gilt.

Tip: Versuchen Sie nicht, eine geschlossene Formel für die Summe zu finden.

Übungsaufgabe 3.2.5 Sei eine beliebige Zahl. Zeigen Sie, dass

gilt. In Worten: eine geometrische Summe wird durch ihren höchsten Term dominiert.

Übungsaufgabe 3.2.6 Zeigen Sie, dass

gilt.

Übungsaufgabe 3.2.7 Zeigen Sie, dass gilt.

Tip: Verwenden Sie die Tatsache, dass ist.

Übungsaufgabe 3.2.8 Zeigen Sie, dass gilt.

Übungsaufgabe 3.2.9 Zeigen Sie ganz allgemein, dass für alle und .

Das ist also die asymptotische Entsprechung des Vergleichsoperators . Was wäre eine asymptotische Version von ? Wie können wir beispielsweise ausdrücken, dass Quicksort asymptotisch echt besser ist als Selectionsort?

Definition 3.2.4 Seien zwei Funktionen. Wir schreiben , falls es für jede Zahl eine Zahl gibt, so dass gilt. Äquivalent können wir schreiben. Wir schreiben , falls es für jede Zahl eine Zahl gibt, so dass gilt. Äquivalent können wir schreiben.

Übungsaufgabe 3.2.10 Zeigen Sie, dass .