komplexität von algorithmen - userpages.uni-koblenz.delaemmel/oopm/slides/complexity.pdf · (c)...
TRANSCRIPT
![Page 1: Komplexität von Algorithmen - userpages.uni-koblenz.delaemmel/oopm/slides/complexity.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Komplexitätsanalyse Unmittelbare](https://reader030.vdocuments.net/reader030/viewer/2022041301/5e0ffb9ecbe0dd60a8173e87/html5/thumbnails/1.jpg)
Komplexität von AlgorithmenOOPM, Ralf Lämmel
Ganz schön komplex!
![Page 2: Komplexität von Algorithmen - userpages.uni-koblenz.delaemmel/oopm/slides/complexity.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Komplexitätsanalyse Unmittelbare](https://reader030.vdocuments.net/reader030/viewer/2022041301/5e0ffb9ecbe0dd60a8173e87/html5/thumbnails/2.jpg)
(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau
Motivierendes Beispiel
Algorithmus
Eingabe: ein Zahlen-Feld a der Länge n
Ausgabe: Durchschnitt
Fragen:
Was ist die Laufzeit des Algorithmus?
Speicherverbrauch ist offensichtlich “gering”.
885
sum = 0; i = 0; while (i < n) { sum += a[i]; i++; } return sum/n
![Page 3: Komplexität von Algorithmen - userpages.uni-koblenz.delaemmel/oopm/slides/complexity.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Komplexitätsanalyse Unmittelbare](https://reader030.vdocuments.net/reader030/viewer/2022041301/5e0ffb9ecbe0dd60a8173e87/html5/thumbnails/3.jpg)
(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau
KomplexitätsanalyseUnmittelbare Ziele
Vorhersage der KostenVerifikation von Kosten
Weitere ZieleAuswahl eines besseren AlgorithmusFeststellung eines optimalen Algorithmus
Im Kontext von Qualitätseigenschaften von Algorithmen:KorrektheitEffizienz Verständlichkeit...
886
![Page 4: Komplexität von Algorithmen - userpages.uni-koblenz.delaemmel/oopm/slides/complexity.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Komplexitätsanalyse Unmittelbare](https://reader030.vdocuments.net/reader030/viewer/2022041301/5e0ffb9ecbe0dd60a8173e87/html5/thumbnails/4.jpg)
(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau
Zeitliche Komplexität: Wie bestimmt man sie?
Vergleich der Ausführung zweier Algorithmen (Programme): unerwünschte Abhängigkeit von Eingabe, Maschine, Rechnerauslastung, ...
Vorhersage der auszuführenden Anweisungen in Abhängigkeit von der Eingabe: unerwünschte Abhängigkeit von Sprache, Compiler, Maschine, u.a.
Wie oben, aber Zählen von “wesentlichen” Basisoperationen - hier: arithmetische und Boolesche Operationen sowie Vergleiche.
887
(Zeit-) Komplexität = Anzahl der Basisoperationen (in Abhängigkeit von Eingabe (-größe))
Wir lassen hier Zugriffe auf Speicher (Variablen)
unbeachtet.
![Page 5: Komplexität von Algorithmen - userpages.uni-koblenz.delaemmel/oopm/slides/complexity.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Komplexitätsanalyse Unmittelbare](https://reader030.vdocuments.net/reader030/viewer/2022041301/5e0ffb9ecbe0dd60a8173e87/html5/thumbnails/5.jpg)
(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau
Zählen der Operationen für die Berechnung des Durchschnitts
888
Program # Operationen
1. sum = 0; 0 2. i = 0; 0 3. while (i < n) { n+1 4. sum += a[i]; n 5. i++; n 6. } 7. return sum/n 1
Summe 3n + 2
![Page 6: Komplexität von Algorithmen - userpages.uni-koblenz.delaemmel/oopm/slides/complexity.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Komplexitätsanalyse Unmittelbare](https://reader030.vdocuments.net/reader030/viewer/2022041301/5e0ffb9ecbe0dd60a8173e87/html5/thumbnails/6.jpg)
(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau
Was ist die Zeitkomplexität von Matrizenmultiplikation?
Basisoperationen:
Multiplizieren von Matrizeneinträgen
Komplexität: m * p * n
Zum Beispiel:
m=n=p
Komplexität: n3
Komplexität hängt nur von Eingabegröße ab.
889
• Eingabe: am∗n, bn∗p
• Ausgabe: cm∗p
for (i=0; i<m; i++) for (j=0; j<p; j++) cij = 0 for (k=0; k<n; k++) cij = cij + aik bkj
![Page 7: Komplexität von Algorithmen - userpages.uni-koblenz.delaemmel/oopm/slides/complexity.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Komplexitätsanalyse Unmittelbare](https://reader030.vdocuments.net/reader030/viewer/2022041301/5e0ffb9ecbe0dd60a8173e87/html5/thumbnails/7.jpg)
(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau
Verschiedene Zeitkomplexitäten
T(n) - Genaue Anzahl der Operationen
TW(n) - Komplexität im schlechtesten Fall (engl.: worst-case complexity): die größte Anzahl von Basisoperationen unten allen möglichen Eingaben der Größe n.
TA(n) - Komplexität im Durchschnitt (engl.: average complexity): die durchschnittliche Anzahl von Basisoperationen für alle möglichen Eingaben der Größe n.
890
![Page 8: Komplexität von Algorithmen - userpages.uni-koblenz.delaemmel/oopm/slides/complexity.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Komplexitätsanalyse Unmittelbare](https://reader030.vdocuments.net/reader030/viewer/2022041301/5e0ffb9ecbe0dd60a8173e87/html5/thumbnails/8.jpg)
(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau
Was ist die Zeikomplexität von Linearer Suche?
891
Basisoperationen: hier nur Vergleiche
return r
boolean linear(int[] a, int x)
i < a.length && !r
r = false
r = a[i] == x i = i + 1
i = 0
![Page 9: Komplexität von Algorithmen - userpages.uni-koblenz.delaemmel/oopm/slides/complexity.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Komplexitätsanalyse Unmittelbare](https://reader030.vdocuments.net/reader030/viewer/2022041301/5e0ffb9ecbe0dd60a8173e87/html5/thumbnails/9.jpg)
(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau
Schlimmster Fall: Das Element ist nicht zu finden.
892
return r
boolean linear(int[] a, int x)
i < a.length && !r
r = false
r = a[i] == x i = i + 1
i = 0
Vergleiche alle n Elemente.TW(n) = n
![Page 10: Komplexität von Algorithmen - userpages.uni-koblenz.delaemmel/oopm/slides/complexity.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Komplexitätsanalyse Unmittelbare](https://reader030.vdocuments.net/reader030/viewer/2022041301/5e0ffb9ecbe0dd60a8173e87/html5/thumbnails/10.jpg)
(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau
Fall 1: x nicht in a, siehe TW(n)
Fall 2: x kommt in a vor.
Annahme: alle Elemente verschieden in a.
Es gibt ein i so dass x auf i-ter Position mit 0 ≤ i < n.
‣ Wahrscheinlichkeit für beliebiges i: 1/n
‣ i+1 Vergleiche benötigt
‣ Für alle i: 1 + 2 + ... + n = n (n + 1) / 2
‣ Nach Wichtung: (n + 1) / 2893
Durchschnittlicher Fall
![Page 11: Komplexität von Algorithmen - userpages.uni-koblenz.delaemmel/oopm/slides/complexity.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Komplexitätsanalyse Unmittelbare](https://reader030.vdocuments.net/reader030/viewer/2022041301/5e0ffb9ecbe0dd60a8173e87/html5/thumbnails/11.jpg)
(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau
Zu kombinieren: Fall 1: nFall 2: (n + 1) / 2
Annahme: q ist Wahrscheinlichkeit für Fall 2.TA(n) = (1 - q) n + q (n + 1) / 2Zum Beispiel: q = 0.5
TA(n) = 1/2 n + 1/4 (n + 1) = 3/4 n + 1/4≈ 3/4 aller Elemente werden verglichen.
894
Durchschnittlicher Fall
![Page 12: Komplexität von Algorithmen - userpages.uni-koblenz.delaemmel/oopm/slides/complexity.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Komplexitätsanalyse Unmittelbare](https://reader030.vdocuments.net/reader030/viewer/2022041301/5e0ffb9ecbe0dd60a8173e87/html5/thumbnails/12.jpg)
(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau
Speicherkomplexität
Speicherplatz für Programm hier vernachlässigt.Speicherplatz für Eingabe
Konstant für skalare WerteFeldgröße für Felder
Speicherkomplexität = Extra Speicherplatz für Arbeitsspeicher Ausgabe
S(n): Speicherkompl. in Abh. von EingabegrößeAnalog: SW(n) und SA(n)Algorithmus “in place” für konstantes S(n)
895
![Page 13: Komplexität von Algorithmen - userpages.uni-koblenz.delaemmel/oopm/slides/complexity.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Komplexitätsanalyse Unmittelbare](https://reader030.vdocuments.net/reader030/viewer/2022041301/5e0ffb9ecbe0dd60a8173e87/html5/thumbnails/13.jpg)
(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau
Was ist die Speicherkomplexität von MergeSort?
896
MergeSort benötigt Arbeitsspeicher.
Implementation:
public static void mergeSort(int[] a) {int[] temp = new int[a.length];
mergeSort(a,temp,0,a.length-1);}
S(n) = nIst n “optimal”?
“in place”
Arbeits-speicher
![Page 14: Komplexität von Algorithmen - userpages.uni-koblenz.delaemmel/oopm/slides/complexity.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Komplexitätsanalyse Unmittelbare](https://reader030.vdocuments.net/reader030/viewer/2022041301/5e0ffb9ecbe0dd60a8173e87/html5/thumbnails/14.jpg)
(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau
Optimalität von Algorithmen
Ein Algorithmus ist optimal wenn es keinen Algorithmus für das gleiche Problem gibt, dessen Zeit- oder Speicherkomplexität besser ist.
Beachte:
Mehrere Dimensionen: TW(n), TA(n), SW(n), SA(n)
897
![Page 15: Komplexität von Algorithmen - userpages.uni-koblenz.delaemmel/oopm/slides/complexity.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Komplexitätsanalyse Unmittelbare](https://reader030.vdocuments.net/reader030/viewer/2022041301/5e0ffb9ecbe0dd60a8173e87/html5/thumbnails/15.jpg)
(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau
Von Termen über der Eingabegröße n zu Komplexitätsklassen
Probleme beim Zählen von Basisoperationen in Abhängigkeit von der Eingabegröße
Verschiedene Festlegungen zu den Basisoperationen
Abhängigkeit von Compiler und Plattform
Interne Operationen werden eventuell übersehen
Wie vergleicht man Terme über n?
898
![Page 16: Komplexität von Algorithmen - userpages.uni-koblenz.delaemmel/oopm/slides/complexity.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Komplexitätsanalyse Unmittelbare](https://reader030.vdocuments.net/reader030/viewer/2022041301/5e0ffb9ecbe0dd60a8173e87/html5/thumbnails/16.jpg)
(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau
Ziel: Vergleich asymptotischen Wachstums
899
Haben wir lineare, quadratische, exponentielle, ... Abhängigkeit der Anzahl der Operationen bzw. der Grösse des Speichers von Grösse
der Eingabe?
![Page 17: Komplexität von Algorithmen - userpages.uni-koblenz.delaemmel/oopm/slides/complexity.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Komplexitätsanalyse Unmittelbare](https://reader030.vdocuments.net/reader030/viewer/2022041301/5e0ffb9ecbe0dd60a8173e87/html5/thumbnails/17.jpg)
(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau
Erneute Betrachtung der Komplexität des Durchschnitts
900
Program # Operationen
• sum = 0; 0 • i = 0; 0 • while (i < n) { n+1 • sum += a[i]; n • i++; n • } • return sum/n 1
Summe 3n + 2
Laufzeit wächst asymptotisch
proportional mit Eingabegröße n.
![Page 18: Komplexität von Algorithmen - userpages.uni-koblenz.delaemmel/oopm/slides/complexity.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Komplexitätsanalyse Unmittelbare](https://reader030.vdocuments.net/reader030/viewer/2022041301/5e0ffb9ecbe0dd60a8173e87/html5/thumbnails/18.jpg)
(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau
Konstante FaktorenBetrachten wir zwei Komplexitäten (“Funktionen”):
a) 2n
b) 2.5n
901
Wir vernachlässigen konstante Fakoren.
2n “=” 2.5n
![Page 19: Komplexität von Algorithmen - userpages.uni-koblenz.delaemmel/oopm/slides/complexity.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Komplexitätsanalyse Unmittelbare](https://reader030.vdocuments.net/reader030/viewer/2022041301/5e0ffb9ecbe0dd60a8173e87/html5/thumbnails/19.jpg)
(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau
Asymptotisches Wachstum
Betrachten wir zwei Komplexitäten (“Funktionen”):
a) n3/2
b) 5n2
Kubische Funktionen wachsen schneller als quadratische.
Für einige kleine n ist b) größer.
Für genügend große n ist a) größer.
902
n3/2 “>” 5n2
![Page 20: Komplexität von Algorithmen - userpages.uni-koblenz.delaemmel/oopm/slides/complexity.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Komplexitätsanalyse Unmittelbare](https://reader030.vdocuments.net/reader030/viewer/2022041301/5e0ffb9ecbe0dd60a8173e87/html5/thumbnails/20.jpg)
(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau
Asymptotisches Wachstum
Betrachten wir zwei Komplexitäten (“Funktionen”):
3n3 - 2n2 4n3
903
Bei der Abbildung von Komplexitätsfunktionen auf Komplexitätsklassen vernachlässigen wir auch
Summanden von kleinerem asymptotischen Wachstum.
3n3 - 2n2 “=” 3n3 “=” 4n3
![Page 21: Komplexität von Algorithmen - userpages.uni-koblenz.delaemmel/oopm/slides/complexity.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Komplexitätsanalyse Unmittelbare](https://reader030.vdocuments.net/reader030/viewer/2022041301/5e0ffb9ecbe0dd60a8173e87/html5/thumbnails/21.jpg)
(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau
Komplexitätsklassen
Konstant: 1Logarithmisch: log nLinear: nQuadratisch: n2Polynomial: nk, k > 1Exponentiell: an, a > 1
904
![Page 22: Komplexität von Algorithmen - userpages.uni-koblenz.delaemmel/oopm/slides/complexity.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Komplexitätsanalyse Unmittelbare](https://reader030.vdocuments.net/reader030/viewer/2022041301/5e0ffb9ecbe0dd60a8173e87/html5/thumbnails/22.jpg)
(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau
Schranken für asymptotisches Wachstum
905
Aussprache: (Big) oh (O) (Big) theta (Θ)
(Big) omega (Ω)
f
Ω(f) enthält Funktionen die mindestens so schnell wie f wachsen. (f ist eine untere Schranke für Komplexitätsfunktionen.)
Θ(f) enthält Funktionen die genauso schnell wie f wachsen. (f ist ein asymptotisch enges Mass.)
O(f) enthält Funktionen die nicht schneller als f wachsen. (f ist eine obere Schranke für Komplexitätsfunktionen.)
![Page 23: Komplexität von Algorithmen - userpages.uni-koblenz.delaemmel/oopm/slides/complexity.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Komplexitätsanalyse Unmittelbare](https://reader030.vdocuments.net/reader030/viewer/2022041301/5e0ffb9ecbe0dd60a8173e87/html5/thumbnails/23.jpg)
(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau
O - Notation für obere Schranke von Komplexität
O(f(n)) =
{ g: N → N |
∃n0 > 0. ∃c > 0. ∀ n ≥ n0.
g(n) ≤ c*f(n) }Anmerkungen
k(n) ∈ O(f(n))
f(n) ist eine asymptotische obere Schranke für k(n).
Sprechweise “k(n) ist O(f(n))”
Analog: Ω und Θ
906
Wir sind an kleinen, oberen Schranken
interessiert.
Wir betrachten Funktionen über den
natürlichen Zahlen, weil wir so die Eingabegröße
ausdrücken.
![Page 24: Komplexität von Algorithmen - userpages.uni-koblenz.delaemmel/oopm/slides/complexity.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Komplexitätsanalyse Unmittelbare](https://reader030.vdocuments.net/reader030/viewer/2022041301/5e0ffb9ecbe0dd60a8173e87/html5/thumbnails/24.jpg)
(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau
Analog: Ω - Notation für untere Schranke von Komplexität
Ω(f(n)) = { g: N→N | ∃n0 > 0. ∃c > 0. ∀ n ≥ n0.
c*f(n) ≤ g(n) }k(n) ∈ Ω(f(n)) f(n) ist eine asymptotische untere Schranke für k(n).
907
Wir sind an großen, unteren Schranken
interessiert.
![Page 25: Komplexität von Algorithmen - userpages.uni-koblenz.delaemmel/oopm/slides/complexity.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Komplexitätsanalyse Unmittelbare](https://reader030.vdocuments.net/reader030/viewer/2022041301/5e0ffb9ecbe0dd60a8173e87/html5/thumbnails/25.jpg)
(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau
Analog: Θ - Notation für asymptotisch enges Maß
Θ(f(n)) =
{ g: N → N |
∃ n0 > 0. ∃ c1, c2 > 0. ∀ n ≥ n0.
c1*f(n) ≤ g(n) ≤ c2*f(n) }
908
![Page 26: Komplexität von Algorithmen - userpages.uni-koblenz.delaemmel/oopm/slides/complexity.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Komplexitätsanalyse Unmittelbare](https://reader030.vdocuments.net/reader030/viewer/2022041301/5e0ffb9ecbe0dd60a8173e87/html5/thumbnails/26.jpg)
(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau
Rechenregeln für die O-Notation
f(n) ∈ O(f(n))
c*O(f(n)) ∈ O(f(n))
O(f(n))*O(g(n)) ∈ O(f(n)*g(n))
O(f(n)*g(n)) ∈ O(f(n))*O(g(n))
...
909
Wenn sowohl S und S’ Mengen sind in der Notation S ∈ S’, dann ist dies gemeint: ∀ f ∈ S. f ∈ S’.
![Page 27: Komplexität von Algorithmen - userpages.uni-koblenz.delaemmel/oopm/slides/complexity.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Komplexitätsanalyse Unmittelbare](https://reader030.vdocuments.net/reader030/viewer/2022041301/5e0ffb9ecbe0dd60a8173e87/html5/thumbnails/27.jpg)
(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau
Was ist die Komplexität von Sortieralgorithmen?
910
TW(n) SW(n)
SelectionSort
MergeSort
... ... ...
? ?
? ?
![Page 28: Komplexität von Algorithmen - userpages.uni-koblenz.delaemmel/oopm/slides/complexity.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Komplexitätsanalyse Unmittelbare](https://reader030.vdocuments.net/reader030/viewer/2022041301/5e0ffb9ecbe0dd60a8173e87/html5/thumbnails/28.jpg)
(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau
Was ist die Zeitkomplexität von SelectionSort?
911
public static void selectionSort(int[] a) {for (int i = 0; i < a.length; i++) {
// Find least element among the remaining onesint least = i;for (int j = i + 1; j < a.length; j++)
if (a[j] < a[least])least = j;
// Swap current element with least oneif (least != i) {
int swap = a[i];a[i] = a[least];a[least] = swap;
}}
}
![Page 29: Komplexität von Algorithmen - userpages.uni-koblenz.delaemmel/oopm/slides/complexity.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Komplexitätsanalyse Unmittelbare](https://reader030.vdocuments.net/reader030/viewer/2022041301/5e0ffb9ecbe0dd60a8173e87/html5/thumbnails/29.jpg)
(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau
Was ist die Zeitkomplexität von SelectionSort?
912
Zählen der Vergleiche
Feld der Größe n
Äußere Schleife i=0..n-1
Innere Schleife j=i+1..n-1
Vergleiche: (n-1) + (n-2) + ... + 1 = n * (n - 1) / 2
for (int i=0; i<a.length; i++) {int least = i;for (int j=i+1; j<a.length; j++)
if (a[j] < a[least])...
... }
O(n2)
![Page 30: Komplexität von Algorithmen - userpages.uni-koblenz.delaemmel/oopm/slides/complexity.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Komplexitätsanalyse Unmittelbare](https://reader030.vdocuments.net/reader030/viewer/2022041301/5e0ffb9ecbe0dd60a8173e87/html5/thumbnails/30.jpg)
(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau
Was ist die Zeitkomplexität von MergeSort?
913
public static void mergeSort(int[] a, int[] temp, int min, int max) {// Cease on trivial sorting problemif (!(min<max))
return;
// Divideint middle = ( min + max ) / 2 ;
// Solve smaller problems recursivelymergeSort(a,temp,min,middle);mergeSort(a,temp,middle+1,max);
// Merge via temporary arraymerge(a,temp,min,middle,max);
}
![Page 31: Komplexität von Algorithmen - userpages.uni-koblenz.delaemmel/oopm/slides/complexity.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Komplexitätsanalyse Unmittelbare](https://reader030.vdocuments.net/reader030/viewer/2022041301/5e0ffb9ecbe0dd60a8173e87/html5/thumbnails/31.jpg)
(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau
Was ist die Zeitkomplexität von MergeSort?
914
Merge: TW(n) = O(n)
MergeSort:
TW(n) = 2 TW(n/2) + O(n)
= n log n (per “Mastertheorem”)
Siehe weiterführende Veranstaltungen.
![Page 32: Komplexität von Algorithmen - userpages.uni-koblenz.delaemmel/oopm/slides/complexity.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Komplexitätsanalyse Unmittelbare](https://reader030.vdocuments.net/reader030/viewer/2022041301/5e0ffb9ecbe0dd60a8173e87/html5/thumbnails/32.jpg)
(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau
Übersicht Sortieralgorithmen
915
TW(n) SW(n)
SelectionSort
MergeSort
... ... ...
Θ(n2) Θ(1)
Θ(n log n) O(n)
Geht es schneller als n log n?Geht n log n auch ohne Speicheraufwand?
Warum verwenden wir SelectionSort?
![Page 33: Komplexität von Algorithmen - userpages.uni-koblenz.delaemmel/oopm/slides/complexity.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Komplexitätsanalyse Unmittelbare](https://reader030.vdocuments.net/reader030/viewer/2022041301/5e0ffb9ecbe0dd60a8173e87/html5/thumbnails/33.jpg)
(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau 916
Satz: Jeder vergleichsbasierte Algorithmus zum Sortieren braucht Ω(n log n) Vergleiche im schlimmsten Fall.
![Page 34: Komplexität von Algorithmen - userpages.uni-koblenz.delaemmel/oopm/slides/complexity.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Komplexitätsanalyse Unmittelbare](https://reader030.vdocuments.net/reader030/viewer/2022041301/5e0ffb9ecbe0dd60a8173e87/html5/thumbnails/34.jpg)
(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau 917
Bedeutung von Schrankenaussagen
Obere Schranke (O(f(n)): Um zu zeigen, dass ein Problem (z.B. Sortieren) in f(n) gelöst werden kann, genügt es einen Algorithmus mit dieser Komplexität anzugeben.
Untere Schranke (Ω(f(n)): Um zu zeigen, dass ein Problem nicht schneller als f(n) gelöst werden kann, muss man zeigen, dass alle möglichen Algorithmen nicht schneller sein können.
![Page 35: Komplexität von Algorithmen - userpages.uni-koblenz.delaemmel/oopm/slides/complexity.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Komplexitätsanalyse Unmittelbare](https://reader030.vdocuments.net/reader030/viewer/2022041301/5e0ffb9ecbe0dd60a8173e87/html5/thumbnails/35.jpg)
(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau
Ein Entscheidungsbaum zum Sortieren einer Liste mit drei verschiedenen Elementen a, b, c durch binäre Vergleiche
918
a<b
a<c a<c
b<c b<c
Ja Nein
Ja Nein
Ja Nein
Ja Nein
Ja Nein
a<b b<a
a<b ∧ a<c
c < a < b b < a < c
b<a ∧ c<a
a < b < c a < c < b b < c < a c < b < a
Sortieralgorithmen mögen mehr Vergleiche bemühen.
![Page 36: Komplexität von Algorithmen - userpages.uni-koblenz.delaemmel/oopm/slides/complexity.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Komplexitätsanalyse Unmittelbare](https://reader030.vdocuments.net/reader030/viewer/2022041301/5e0ffb9ecbe0dd60a8173e87/html5/thumbnails/36.jpg)
(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau
Der Entscheidungsbaum
Jeder Knoten vergleicht zwei Elemente.
Der Baum ist binär wegen der Entscheidungen.
Alle möglichen Permutationen müssen unterschieden werden.
Es gibt dementsprechend viele verschiedene Pfade und Blätter.
Also gibt es n! Blätter bei n Elementen in der Eingabe.
Was ist die Tiefe eines Binärbaumes mit n! Blättern?
919
![Page 37: Komplexität von Algorithmen - userpages.uni-koblenz.delaemmel/oopm/slides/complexity.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Komplexitätsanalyse Unmittelbare](https://reader030.vdocuments.net/reader030/viewer/2022041301/5e0ffb9ecbe0dd60a8173e87/html5/thumbnails/37.jpg)
(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau
Zusammenhang zwischen Höhe und Anzahl der Blätter
920
Höhe: 1 Knoten: 3 Blätter: 2
Höhe: 2 Knoten: 7 Blätter: 4
http://de.wikipedia.org/wiki/Bin%C3%A4rbaum
Höhe: h Knoten: 2h+1 - 1 Blätter: 2h
Höhe: 0 Knoten: 1 Blätter: 1
Wenn der Baum nicht vollstândig ist, dann ist die Höhe größer bei gleicher Blattzahl.
Höhe: log2(n!) Blätter: n!
![Page 38: Komplexität von Algorithmen - userpages.uni-koblenz.delaemmel/oopm/slides/complexity.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Komplexitätsanalyse Unmittelbare](https://reader030.vdocuments.net/reader030/viewer/2022041301/5e0ffb9ecbe0dd60a8173e87/html5/thumbnails/38.jpg)
(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau
Vergleichsbasiertes Sortieren
921
TW(n)≥ “längster Pfad”≥ log(n!)= log n + … + log 1≥ log n + … + log (n/2)≥ n/2 (log n/2)= Ω(n log n)Jeder vergleichsbasierte Algorithmus braucht Ω(n log n) Vergleiche im schlimmsten Fall.
Es gibt Algorithmen die zusätzliche Annahmen über die
Daten machen.
![Page 39: Komplexität von Algorithmen - userpages.uni-koblenz.delaemmel/oopm/slides/complexity.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Komplexitätsanalyse Unmittelbare](https://reader030.vdocuments.net/reader030/viewer/2022041301/5e0ffb9ecbe0dd60a8173e87/html5/thumbnails/39.jpg)
(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau
Komplexität rekursiver Algorithmen
Ein rekursiver Algorithmus ohne Schleifen hat die Komplexität f(x) wenn f(x) die Anzahl der rekursiven Aufrufe in Abhängigkeit von der Eingabe x beschreibt.
Beispiel n!
n rekursive Aufrufe
922
![Page 40: Komplexität von Algorithmen - userpages.uni-koblenz.delaemmel/oopm/slides/complexity.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Komplexitätsanalyse Unmittelbare](https://reader030.vdocuments.net/reader030/viewer/2022041301/5e0ffb9ecbe0dd60a8173e87/html5/thumbnails/40.jpg)
(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau
Komplexität Fibonacci
Definitionfib(n) =
0, falls n = 01, falls n = 1fib(n-2) + fib(n-1), n >= 2
Für n > 2 zwei direkt rekursive AufrufeWas ist die resultierende Komplexität?
923
![Page 41: Komplexität von Algorithmen - userpages.uni-koblenz.delaemmel/oopm/slides/complexity.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Komplexitätsanalyse Unmittelbare](https://reader030.vdocuments.net/reader030/viewer/2022041301/5e0ffb9ecbe0dd60a8173e87/html5/thumbnails/41.jpg)
(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau
Komplexität Fibonacci
924
Fib(n)
Fib(n-1) Fib(n-2)
Fib(0)
+
+
Fib(1)
Fib(n-2) Fib(n-3) Fib(n-3) Fib(n-4)+
Fib(1) Fib(0)+ +
Anzahl der Aufrufe insgesamtExponentiell steigend (zur Basis 2) mit n
Fazit: fib(n) ist O(2n)
![Page 42: Komplexität von Algorithmen - userpages.uni-koblenz.delaemmel/oopm/slides/complexity.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Komplexitätsanalyse Unmittelbare](https://reader030.vdocuments.net/reader030/viewer/2022041301/5e0ffb9ecbe0dd60a8173e87/html5/thumbnails/42.jpg)
(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau
Zusammenfassung
Es gibt weniger und mehr effiziente Programme.
Wir unterscheiden Laufzeit- und Speicherkomplexität.
Komplexität wird in Abhängigkeit von Eingabe angegeben.
Wir messen Basisoperationen oder skalare Zellen.
Komplexität ist durch das Problem beschränkt.
Wir sind an asymptotischer Komplexität interessiert.
Ausblick
Ausnahmebehandlung
Syntax von Softwaresprachen