Asymptotische Notation und Sortieren

Werbung
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.
Asymptotik
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.
Asymptotik
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.
Asymptotik
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.
Asymptotik
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.
Asymptotik
1/9
Wie schnell dominiert die Asymptotik?
Annahme: Ein einfacher Befehl benötigt 10−9 Sekunden.
Asymptotik
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
Asymptotik
2.097.152
16.777.216
134.217.728
≥ 109
≥ 1018
| {z }
mehr als
10 Jahre
n!
≥ 1013
≥ 1031
| {z }
mehr als
1014 Jahre
2/9
Grenzwerte
Grenzwerte sollten das Wachstum vorausssagen!
Asymptotik
3/9
Grenzwerte
Grenzwerte sollten das Wachstum vorausssagen!
Der Grenzwert der Folge
Asymptotik
f (n)
g(n)
f (n)
n→∞ g(n)
existiere und es sei lim
= c.
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
Asymptotik
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.
Asymptotik
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
Asymptotik
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.
Asymptotik
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
Asymptotik
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.
Asymptotik
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
Asymptotik
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.
Asymptotik
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→∞
Asymptotik
n→∞
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→∞
Asymptotik
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).
Asymptotik
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).
Asymptotik
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 .
Asymptotik
4/9
Eine Wachstums-Hierarchie
f1 (n) = 1, dann ist f1 = o(log2 log2 n),
limn→∞ log2 log2 n = ∞.
Asymptotik
Eine Wachstums-Hierarchie
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.
Asymptotik
Eine Wachstums-Hierarchie
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.
Asymptotik
Eine Wachstums-Hierarchie
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.
Asymptotik
Eine Wachstums-Hierarchie
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→∞
Asymptotik
n1/k
n
= limn→∞
1
n1−1/k
= 0 und limn→∞ log2 n = ∞.
Eine Wachstums-Hierarchie
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 =
Asymptotik
n1/k
n
= limn→∞
o(nk )
1
n1−1/k
= 0 und limn→∞ log2 n = ∞.
für jedes k > 1.
Eine Wachstums-Hierarchie
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
Asymptotik
Eine Wachstums-Hierarchie
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→∞
Asymptotik
bk ·logb n
bn
= limn→∞ bk ·logb n−n = 0.
Eine Wachstums-Hierarchie
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.
Asymptotik
Eine Wachstums-Hierarchie
5/9
For-und While-Schleifen
for (i=1; i < n ; i++)
vier einfache Anweisungen;
I
Laufzeit =
Laufzeitbestimmung
6/9
For-und While-Schleifen
for (i=1; i < n ; i++)
vier einfache Anweisungen;
I
Laufzeit = O(n).
Laufzeitbestimmung
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 =
Laufzeitbestimmung
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 ).
Laufzeitbestimmung
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 =
Laufzeitbestimmung
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).
Laufzeitbestimmung
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 =
Laufzeitbestimmung
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).
Laufzeitbestimmung
6/9
Anwendungen des Sortierens
Wann soll was sortiert werden?
Laufzeitbestimmung
7/9
Anwendungen des Sortierens
Wann soll was sortiert werden?
1
Wie bestimmt man den Durchschnitt von n Intervallen [ai , bi ]
möglichst schnell?
Laufzeitbestimmung
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?
Laufzeitbestimmung
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?
Laufzeitbestimmung
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 k 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 ....?
Laufzeitbestimmung
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 k 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?
Laufzeitbestimmung
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.
Laufzeitbestimmung
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?
Laufzeitbestimmung
8/9
Sortieren: Zusammenfassung
Quicksort:
I
Ein schnelles in place Sortierverfahren. Quicksort ist ideal, wenn
alle Daten in den Hauptspeicher passen.
Zusammenfassung: Sortieren
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.
Zusammenfassung: Sortieren
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).
Zusammenfassung: Sortieren
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).
Zusammenfassung: Sortieren
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.
Zusammenfassung: Sortieren
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
Zusammenfassung: Sortieren
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.
Zusammenfassung: Sortieren
9/9
Herunterladen