Die asymptotische Notation f , g : N → R≥0 seien Funktionen, die einer Eingabelänge n ∈ N eine nicht-negative Laufzeit f (n), bzw. g(n) zuweisen. () 14. Dezember 2010 1/9 Die asymptotische Notation f , g : N → R≥0 seien Funktionen, die einer Eingabelänge n ∈ N eine nicht-negative Laufzeit f (n), bzw. g(n) zuweisen. Die Groß-Oh Notation: f = O(g) ⇔ Es gibt eine positive Konstante c > 0 und eine natürliche Zahl n0 ∈ N, so dass f (n) ≤ c · g(n) für alle n ≥ n0 gilt: () 14. Dezember 2010 1/9 Die asymptotische Notation f , g : N → R≥0 seien Funktionen, die einer Eingabelänge n ∈ N eine nicht-negative Laufzeit f (n), bzw. g(n) zuweisen. Die Groß-Oh Notation: f = O(g) ⇔ Es gibt eine positive Konstante c > 0 und eine natürliche Zahl n0 ∈ N, so dass f (n) ≤ c · g(n) für alle n ≥ n0 gilt: f wächst höchstens so schnell wie g. () 14. Dezember 2010 1/9 Die asymptotische Notation f , g : N → R≥0 seien Funktionen, die einer Eingabelänge n ∈ N eine nicht-negative Laufzeit f (n), bzw. g(n) zuweisen. Die Groß-Oh Notation: f = O(g) ⇔ Es gibt eine positive Konstante c > 0 und eine natürliche Zahl n0 ∈ N, so dass f (n) ≤ c · g(n) für alle n ≥ n0 gilt: f wächst höchstens so schnell wie g. f = Ω(g) ⇔ g = O(f ) : () 14. Dezember 2010 1/9 Die asymptotische Notation f , g : N → R≥0 seien Funktionen, die einer Eingabelänge n ∈ N eine nicht-negative Laufzeit f (n), bzw. g(n) zuweisen. Die Groß-Oh Notation: f = O(g) ⇔ Es gibt eine positive Konstante c > 0 und eine natürliche Zahl n0 ∈ N, so dass f (n) ≤ c · g(n) für alle n ≥ n0 gilt: f wächst höchstens so schnell wie g. f = Ω(g) ⇔ g = O(f ) : f wächst mindestens so schnell wie g. () 14. Dezember 2010 1/9 Die asymptotische Notation f , g : N → R≥0 seien Funktionen, die einer Eingabelänge n ∈ N eine nicht-negative Laufzeit f (n), bzw. g(n) zuweisen. Die Groß-Oh Notation: f = O(g) ⇔ Es gibt eine positive Konstante c > 0 und eine natürliche Zahl n0 ∈ N, so dass f (n) ≤ c · g(n) für alle n ≥ n0 gilt: f wächst höchstens so schnell wie g. f = Ω(g) ⇔ g = O(f ) : f wächst mindestens so schnell wie g. f = Θ(g) ⇔ f = O(g) und g = O(f ) : () 14. Dezember 2010 1/9 Die asymptotische Notation f , g : N → R≥0 seien Funktionen, die einer Eingabelänge n ∈ N eine nicht-negative Laufzeit f (n), bzw. g(n) zuweisen. Die Groß-Oh Notation: f = O(g) ⇔ Es gibt eine positive Konstante c > 0 und eine natürliche Zahl n0 ∈ N, so dass f (n) ≤ c · g(n) für alle n ≥ n0 gilt: f wächst höchstens so schnell wie g. f = Ω(g) ⇔ g = O(f ) : f wächst mindestens so schnell wie g. f = Θ(g) ⇔ f = O(g) und g = O(f ) : f und g wachsen gleich schnell. () 14. Dezember 2010 1/9 Die asymptotische Notation f , g : N → R≥0 seien Funktionen, die einer Eingabelänge n ∈ N eine nicht-negative Laufzeit f (n), bzw. g(n) zuweisen. Die Groß-Oh Notation: f = O(g) ⇔ Es gibt eine positive Konstante c > 0 und eine natürliche Zahl n0 ∈ N, so dass f (n) ≤ c · g(n) für alle n ≥ n0 gilt: f wächst höchstens so schnell wie g. f = Ω(g) ⇔ g = O(f ) : f wächst mindestens so schnell wie g. f = Θ(g) ⇔ f = O(g) und g = O(f ) : f und g wachsen gleich schnell. f (n) n→∞ g(n) Die Klein-Oh Notation: f = o(g) ⇔ lim () = 0: 14. Dezember 2010 1/9 Die asymptotische Notation f , g : N → R≥0 seien Funktionen, die einer Eingabelänge n ∈ N eine nicht-negative Laufzeit f (n), bzw. g(n) zuweisen. Die Groß-Oh Notation: f = O(g) ⇔ Es gibt eine positive Konstante c > 0 und eine natürliche Zahl n0 ∈ N, so dass f (n) ≤ c · g(n) für alle n ≥ n0 gilt: f wächst höchstens so schnell wie g. f = Ω(g) ⇔ g = O(f ) : f wächst mindestens so schnell wie g. f = Θ(g) ⇔ f = O(g) und g = O(f ) : f und g wachsen gleich schnell. f (n) n→∞ g(n) Die Klein-Oh Notation: f = o(g) ⇔ lim = 0: f wächst langsamer als g. () 14. Dezember 2010 1/9 Wie schnell dominiert die Asymptotik? Annahme: Ein einfacher Befehl benötigt 10−9 Sekunden. () 14. Dezember 2010 2/9 Wie schnell dominiert die Asymptotik? Annahme: Ein einfacher Befehl benötigt 10−9 Sekunden. n 16 32 n2 256 1.024 n3 4.096 32.768 n10 ≥ 1012 ≥ 1015 2n 65536 ≥ 4 · 109 64 4.096 262.144 ≥ 1018 | {z } ≥ 6 · 1019 | {z } mehr als 10 Jahre mehr als 600 Jahre 128 256 512 1024 Million 16.384 65.536 262.144 1.048.576 ≥ 1012 | {z } mehr als 15 Minuten () 2.097.152 16.777.216 134.217.728 ≥ 109 ≥ 1018 | {z } mehr als 10 Jahre n! ≥ 1013 ≥ 1031 | {z } mehr als 1014 Jahre 14. Dezember 2010 2/9 Grenzwerte Grenzwerte sollten das Wachstum vorausssagen! () 14. Dezember 2010 3/9 Grenzwerte Grenzwerte sollten das Wachstum vorausssagen! Der Grenzwert der Folge () f (n) g(n) f (n) n→∞ g(n) existiere und es sei lim = c. 14. Dezember 2010 3/9 Grenzwerte Grenzwerte sollten das Wachstum vorausssagen! Der Grenzwert der Folge f (n) g(n) f (n) n→∞ g(n) existiere und es sei lim = c. Wenn c = 0, dann ist () 14. Dezember 2010 3/9 Grenzwerte Grenzwerte sollten das Wachstum vorausssagen! Der Grenzwert der Folge f (n) g(n) f (n) n→∞ g(n) existiere und es sei lim = c. Wenn c = 0, dann ist f = o(g): f wächst langsamer als g. () 14. Dezember 2010 3/9 Grenzwerte Grenzwerte sollten das Wachstum vorausssagen! Der Grenzwert der Folge f (n) g(n) f (n) n→∞ g(n) existiere und es sei lim = c. Wenn c = 0, dann ist f = o(g): f wächst langsamer als g. Wenn 0 < c < ∞, dann ist () 14. Dezember 2010 3/9 Grenzwerte Grenzwerte sollten das Wachstum vorausssagen! Der Grenzwert der Folge f (n) g(n) f (n) n→∞ g(n) existiere und es sei lim = c. Wenn c = 0, dann ist f = o(g): f wächst langsamer als g. Wenn 0 < c < ∞, dann ist f = Θ(g): f und g wachsen gleich schnell. () 14. Dezember 2010 3/9 Grenzwerte Grenzwerte sollten das Wachstum vorausssagen! Der Grenzwert der Folge f (n) g(n) f (n) n→∞ g(n) existiere und es sei lim = c. Wenn c = 0, dann ist f = o(g): f wächst langsamer als g. Wenn 0 < c < ∞, dann ist f = Θ(g): f und g wachsen gleich schnell. Wenn 0 ≤ c < ∞, dann ist () 14. Dezember 2010 3/9 Grenzwerte Grenzwerte sollten das Wachstum vorausssagen! Der Grenzwert der Folge f (n) g(n) f (n) n→∞ g(n) existiere und es sei lim = c. Wenn c = 0, dann ist f = o(g): f wächst langsamer als g. Wenn 0 < c < ∞, dann ist f = Θ(g): f und g wachsen gleich schnell. Wenn 0 ≤ c < ∞, dann ist f = O(g): f wächst höchstens so schnell wie g. () 14. Dezember 2010 3/9 Grenzwerte Grenzwerte sollten das Wachstum vorausssagen! Der Grenzwert der Folge f (n) g(n) f (n) n→∞ g(n) existiere und es sei lim = c. Wenn c = 0, dann ist f = o(g): f wächst langsamer als g. Wenn 0 < c < ∞, dann ist f = Θ(g): f und g wachsen gleich schnell. Wenn 0 ≤ c < ∞, dann ist f = O(g): f wächst höchstens so schnell wie g. Wenn 0 < c ≤ ∞, dann ist () 14. Dezember 2010 3/9 Grenzwerte Grenzwerte sollten das Wachstum vorausssagen! Der Grenzwert der Folge f (n) g(n) f (n) n→∞ g(n) existiere und es sei lim = c. Wenn c = 0, dann ist f = o(g): f wächst langsamer als g. Wenn 0 < c < ∞, dann ist f = Θ(g): f und g wachsen gleich schnell. Wenn 0 ≤ c < ∞, dann ist f = O(g): f wächst höchstens so schnell wie g. Wenn 0 < c ≤ ∞, dann ist f = Ω(g): f wächst mindestens so schnell wie g. () 14. Dezember 2010 3/9 Die Regel von de l’Hospital f (n) n→∞ g(n) lim f 0 (n) , 0 g n→∞ (n) = lim falls der letzte Grenzwert existiert und falls lim f (n) = lim g(n) ∈ {0, ∞}. n→∞ () n→∞ 14. Dezember 2010 4/9 Die Regel von de l’Hospital f (n) n→∞ g(n) lim f 0 (n) , 0 g n→∞ (n) = lim falls der letzte Grenzwert existiert und falls lim f (n) = lim g(n) ∈ {0, ∞}. n→∞ n→∞ log2 n = o(n). Warum? I lim log2 n = lim n = ∞, n→∞ I I n→∞ log02 (n) n0 n→∞ der Grenzwert lim (log2 e ln(n))0 n0 n→∞ = lim = lim log2 e · n→∞ 1/n 1 =0 existiert und log2 (n) lim = 0 folgt mit der Regel von de l’Hospital. n n→∞ () 14. Dezember 2010 4/9 Die Regel von de l’Hospital f (n) n→∞ g(n) lim f 0 (n) , 0 g n→∞ (n) = lim falls der letzte Grenzwert existiert und falls lim f (n) = lim g(n) ∈ {0, ∞}. n→∞ n→∞ log2 n = o(n). Warum? I lim log2 n = lim n = ∞, n→∞ I I n→∞ log02 (n) n0 n→∞ der Grenzwert lim (log2 e ln(n))0 n0 n→∞ = lim = lim log2 e · n→∞ 1/n 1 =0 existiert und log2 (n) lim = 0 folgt mit der Regel von de l’Hospital. n n→∞ Weitere Anwendungen: I log2 log2 n = o(log2 n). () 14. Dezember 2010 4/9 Die Regel von de l’Hospital f (n) n→∞ g(n) lim f 0 (n) , 0 g n→∞ (n) = lim falls der letzte Grenzwert existiert und falls lim f (n) = lim g(n) ∈ {0, ∞}. n→∞ n→∞ log2 n = o(n). Warum? I lim log2 n = lim n = ∞, n→∞ I I n→∞ log02 (n) n0 n→∞ der Grenzwert lim (log2 e ln(n))0 n0 n→∞ = lim = lim log2 e · n→∞ 1/n 1 =0 existiert und log2 (n) lim = 0 folgt mit der Regel von de l’Hospital. n n→∞ Weitere Anwendungen: I I log2 log2 n = o(log2 n). log2 log2 log2 n = o(log2 log2 n). () 14. Dezember 2010 4/9 Die Regel von de l’Hospital f (n) n→∞ g(n) lim f 0 (n) , 0 g n→∞ (n) = lim falls der letzte Grenzwert existiert und falls lim f (n) = lim g(n) ∈ {0, ∞}. n→∞ n→∞ log2 n = o(n). Warum? I lim log2 n = lim n = ∞, n→∞ I I n→∞ log02 (n) n0 n→∞ der Grenzwert lim (log2 e ln(n))0 n0 n→∞ = lim = lim log2 e · n→∞ 1/n 1 =0 existiert und log2 (n) lim = 0 folgt mit der Regel von de l’Hospital. n n→∞ Weitere Anwendungen: I I I log2 log2 n = o(log2 n). log2 log2 log2 n = o(log2 log2 n). (k +1) (k ) log2 n = o(log2 n) für jedes k . () 14. Dezember 2010 4/9 Eine Wachstums-Hierarchie f1 (n) = 1, dann ist f1 = o(log2 log2 n), limn→∞ log2 log2 n = ∞. () 14. Dezember 2010 5/9 Eine Wachstums-Hierarchie f1 (n) = 1, dann ist f1 = o(log2 log2 n), limn→∞ log2 log2 n = ∞. log2 log2 n = o(log2 n), wende de l’Hospital an. () 14. Dezember 2010 5/9 Eine Wachstums-Hierarchie f1 (n) = 1, dann ist f1 = o(log2 log2 n), limn→∞ log2 log2 n = ∞. log2 log2 n = o(log2 n), wende de l’Hospital an. log2 n = Θ(loga n) für jedes a > 1, log2 n = log2 a · loga n. () 14. Dezember 2010 5/9 Eine Wachstums-Hierarchie f1 (n) = 1, dann ist f1 = o(log2 log2 n), limn→∞ log2 log2 n = ∞. log2 log2 n = o(log2 n), wende de l’Hospital an. log2 n = Θ(loga n) für jedes a > 1, log2 n = log2 a · loga n. log2 n = o(n1/k ) für jedes k > 1, wende de l’Hospital an. () 14. Dezember 2010 5/9 Eine Wachstums-Hierarchie f1 (n) = 1, dann ist f1 = o(log2 log2 n), limn→∞ log2 log2 n = ∞. log2 log2 n = o(log2 n), wende de l’Hospital an. log2 n = Θ(loga n) für jedes a > 1, log2 n = log2 a · loga n. log2 n = o(n1/k ) für jedes k > 1, wende de l’Hospital an. n1/k = o(n) und n = o(n · log2 n) für jedes k > 1, limn→∞ () n1/k n = limn→∞ 1 n1−1/k = 0 und limn→∞ log2 n = ∞. 14. Dezember 2010 5/9 Eine Wachstums-Hierarchie f1 (n) = 1, dann ist f1 = o(log2 log2 n), limn→∞ log2 log2 n = ∞. log2 log2 n = o(log2 n), wende de l’Hospital an. log2 n = Θ(loga n) für jedes a > 1, log2 n = log2 a · loga n. log2 n = o(n1/k ) für jedes k > 1, wende de l’Hospital an. n1/k = o(n) und n = o(n · log2 n) für jedes k > 1, limn→∞ n · log2 n = () n1/k n = limn→∞ o(nk ) 1 n1−1/k = 0 und limn→∞ log2 n = ∞. für jedes k > 1. 14. Dezember 2010 5/9 Eine Wachstums-Hierarchie f1 (n) = 1, dann ist f1 = o(log2 log2 n), limn→∞ log2 log2 n = ∞. log2 log2 n = o(log2 n), wende de l’Hospital an. log2 n = Θ(loga n) für jedes a > 1, log2 n = log2 a · loga n. log2 n = o(n1/k ) für jedes k > 1, wende de l’Hospital an. n1/k = o(n) und n = o(n · log2 n) für jedes k > 1, limn→∞ n1/k n = limn→∞ 1 n1−1/k = 0 und limn→∞ log2 n = ∞. o(nk ) n · log2 n = für jedes k > 1. k n n = o(b ) für jedes b > 1, nk = bk ·logb n und () 14. Dezember 2010 5/9 Eine Wachstums-Hierarchie f1 (n) = 1, dann ist f1 = o(log2 log2 n), limn→∞ log2 log2 n = ∞. log2 log2 n = o(log2 n), wende de l’Hospital an. log2 n = Θ(loga n) für jedes a > 1, log2 n = log2 a · loga n. log2 n = o(n1/k ) für jedes k > 1, wende de l’Hospital an. n1/k = o(n) und n = o(n · log2 n) für jedes k > 1, limn→∞ n1/k n = limn→∞ 1 n1−1/k = 0 und limn→∞ log2 n = ∞. o(nk ) n · log2 n = für jedes k > 1. k n n = o(b ) für jedes b > 1, nk = bk ·logb n und k limn→∞ nbn = limn→∞ () bk ·logb n bn = limn→∞ bk ·logb n−n = 0. 14. Dezember 2010 5/9 Eine Wachstums-Hierarchie f1 (n) = 1, dann ist f1 = o(log2 log2 n), limn→∞ log2 log2 n = ∞. log2 log2 n = o(log2 n), wende de l’Hospital an. log2 n = Θ(loga n) für jedes a > 1, log2 n = log2 a · loga n. log2 n = o(n1/k ) für jedes k > 1, wende de l’Hospital an. n1/k = o(n) und n = o(n · log2 n) für jedes k > 1, limn→∞ n1/k n = limn→∞ 1 n1−1/k = 0 und limn→∞ log2 n = ∞. o(nk ) n · log2 n = für jedes k > 1. k n n = o(b ) für jedes b > 1, nk = bk ·logb n und k limn→∞ nbn = limn→∞ bk ·logb n bn = limn→∞ bk ·logb n−n = 0. Und bn = o(n!) für jedes b > 1. () 14. Dezember 2010 5/9 For-und While-Schleifen for (i=1; i < n ; i++) vier einfache Anweisungen; I Laufzeit = () 14. Dezember 2010 6/9 For-und While-Schleifen for (i=1; i < n ; i++) vier einfache Anweisungen; I Laufzeit = O(n). () 14. Dezember 2010 6/9 For-und While-Schleifen for (i=1; i < n ; i++) vier einfache Anweisungen; I Laufzeit = O(n). for (i=1; i < n ; i++) for (j=i+1; j < n ; j++) zwei einfache Anweisungen; I Laufzeit = () 14. Dezember 2010 6/9 For-und While-Schleifen for (i=1; i < n ; i++) vier einfache Anweisungen; I Laufzeit = O(n). for (i=1; i < n ; i++) for (j=i+1; j < n ; j++) zwei einfache Anweisungen; I Laufzeit = O(n2 ). () 14. Dezember 2010 6/9 For-und While-Schleifen for (i=1; i < n ; i++) vier einfache Anweisungen; I Laufzeit = O(n). for (i=1; i < n ; i++) for (j=i+1; j < n ; j++) zwei einfache Anweisungen; I Laufzeit = O(n2 ). while (n >1) n = 3n/4; I Laufzeit = () 14. Dezember 2010 6/9 For-und While-Schleifen for (i=1; i < n ; i++) vier einfache Anweisungen; I Laufzeit = O(n). for (i=1; i < n ; i++) for (j=i+1; j < n ; j++) zwei einfache Anweisungen; I Laufzeit = O(n2 ). while (n >1) n = 3n/4; I Laufzeit = O(log2 n). () 14. Dezember 2010 6/9 For-und While-Schleifen for (i=1; i < n ; i++) vier einfache Anweisungen; I Laufzeit = O(n). for (i=1; i < n ; i++) for (j=i+1; j < n ; j++) zwei einfache Anweisungen; I Laufzeit = O(n2 ). while (n >1) n = 3n/4; I Laufzeit = O(log2 n). while (n >1) {for (i=1; i < n; i++) {drei einfache Anweisungen;} n = 4n/5; } I Laufzeit = () 14. Dezember 2010 6/9 For-und While-Schleifen for (i=1; i < n ; i++) vier einfache Anweisungen; I Laufzeit = O(n). for (i=1; i < n ; i++) for (j=i+1; j < n ; j++) zwei einfache Anweisungen; I Laufzeit = O(n2 ). while (n >1) n = 3n/4; I Laufzeit = O(log2 n). while (n >1) {for (i=1; i < n; i++) {drei einfache Anweisungen;} n = 4n/5; } I Laufzeit = O(n). () 14. Dezember 2010 6/9 Anwendungen des Sortierens Wann soll was sortiert werden? () 14. Dezember 2010 7/9 Anwendungen des Sortierens Wann soll was sortiert werden? 1 Wie bestimmt man den Durchschnitt von n Intervallen [ai , bi ] möglichst schnell? () 14. Dezember 2010 7/9 Anwendungen des Sortierens Wann soll was sortiert werden? 1 2 Wie bestimmt man den Durchschnitt von n Intervallen [ai , bi ] möglichst schnell? Wie bestimmt man den Durchschnitt von n Rechtecken [ai , bi ] × [ci , di ] möglichst schnell? () 14. Dezember 2010 7/9 Anwendungen des Sortierens Wann soll was sortiert werden? 1 2 3 Wie bestimmt man den Durchschnitt von n Intervallen [ai , bi ] möglichst schnell? Wie bestimmt man den Durchschnitt von n Rechtecken [ai , bi ] × [ci , di ] möglichst schnell? Wir sollen die Vereinigung von n Intervallen [ai , bi ] möglichst schnell als eine Vereinigung von disjunkten Intervallen darstellen. Wie? () 14. Dezember 2010 7/9 Anwendungen des Sortierens Wann soll was sortiert werden? 1 2 3 4 Wie bestimmt man den Durchschnitt von n Intervallen [ai , bi ] möglichst schnell? Wie bestimmt man den Durchschnitt von n Rechtecken [ai , bi ] × [ci , di ] möglichst schnell? Wir sollen die Vereinigung von n Intervallen [ai , bi ] möglichst schnell als eine Vereinigung von disjunkten Intervallen darstellen. Wie? Die i größten Zahlen aus einem unsortierten Array A sollen bestimmt werden. I I I Sollte man A sortieren oder einen Heap aus A bauen und k mal Delete_Max anwenden oder ....? () 14. Dezember 2010 7/9 Anwendungen des Sortierens Wann soll was sortiert werden? 1 2 3 4 Wie bestimmt man den Durchschnitt von n Intervallen [ai , bi ] möglichst schnell? Wie bestimmt man den Durchschnitt von n Rechtecken [ai , bi ] × [ci , di ] möglichst schnell? Wir sollen die Vereinigung von n Intervallen [ai , bi ] möglichst schnell als eine Vereinigung von disjunkten Intervallen darstellen. Wie? Die i größten Zahlen aus einem unsortierten Array A sollen bestimmt werden. I I I 5 Sollte man A sortieren oder einen Heap aus A bauen und k mal Delete_Max anwenden oder ....? Wir sollen feststellen, ob alle Schlüssel im Array A auch im Array B vorkommen. Wie? () 14. Dezember 2010 7/9 Wasserkrüge Gegeben sind n blaue und rote Wasserkrüge, wobei - alle blauen Krüge unterschiedliche Kapazität besitzen - und es zu jedem blauen Krug genau einen roten Krug gleicher Kapazität gibt. Finde alle Paare blauer und roter Krüge gleicher Kapazität mit möglichst wenigen Vergleichen. () 14. Dezember 2010 8/9 Wasserkrüge Gegeben sind n blaue und rote Wasserkrüge, wobei - alle blauen Krüge unterschiedliche Kapazität besitzen - und es zu jedem blauen Krug genau einen roten Krug gleicher Kapazität gibt. Finde alle Paare blauer und roter Krüge gleicher Kapazität mit möglichst wenigen Vergleichen. Eine Vergleichsoperation: Fülle einen blauen Krug b mit Wasser und entleere Krug b in einen roten Krug r . Wieviele Vergleichsoperationen sind ausreichend? () 14. Dezember 2010 8/9 Sortieren: Zusammenfassung Quicksort: I Ein schnelles in place Sortierverfahren. Quicksort ist ideal, wenn alle Daten in den Hauptspeicher passen. () 14. Dezember 2010 9/9 Sortieren: Zusammenfassung Quicksort: I I Ein schnelles in place Sortierverfahren. Quicksort ist ideal, wenn alle Daten in den Hauptspeicher passen. Die zufällige Pivotwahl garantiert, dass jede Folge von n Zahlen in erwarteter Zeit O(n · log2 n) sortiert wird. () 14. Dezember 2010 9/9 Sortieren: Zusammenfassung Quicksort: I I I Ein schnelles in place Sortierverfahren. Quicksort ist ideal, wenn alle Daten in den Hauptspeicher passen. Die zufällige Pivotwahl garantiert, dass jede Folge von n Zahlen in erwarteter Zeit O(n · log2 n) sortiert wird. Eine Quicksort-Variante löst das Auswahlproblem in Zeit O(n). () 14. Dezember 2010 9/9 Sortieren: Zusammenfassung Quicksort: I I I Ein schnelles in place Sortierverfahren. Quicksort ist ideal, wenn alle Daten in den Hauptspeicher passen. Die zufällige Pivotwahl garantiert, dass jede Folge von n Zahlen in erwarteter Zeit O(n · log2 n) sortiert wird. Eine Quicksort-Variante löst das Auswahlproblem in Zeit O(n). Mergesort: I Sortiert jede Folge von n Zahlen in worst case Zeit O(n · log2 n). () 14. Dezember 2010 9/9 Sortieren: Zusammenfassung Quicksort: I I I Ein schnelles in place Sortierverfahren. Quicksort ist ideal, wenn alle Daten in den Hauptspeicher passen. Die zufällige Pivotwahl garantiert, dass jede Folge von n Zahlen in erwarteter Zeit O(n · log2 n) sortiert wird. Eine Quicksort-Variante löst das Auswahlproblem in Zeit O(n). Mergesort: I I Sortiert jede Folge von n Zahlen in worst case Zeit O(n · log2 n). Eine nicht-rekursive Variante sortiert n auf einem Externspeicher gespeicherte Zahlen mit höchstens O( Bn log M Mn ) Speicherzugriffen, B solange B Zahlen in einem „Schwung“ vom Externspeicher in den Hauptspeicher der Größe M gebracht werden können. () 14. Dezember 2010 9/9 Sortieren: Zusammenfassung Quicksort: I I I Ein schnelles in place Sortierverfahren. Quicksort ist ideal, wenn alle Daten in den Hauptspeicher passen. Die zufällige Pivotwahl garantiert, dass jede Folge von n Zahlen in erwarteter Zeit O(n · log2 n) sortiert wird. Eine Quicksort-Variante löst das Auswahlproblem in Zeit O(n). Mergesort: I I Sortiert jede Folge von n Zahlen in worst case Zeit O(n · log2 n). Eine nicht-rekursive Variante sortiert n auf einem Externspeicher gespeicherte Zahlen mit höchstens O( Bn log M Mn ) Speicherzugriffen, B solange B Zahlen in einem „Schwung“ vom Externspeicher in den Hauptspeicher der Größe M gebracht werden können. Jedes vergleichsorientierte Sortierverfahren benötigt mindestens Ω(n · log2 n) Vergleiche, aber () 14. Dezember 2010 9/9 Sortieren: Zusammenfassung Quicksort: I I I Ein schnelles in place Sortierverfahren. Quicksort ist ideal, wenn alle Daten in den Hauptspeicher passen. Die zufällige Pivotwahl garantiert, dass jede Folge von n Zahlen in erwarteter Zeit O(n · log2 n) sortiert wird. Eine Quicksort-Variante löst das Auswahlproblem in Zeit O(n). Mergesort: I I Sortiert jede Folge von n Zahlen in worst case Zeit O(n · log2 n). Eine nicht-rekursive Variante sortiert n auf einem Externspeicher gespeicherte Zahlen mit höchstens O( Bn log M Mn ) Speicherzugriffen, B solange B Zahlen in einem „Schwung“ vom Externspeicher in den Hauptspeicher der Größe M gebracht werden können. Jedes vergleichsorientierte Sortierverfahren benötigt mindestens Ω(n · log2 n) Vergleiche, aber Radixsort sortiert n Zahlen aus der Menge {0, . . . , nL − 1} in Zeit O(n · L) ohne irgendeinen Vergleich auszuführen. () 14. Dezember 2010 9/9