Algorithmen und Datenstrukturen

Werbung
1
Algorithmen und Datenstrukturen
Wintersemester 2013/14
11. Vorlesung
Das Auswahlproblem
Prof. Dr. Alexander Wolff
Lehrstuhl für Informatik I
2
Analyse von Messreihen
Problem: Gegeben eine Reihe von n Messwerten A[1..n],
finde einen guten“ Mittelwert.
”
2
Analyse von Messreihen
Problem: Gegeben eine Reihe von n Messwerten A[1..n],
finde einen guten“ Mittelwert.
”
Beispiel:
2
Analyse von Messreihen
Problem: Gegeben eine Reihe von n Messwerten A[1..n],
finde einen guten“ Mittelwert.
”
Beispiel:
3
0
2
Analyse von Messreihen
Problem: Gegeben eine Reihe von n Messwerten A[1..n],
finde einen guten“ Mittelwert.
”
Beispiel:
3
0
2
Analyse von Messreihen
Problem: Gegeben eine Reihe von n Messwerten A[1..n],
finde einen guten“ Mittelwert.
”
Beispiel:
P
3
0
arithmetisches Mittel
i
A[i ]
n
2
Analyse von Messreihen
Problem: Gegeben eine Reihe von n Messwerten A[1..n],
finde einen guten“ Mittelwert.
”
Beispiel:
3
0
2
Analyse von Messreihen
Problem: Gegeben eine Reihe von n Messwerten A[1..n],
finde einen guten“ Mittelwert.
”
Beispiel:
3
0
−19
2
Analyse von Messreihen
Problem: Gegeben eine Reihe von n Messwerten A[1..n],
finde einen guten“ Mittelwert.
”
Beispiel:
3
0
arithmetisches
Mittel
−19
2
Analyse von Messreihen
Problem: Gegeben eine Reihe von n Messwerten A[1..n],
finde einen guten“ Mittelwert.
”
Beispiel:
3
0
arithmetisches
Mittel
−19
-19
2
Analyse von Messreihen
Problem: Gegeben eine Reihe von n Messwerten A[1..n],
finde einen guten“ Mittelwert.
”
Beispiel:
3
0
arithmetisches
Mittel
−19
-19
2
Analyse von Messreihen
Problem: Gegeben eine Reihe von n Messwerten A[1..n],
finde einen guten“ Mittelwert.
n+1
”
index
2
Beispiel:
3
0
arithmetisches
Mittel
−19
-19
2
Analyse von Messreihen
Problem: Gegeben eine Reihe von n Messwerten A[1..n],
finde einen guten“ Mittelwert.
n+1
”
index
2
Beispiel:
3
0
arithmetisches
Mittel
−19
-19
Median
A[b n+1
2 c]
2
Analyse von Messreihen
Problem: Gegeben eine Reihe von n Messwerten A[1..n],
finde einen guten“ Mittelwert.
n+1
”
index
2
Beispiel:
3
0
arithmetisches
Mittel
−19
-19
Median
A[b n+1
2 c]
2
Analyse von Messreihen
Problem: Gegeben eine Reihe von n Messwerten A[1..n],
finde einen guten“ Mittelwert.
n+1
”
index
2
Beispiel:
3
0
arithmetisches
Mittel
P
1
i A[i ]
n
Beob.:
Median
A[b n+1
2 c]
Der Median ist stabiler gegen Ausreißer als das
arithmetische Mittel.
−19
-19
2
Analyse von Messreihen
Problem: Gegeben eine Reihe von n Messwerten A[1..n],
finde einen guten“ Mittelwert.
n+1
”
index
2
Beispiel:
3
0
arithmetisches
Mittel
P
1
i A[i ]
n
Beob.:
Median
A[b n+1
2 c]
Der Median ist stabiler gegen Ausreißer als das
arithmetische Mittel.
−19
-19
Berechnung?
3
Das Auswahlproblem
Aufgabe: Gegeben ein Feld A[1..n],
finde das i .-kleinste Element von A.
3
Das Auswahlproblem
Aufgabe: Gegeben ein Feld A[1..n],
finde das i .-kleinste Element von A.
Lösung:
3
Das Auswahlproblem
Aufgabe: Gegeben ein Feld A[1..n],
finde das i .-kleinste Element von A.
Lösung:
Sortiere und gib A[i ] zurück!
3
Das Auswahlproblem
Aufgabe: Gegeben ein Feld A[1..n],
finde das i .-kleinste Element von A.
Lösung:
Sortiere und gib A[i ] zurück!
Worst-Case-Laufzeit: Θ (n log n)
3
Das Auswahlproblem
Aufgabe: Gegeben ein Feld A[1..n],
finde das i .-kleinste Element von A.
Lösung:
Sortiere und gib A[i ] zurück!
Worst-Case-Laufzeit: Θ (n log n)
Das heißt. . .
4
Spezialfälle
i = b n+1
2 c:
i = 1:
i = n:
4
Spezialfälle
i = b n+1
2 c: Median
i = 1:
Minimum
i = n:
Maximum
4
Spezialfälle
i = b n+1
2 c: Median
i = 1:
Minimum
i = n:
Maximum
Minimum(Feld A)
min = A[1]
for i = 2 to A.length do
if min > A[i ] then min = A[i ]
return min
4
Spezialfälle
i = b n+1
2 c: Median
i = 1:
Minimum
i = n:
Maximum
Minimum(Feld A)
min = A[1]
for i = 2 to A.length do
if min > A[i ] then min = A[i ] Anzahl Vergleiche =
return min
4
Spezialfälle
i = b n+1
2 c: Median
i = 1:
Minimum
i = n:
Maximum
Minimum(Feld A)
min = A[1]
for i = 2 to A.length do
if min > A[i ] then min = A[i ] Anzahl Vergleiche = n − 1
return min
4
Spezialfälle
i = b n+1
2 c: Median
o
i = 1:
Minimum
Laufzeit Θ (n)
i = n:
Maximum
Minimum(Feld A)
min = A[1]
for i = 2 to A.length do
if min > A[i ] then min = A[i ] Anzahl Vergleiche = n − 1
return min
4
Spezialfälle
i = b n+1
2 c: Median
o
i = 1:
Minimum
Laufzeit Θ (n)
i = n:
Maximum
Minimum(Feld A)
min = A[1]
for i = 2 to A.length do
if min > A[i ] then min = A[i ] Anzahl Vergleiche = n − 1
return min
Ist das optimal?
4
Spezialfälle
i = b n+1
2 c: Median
o
i = 1:
Minimum
Laufzeit Θ (n)
i = n:
Maximum
Minimum(Feld A)
min = A[1]
for i = 2 to A.length do
if min > A[i ] then min = A[i ] Anzahl Vergleiche = n − 1
return min
Ist das optimal? Betrachte ein Turnier.
4
Spezialfälle
i = b n+1
2 c: Median
o
i = 1:
Minimum
Laufzeit Θ (n)
i = n:
Maximum
Minimum(Feld A)
min = A[1]
for i = 2 to A.length do
if min > A[i ] then min = A[i ] Anzahl Vergleiche = n − 1
return min
Ist das optimal? Betrachte ein Turnier.
Bis ein Gewinner feststeht, muss
jeder – außer dem Gewinner –
mindestens einmal verlieren.
4
Spezialfälle
i = b n+1
2 c: Median
o
i = 1:
Minimum
Laufzeit Θ (n)
i = n:
Maximum
Minimum(Feld A)
min = A[1]
for i = 2 to A.length do
if min > A[i ] then min = A[i ] Anzahl Vergleiche = n − 1
return min
Ist das optimal? Betrachte ein Turnier.
Bis ein Gewinner feststeht, muss
jeder – außer dem Gewinner –
mindestens einmal verlieren.
Also sind n − 1 Vergleiche optimal.
4
Spezialfälle
Geht das auch in linearer Zeit??
i = b n+1
2 c: Median
o
i = 1:
Minimum
Laufzeit Θ (n)
i = n:
Maximum
Minimum(Feld A)
min = A[1]
for i = 2 to A.length do
if min > A[i ] then min = A[i ] Anzahl Vergleiche = n − 1
return min
Ist das optimal? Betrachte ein Turnier.
Bis ein Gewinner feststeht, muss
jeder – außer dem Gewinner –
mindestens einmal verlieren.
Also sind n − 1 Vergleiche optimal.
5
Eine Randbemerkung...
Def.
Sei Vminmax (n) die Anz. der Vgl., die man braucht um
Minimum und Maximum von n Zahlen zu bestimmen.
5
Eine Randbemerkung...
Def.
Klar:
Sei Vminmax (n) die Anz. der Vgl., die man braucht um
Minimum und Maximum von n Zahlen zu bestimmen.
Vminmax (n) ≤
5
Eine Randbemerkung...
Def.
Klar:
Sei Vminmax (n) die Anz. der Vgl., die man braucht um
Minimum und Maximum von n Zahlen zu bestimmen.
Vminmax (n) ≤ 2 · Vmin (n) =
5
Eine Randbemerkung...
Def.
Klar:
Sei Vminmax (n) die Anz. der Vgl., die man braucht um
Minimum und Maximum von n Zahlen zu bestimmen.
Vminmax (n) ≤ 2 · Vmin (n) = 2(n − 1)
5
Eine Randbemerkung...
Def.
Klar:
Sei Vminmax (n) die Anz. der Vgl., die man braucht um
Minimum und Maximum von n Zahlen zu bestimmen.
Vminmax (n) ≤ 2 · Vmin (n) = 2(n − 1)
Frage: Geht es auch mit weniger Vergleichen?
5
Eine Randbemerkung...
Def.
Klar:
Sei Vminmax (n) die Anz. der Vgl., die man braucht um
Minimum und Maximum von n Zahlen zu bestimmen.
Vminmax (n) ≤ 2 · Vmin (n) = 2(n − 1)
Frage: Geht es auch mit weniger Vergleichen?
min
max
5
Eine Randbemerkung...
Def.
Klar:
Sei Vminmax (n) die Anz. der Vgl., die man braucht um
Minimum und Maximum von n Zahlen zu bestimmen.
Vminmax (n) ≤ 2 · Vmin (n) = 2(n − 1)
Frage: Geht es auch mit weniger Vergleichen?
min
max
5
Eine Randbemerkung...
Def.
Klar:
Sei Vminmax (n) die Anz. der Vgl., die man braucht um
Minimum und Maximum von n Zahlen zu bestimmen.
Vminmax (n) ≤ 2 · Vmin (n) = 2(n − 1)
Frage: Geht es auch mit weniger Vergleichen?
>
min
max
5
Eine Randbemerkung...
Def.
Klar:
Sei Vminmax (n) die Anz. der Vgl., die man braucht um
Minimum und Maximum von n Zahlen zu bestimmen.
Vminmax (n) ≤ 2 · Vmin (n) = 2(n − 1)
Frage: Geht es auch mit weniger Vergleichen?
>
min
max
5
Eine Randbemerkung...
Def.
Klar:
Sei Vminmax (n) die Anz. der Vgl., die man braucht um
Minimum und Maximum von n Zahlen zu bestimmen.
Vminmax (n) ≤ 2 · Vmin (n) = 2(n − 1)
Frage: Geht es auch mit weniger Vergleichen?
>
min
max
5
Eine Randbemerkung...
Def.
Klar:
Sei Vminmax (n) die Anz. der Vgl., die man braucht um
Minimum und Maximum von n Zahlen zu bestimmen.
Vminmax (n) ≤ 2 · Vmin (n) = 2(n − 1)
Frage: Geht es auch mit weniger Vergleichen?
>
min
max
<
5
Eine Randbemerkung...
Def.
Klar:
Sei Vminmax (n) die Anz. der Vgl., die man braucht um
Minimum und Maximum von n Zahlen zu bestimmen.
Vminmax (n) ≤ 2 · Vmin (n) = 2(n − 1)
Frage: Geht es auch mit weniger Vergleichen?
>
min
max
<
5
Eine Randbemerkung...
Def.
Klar:
Sei Vminmax (n) die Anz. der Vgl., die man braucht um
Minimum und Maximum von n Zahlen zu bestimmen.
Vminmax (n) ≤ 2 · Vmin (n) = 2(n − 1)
Frage: Geht es auch mit weniger Vergleichen?
>
min
max
<
5
Eine Randbemerkung...
Def.
Klar:
Sei Vminmax (n) die Anz. der Vgl., die man braucht um
Minimum und Maximum von n Zahlen zu bestimmen.
Vminmax (n) ≤ 2 · Vmin (n) = 2(n − 1)
Frage: Geht es auch mit weniger Vergleichen?
>
min
max
<
>
5
Eine Randbemerkung...
Def.
Klar:
Sei Vminmax (n) die Anz. der Vgl., die man braucht um
Minimum und Maximum von n Zahlen zu bestimmen.
Vminmax (n) ≤ 2 · Vmin (n) = 2(n − 1)
Frage: Geht es auch mit weniger Vergleichen?
>
min
max
<
>
5
Eine Randbemerkung...
Def.
Klar:
Sei Vminmax (n) die Anz. der Vgl., die man braucht um
Minimum und Maximum von n Zahlen zu bestimmen.
Vminmax (n) ≤ 2 · Vmin (n) = 2(n − 1)
Frage: Geht es auch mit weniger Vergleichen?
>
<
>
...
min
max
5
Eine Randbemerkung...
Def.
Klar:
Sei Vminmax (n) die Anz. der Vgl., die man braucht um
Minimum und Maximum von n Zahlen zu bestimmen.
Vminmax (n) ≤ 2 · Vmin (n) = 2(n − 1)
Frage: Geht es auch mit weniger Vergleichen?
>
1
min
max
<
>
...
5
Eine Randbemerkung...
Def.
Klar:
Sei Vminmax (n) die Anz. der Vgl., die man braucht um
Minimum und Maximum von n Zahlen zu bestimmen.
Vminmax (n) ≤ 2 · Vmin (n) = 2(n − 1)
Frage: Geht es auch mit weniger Vergleichen?
>
1
min
max
<
3
>
...
5
Eine Randbemerkung...
Def.
Klar:
Sei Vminmax (n) die Anz. der Vgl., die man braucht um
Minimum und Maximum von n Zahlen zu bestimmen.
Vminmax (n) ≤ 2 · Vmin (n) = 2(n − 1)
Frage: Geht es auch mit weniger Vergleichen?
>
1
min
max
<
3
>
3
...
5
Eine Randbemerkung...
Def.
Klar:
Sei Vminmax (n) die Anz. der Vgl., die man braucht um
Minimum und Maximum von n Zahlen zu bestimmen.
Vminmax (n) ≤ 2 · Vmin (n) = 2(n − 1)
Frage: Geht es auch mit weniger Vergleichen?
>
1
min
max
<
3
>
3
...
3
5
Eine Randbemerkung...
Def.
Klar:
Sei Vminmax (n) die Anz. der Vgl., die man braucht um
Minimum und Maximum von n Zahlen zu bestimmen.
Vminmax (n) ≤ 2 · Vmin (n) = 2(n − 1)
Frage: Geht es auch mit weniger Vergleichen?
>
1
min
max
<
3
>
3
...
3
=
(n gerade)
5
Eine Randbemerkung...
Def.
Klar:
Sei Vminmax (n) die Anz. der Vgl., die man braucht um
Minimum und Maximum von n Zahlen zu bestimmen.
Vminmax (n) ≤ 2 · Vmin (n) = 2(n − 1)
Frage: Geht es auch mit weniger Vergleichen?
>
1
min
max
<
3
>
3
...
3
(n gerade)
= 1 · 1 + (n/2 − 1) · 3
5
Eine Randbemerkung...
Def.
Klar:
Sei Vminmax (n) die Anz. der Vgl., die man braucht um
Minimum und Maximum von n Zahlen zu bestimmen.
Vminmax (n) ≤ 2 · Vmin (n) = 2(n − 1)
Frage: Geht es auch mit weniger Vergleichen?
>
1
min
max
<
3
>
3
...
3
(n gerade)
= 1 · 1 + (n/2 − 1) · 3
= 3n/2 − 2
5
Eine Randbemerkung...
Def.
Klar:
Sei Vminmax (n) die Anz. der Vgl., die man braucht um
Minimum und Maximum von n Zahlen zu bestimmen.
Vminmax (n) ≤ 2 · Vmin (n) = 2(n − 1)
Frage: Geht es auch mit weniger Vergleichen?
>
1
<
3
>
3
min
max
Ist das optimal?
...
3
(n gerade)
= 1 · 1 + (n/2 − 1) · 3
= 3n/2 − 2
6
Auswahl per Teile & Herrsche
Zur Erinnerung...
QuickSort(A, `, r )
if ` < r then
m = Partition(A, `, r )
QuickSort(A, `, m − 1)
QuickSort(A, m + 1, r )
A
`
r
6
Auswahl per Teile & Herrsche
Zur Erinnerung...
QuickSort(A, `, r )
if ` < r then
m = Partition(A, `, r )
QuickSort(A, `, m − 1)
QuickSort(A, m + 1, r )
A
`
m
r
6
Auswahl per Teile & Herrsche
Zur Erinnerung...
QuickSort(A, `, r )
if ` < r then
m = Partition(A, `, r )
QuickSort(A, `, m − 1)
QuickSort(A, m + 1, r )
A
`
m
r
| {z } | {z }
≤ A[m]
> A[m]
6
Auswahl per Teile & Herrsche
Zur Erinnerung...
QuickSort(A, `, r )
if ` < r then
m = Partition(A, `, r )
QuickSort(A, `, m − 1)
QuickSort(A, m + 1, r )
A
`
m
r
| {z } | {z }
≤ A[m]
> A[m]
6
Auswahl per Teile & Herrsche
Zur Erinnerung...
QuickSort(A, `, r )
if ` < r then
m = Partition(A, `, r )
QuickSort(A, `, m − 1)
QuickSort(A, m + 1, r )
A
`
m
r
| {z } | {z }
≤ A[m]
> A[m]
6
Auswahl per Teile & Herrsche
Zur Erinnerung...
QuickSort(A, `, r )
if ` < r then
m = Partition(A, `, r )
QuickSort(A, `, m − 1)
QuickSort(A, m + 1, r )
A
`
r
6
Auswahl per Teile & Herrsche
Zur Erinnerung...
Randomized
QuickSort(A, `, r )
if ` < r then
Randomized
m = Partition(A, `, r )
QuickSort(A, `, m − 1)
QuickSort(A, m + 1, r )
A
`
r
6
Auswahl per Teile & Herrsche
Zur Erinnerung...
Finde i .-kleinstes Element in A[`..r ]!
Randomized
QuickSort(A, `, r )
if ` < r then
Randomized
m = Partition(A, `, r )
QuickSort(A, `, m − 1)
QuickSort(A, m + 1, r )
A
`
r
6
Auswahl per Teile & Herrsche
Zur Erinnerung...
Finde i .-kleinstes Element in A[`..r ]!
Randomized
QuickSort(A, `, r )
if ` < r then
Randomized
m = Partition(A, `, r )
QuickSort(A, `, m − 1)
QuickSort(A, m + 1, r )
A
`
r
RandomizedSelect(A, `, r , i )
6
Auswahl per Teile & Herrsche
Zur Erinnerung...
Finde i .-kleinstes Element in A[`..r ]!
Randomized
QuickSort(A, `, r )
if ` < r then
Randomized
m = Partition(A, `, r )
QuickSort(A, `, m − 1)
QuickSort(A, m + 1, r )
A
`
r
RandomizedSelect(A, `, r , i )
if ` == r then return A[`]
m = RandomizedPartition(A, `, r )
k =m−`+1
if i == k then
return A[m]
else
if i < k then
return RSelect(A, `, m−1, i)
else
return RSelect(A, m+1, r , i −k)
6
Auswahl per Teile & Herrsche
Zur Erinnerung...
Finde i .-kleinstes Element in A[`..r ]!
Randomized
QuickSort(A, `, r )
if ` < r then
Randomized
m = Partition(A, `, r )
QuickSort(A, `, m − 1)
QuickSort(A, m + 1, r )
A
`
m
r
RandomizedSelect(A, `, r , i )
if ` == r then return A[`]
m = RandomizedPartition(A, `, r )
k =m−`+1
if i == k then
return A[m]
else
if i < k then
return RSelect(A, `, m−1, i)
else
return RSelect(A, m+1, r , i −k)
6
Auswahl per Teile & Herrsche
Zur Erinnerung...
Finde i .-kleinstes Element in A[`..r ]!
Randomized
QuickSort(A, `, r )
if ` < r then
Randomized
m = Partition(A, `, r )
QuickSort(A, `, m − 1)
QuickSort(A, m + 1, r )
k
A
`
m
r
RandomizedSelect(A, `, r , i )
if ` == r then return A[`]
m = RandomizedPartition(A, `, r )
k =m−`+1
if i == k then
return A[m]
else
if i < k then
return RSelect(A, `, m−1, i)
else
return RSelect(A, m+1, r , i −k)
6
Auswahl per Teile & Herrsche
Zur Erinnerung...
Finde i .-kleinstes Element in A[`..r ]!
Randomized
QuickSort(A, `, r )
if ` < r then
Randomized
m = Partition(A, `, r )
QuickSort(A, `, m − 1)
QuickSort(A, m + 1, r )
k
A
`
m
r
RandomizedSelect(A, `, r , i )
if ` == r then return A[`]
m = RandomizedPartition(A, `, r )
k = m − ` + 1 // A[m] k .-kleinstes El.
von A[`..r ]
if i == k then
return A[m]
else
if i < k then
return RSelect(A, `, m−1, i)
else
return RSelect(A, m+1, r , i −k)
6
Auswahl per Teile & Herrsche
Zur Erinnerung...
Finde i .-kleinstes Element in A[`..r ]!
Randomized
QuickSort(A, `, r )
if ` < r then
Randomized
m = Partition(A, `, r )
QuickSort(A, `, m − 1)
QuickSort(A, m + 1, r )
k
A
`
m
r
| {z } | {z }
≤ A[m]
> A[m]
RandomizedSelect(A, `, r , i )
if ` == r then return A[`]
m = RandomizedPartition(A, `, r )
k = m − ` + 1 // A[m] k .-kleinstes El.
von A[`..r ]
if i == k then
return A[m]
else
if i < k then
return RSelect(A, `, m−1, i)
else
return RSelect(A, m+1, r , i −k)
6
Auswahl per Teile & Herrsche
Zur Erinnerung...
Finde i .-kleinstes Element in A[`..r ]!
Randomized
QuickSort(A, `, r )
if ` < r then
Randomized
m = Partition(A, `, r )
QuickSort(A, `, m − 1)
QuickSort(A, m + 1, r )
k
A
`
m
r
| {z } | {z }
≤ A[m]
> A[m]
RandomizedSelect(A, `, r , i )
if ` == r then return A[`]
m = RandomizedPartition(A, `, r )
k = m − ` + 1 // A[m] k .-kleinstes El.
von A[`..r ]
if i == k then
return A[m]
else
if i < k then
return RSelect(A, `, m−1, i)
else
return RSelect(A, m+1, r , i −k)
6
Auswahl per Teile & Herrsche
Zur Erinnerung...
Finde i .-kleinstes Element in A[`..r ]!
Randomized
QuickSort(A, `, r )
if ` < r then
Randomized
m = Partition(A, `, r )
QuickSort(A, `, m − 1)
QuickSort(A, m + 1, r )
k
A
`
m
r
| {z } | {z }
≤ A[m]
> A[m]
RandomizedSelect(A, `, r , i )
if ` == r then return A[`]
m = RandomizedPartition(A, `, r )
k = m − ` + 1 // A[m] k .-kleinstes El.
von A[`..r ]
if i == k then
return A[m]
else
if i < k then
return RSelect(A, `, m−1, i)
else
return RSelect(A, m+1, r , i −k)
Ist Ihnen klar warum?
7
Laufzeit-Analyse
Anz. Vgl. von RandomizedSelect ist ZV; hängt von n und i ab.
7
Laufzeit-Analyse
Anz. Vgl. von RandomizedSelect ist ZV; hängt von n und i ab.
Trick: Geh davon aus, dass das gesuchte i . Element immer im
m
n
1
größeren Teilfeld liegt.
7
Laufzeit-Analyse
Anz. Vgl. von RandomizedSelect ist ZV; hängt von n und i ab.
Trick: Geh davon aus, dass das gesuchte i . Element immer im
m
n
1
größeren Teilfeld liegt.
⇒ resultierende Zufallsvariable V (n) ist
– obere Schranke für tatsächliche Anzahl von Vergleichen
– unabhängig von i
7
Laufzeit-Analyse
Anz. Vgl. von RandomizedSelect ist ZV; hängt von n und i ab.
Trick: Geh davon aus, dass das gesuchte i . Element immer im
m
n
1
größeren Teilfeld liegt.
⇒ resultierende Zufallsvariable V (n) ist
– obere Schranke für tatsächliche Anzahl von Vergleichen
– unabhängig von i


V (n − 1) falls m = 1





V (n − 2) falls m = 2


. . .
V (n) = VPart (n) + V (b n2 c)
falls m = b n2 c + 1

...




V (n − 2) falls m = n − 1



V (n − 1) falls m = n
7
Laufzeit-Analyse
Anz. Vgl. von RandomizedSelect ist ZV; hängt von n und i ab.
Trick: Geh davon aus, dass das gesuchte i . Element immer im
m
n
1
größeren Teilfeld liegt.
⇒ resultierende Zufallsvariable V (n) ist
– obere Schranke für tatsächliche Anzahl von Vergleichen
– unabhängig von i


V (n − 1) falls m = 1





V (n − 2) falls m = 2


. . .
V (n) = VPart (n) + V (b n2 c)
falls m = b n2 c + 1
| {z } 
...




V (n − 2) falls m = n − 1



V (n − 1) falls m = n
7
Laufzeit-Analyse
Anz. Vgl. von RandomizedSelect ist ZV; hängt von n und i ab.
Trick: Geh davon aus, dass das gesuchte i . Element immer im
m
n
1
größeren Teilfeld liegt.
⇒ resultierende Zufallsvariable V (n) ist
– obere Schranke für tatsächliche Anzahl von Vergleichen
– unabhängig von i


V (n − 1) falls m = 1





V (n − 2) falls m = 2


. . .
V (n) = VPart (n) + V (b n2 c)
falls m = b n2 c + 1
| {z } 
...



=n−1 
V (n − 2) falls m = n − 1



V (n − 1) falls m = n
7
Laufzeit-Analyse
Anz. Vgl. von RandomizedSelect ist ZV; hängt von n und i ab.
Trick: Geh davon aus, dass das gesuchte i . Element immer im
m
n
1
größeren Teilfeld liegt.
⇒ resultierende Zufallsvariable V (n) ist
– obere Schranke für tatsächliche Anzahl von Vergleichen
– unabhängig von i




V (n − 1) falls m = 1










V (n − 2) falls m = 2




 Alle Fälle gleich
. . .
V (n) = VPart (n) + V (b n2 c)
falls m = b n2 c + 1 wahrscheinlich!

| {z } 
...







=n−1 
V
(
n
−
2)
falls
m
=
n
−
1







V (n − 1) falls m = n
7
Laufzeit-Analyse
Anz. Vgl. von RandomizedSelect ist ZV; hängt von n und i ab.
Trick: Geh davon aus, dass das gesuchte i . Element immer im
m
n
1
größeren Teilfeld liegt.
⇒ resultierende Zufallsvariable V (n) ist
– obere Schranke für tatsächliche Anzahl von Vergleichen
– unabhängig von i




V (n − 1) falls m = 1










V (n − 2) falls m = 2




 Alle Fälle gleich
. . .
V (n) = VPart (n) + V (b n2 c)
falls m = b n2 c + 1 wahrscheinlich!

| {z } 
...


vorausgesetzt





=n−1 
V
(
n
−
2)
falls
m
=
n
−
1
alle Elem. sind






 verschieden!
V (n − 1) falls m = n
h
i
7
Laufzeit-Analyse
Anz. Vgl. von RandomizedSelect ist ZV; hängt von n und i ab.
Trick: Geh davon aus, dass das gesuchte i . Element immer im
m
n
1
größeren Teilfeld liegt.
⇒ resultierende Zufallsvariable V (n) ist
– obere Schranke für tatsächliche Anzahl von Vergleichen
– unabhängig von i




V (n − 1) falls m = 1










V (n − 2) falls m = 2




 Alle Fälle gleich
. . .
V (n) = VPart (n) + V (b n2 c)
falls m = b n2 c + 1 wahrscheinlich!

| {z } 
...


vorausgesetzt





=n−1 
V
(
n
−
2)
falls
m
=
n
−
1
alle Elem. sind






 verschieden!
V (n − 1) falls m = n
h
i
7
Laufzeit-Analyse
Anz. Vgl. von RandomizedSelect ist ZV; hängt von n und i ab.
Trick: Geh davon aus, dass das gesuchte i . Element immer im
m
n
1
größeren Teilfeld liegt.
⇒ resultierende Zufallsvariable V (n) ist
– obere Schranke für tatsächliche Anzahl von Vergleichen
– unabhängig von i




V (n − 1) falls m = 1










V (n − 2) falls m = 2




 Alle Fälle gleich
. . .
V (n) = VPart (n) + V (b n2 c)
falls m = b n2 c + 1 wahrscheinlich!

| {z } 
...


vorausgesetzt





=n−1 
V
(
n
−
2)
falls
m
=
n
−
1
alle Elem. sind






 verschieden!
V (n − 1) falls m = n
h
⇒ E [V (n)] ≤ n −1 +
2· n1
Pn−1
k =bn/2c
E [V (k )]
i
7
Laufzeit-Analyse
Anz. Vgl. von RandomizedSelect ist ZV; hängt von n und i ab.
Trick: Geh davon aus, dass das gesuchte i . Element immer im
m
n
1
größeren Teilfeld liegt.
⇒ resultierende Zufallsvariable V (n) ist
– obere Schranke für tatsächliche Anzahl von Vergleichen
– unabhängig von i




V (n − 1) falls m = 1










V (n − 2) falls m = 2




 Alle Fälle gleich
. . .
V (n) = VPart (n) + V (b n2 c)
falls m = b n2 c + 1 wahrscheinlich!

| {z } 
...


vorausgesetzt





=n−1 
V
(
n
−
2)
falls
m
=
n
−
1
alle Elem. sind






 verschieden!
V (n − 1) falls m = n
h
Pn−1
1
⇒ E [V (n)] ≤ n −1 + 2· n
k =bn/2c
E [V (k )] ≤
i
?
c ·n
für ein
c >0
8-1
Substitutionsmethode
E [V (n)] ≤ n −1 +
2· n1
Pn−1
k =bn/2c
E [V (k )]
8-2
Substitutionsmethode
Wir schreiben f (n) für E [V (n)].
E [V (n)] ≤ n −1 +
2· n1
Pn−1
k =bn/2c
E [V (k )]
8-3
Substitutionsmethode
Wir schreiben f (n) für E [V (n)].
Pn−1
2
Dann gilt f (n) ≤ n + n k =bn/2c f (k )
E [V (n)] ≤ n −1 +
2· n1
Pn−1
k =bn/2c
E [V (k )]
8-4
Substitutionsmethode
Wir schreiben f (n) für E [V (n)].
Pn−1
2
Dann gilt f (n) ≤ n + n k =bn/2c f (k )
Wir wollen prüfen, ob es ein c > 0 gibt, so dass f (n) ≤ cn.
E [V (n)] ≤ n −1 +
2· n1
Pn−1
k =bn/2c
E [V (k )]
8-5
Substitutionsmethode
Wir schreiben f (n) für E [V (n)].
Pn−1
2
Dann gilt f (n) ≤ n + n k =bn/2c f (k )
Wir wollen prüfen, ob es ein c > 0 gibt, so dass f (n) ≤ cn.
Pn−1
2
Also: f (n) ≤ n + n k =bn/2c c · k [laut Annahme]
E [V (n)] ≤ n −1 +
2· n1
Pn−1
k =bn/2c
E [V (k )]
8-6
Substitutionsmethode
Wir schreiben f (n) für E [V (n)].
Pn−1
2
Dann gilt f (n) ≤ n + n k =bn/2c f (k )
Wir wollen prüfen, ob es ein c > 0 gibt, so dass f (n) ≤ cn.
Pn−1
2
Also: f (n) ≤ n + n k =bn/2c c · k [laut Annahme]
Aufgabe:
Bestimmen Sie ein c ,
so dass f (n) ≤ cn!
(Ignorieren Sie das
Abrunden b...c.)
E [V (n)] ≤ n −1 +
2· n1
Pn−1
k =bn/2c
E [V (k )]
8-7
Substitutionsmethode
Wir schreiben f (n) für E [V (n)].
Pn−1
2
Dann gilt f (n) ≤ n + n k =bn/2c f (k )
Wir wollen prüfen, ob es ein c > 0 gibt, so dass f (n) ≤ cn.
Pn−1
2
Also: f (n) ≤ n + n k =bn/2c c · k [laut Annahme]
Pn−1
Pbn/2c−1 2c
=n+ n
k
k =1 k −
k =1
E [V (n)] ≤ n −1 +
2· n1
Pn−1
k =bn/2c
E [V (k )]
8-8
Substitutionsmethode
Wir schreiben f (n) für E [V (n)].
Pn−1
2
Dann gilt f (n) ≤ n + n k =bn/2c f (k )
Wir wollen prüfen, ob es ein c > 0 gibt, so dass f (n) ≤ cn.
Pn−1
2
Also: f (n) ≤ n + n k =bn/2c c · k [laut Annahme]
Pn−1
Pbn/2c−1 2c
=n+ n
k
k =1 k −
k =1
= n + 2nc n(n2−1) − bn/2c(b2n/2c−1)
E [V (n)] ≤ n −1 +
2· n1
Pn−1
k =bn/2c
E [V (k )]
8-9
Substitutionsmethode
Wir schreiben f (n) für E [V (n)].
Pn−1
2
Dann gilt f (n) ≤ n + n k =bn/2c f (k )
Wir wollen prüfen, ob es ein c > 0 gibt, so dass f (n) ≤ cn.
Pn−1
2
Also: f (n) ≤ n + n k =bn/2c c · k [laut Annahme]
Pn−1
Pbn/2c−1 2c
=n+ n
k
k =1 k −
k =1
= n + 2nc n(n2−1) − bn/2c(b2n/2c−1)
≤n+
E [V (n)] ≤ n −1 +
2· n1
c
n
n(n − 1) − (n/2 − 1)(n/2 − 2)
Pn−1
k =bn/2c
E [V (k )]
8-10
Substitutionsmethode
Wir schreiben f (n) für E [V (n)].
Pn−1
2
Dann gilt f (n) ≤ n + n k =bn/2c f (k )
Wir wollen prüfen, ob es ein c > 0 gibt, so dass f (n) ≤ cn.
Pn−1
2
Also: f (n) ≤ n + n k =bn/2c c · k [laut Annahme]
Pn−1
Pbn/2c−1 2c
=n+ n
k
k =1 k −
k =1
= n + 2nc n(n2−1) − bn/2c(b2n/2c−1)
≤n+
c
n
n(n − 1) − (n/2 − 1)(n/2 − 2)
<n+c ·
E [V (n)] ≤ n −1 +
2· n1
Pn−1
3n+2
4
k =bn/2c
E [V (k )]
8-11
Substitutionsmethode
Wir schreiben f (n) für E [V (n)].
Pn−1
2
Dann gilt f (n) ≤ n + n k =bn/2c f (k )
Wir wollen prüfen, ob es ein c > 0 gibt, so dass f (n) ≤ cn.
Pn−1
2
Also: f (n) ≤ n + n k =bn/2c c · k [laut Annahme]
Pn−1
Pbn/2c−1 2c
=n+ n
k
k =1 k −
k =1
= n + 2nc n(n2−1) − bn/2c(b2n/2c−1)
≤n+
c
n
n(n − 1) − (n/2 − 1)(n/2 − 2)
<n+c ·
E [V (n)] ≤ n −1 +
2· n1
Pn−1
3n+2
4
k =bn/2c
= cn − (c ·
E [V (k )]
n−2
4
− n)
8-12
Substitutionsmethode
Wir schreiben f (n) für E [V (n)].
Pn−1
2
Dann gilt f (n) ≤ n + n k =bn/2c f (k )
Wir wollen prüfen, ob es ein c > 0 gibt, so dass f (n) ≤ cn.
Pn−1
2
Also: f (n) ≤ n + n k =bn/2c c · k [laut Annahme]
Pn−1
Pbn/2c−1 2c
=n+ n
k
k =1 k −
k =1
= n + 2nc n(n2−1) − bn/2c(b2n/2c−1)
≤n+
c
n
n(n − 1) − (n/2 − 1)(n/2 − 2)
<n+c ·
3n+2
4
= cn − (c ·
≤ cn
E [V (n)] ≤ n −1 +
2· n1
Pn−1
k =bn/2c
E [V (k )]
n−2
4
− n)
8-13
Substitutionsmethode
Wir schreiben f (n) für E [V (n)].
Pn−1
2
Dann gilt f (n) ≤ n + n k =bn/2c f (k )
Wir wollen prüfen, ob es ein c > 0 gibt, so dass f (n) ≤ cn.
Pn−1
2
Also: f (n) ≤ n + n k =bn/2c c · k [laut Annahme]
Pn−1
Pbn/2c−1 2c
=n+ n
k
k =1 k −
k =1
= n + 2nc n(n2−1) − bn/2c(b2n/2c−1)
≤n+
c
n
n(n − 1) − (n/2 − 1)(n/2 − 2)
<n+c ·
3n+2
4
= cn − (c ·
≤ cn
E [V (n)] ≤ n −1 +
2· n1
Pn−1
k =bn/2c
E [V (k )]
n−2
4
?!
− n) ≥ 0
8-14
Substitutionsmethode
Wir schreiben f (n) für E [V (n)].
Pn−1
2
Dann gilt f (n) ≤ n + n k =bn/2c f (k )
Wir wollen prüfen, ob es ein c > 0 gibt, so dass f (n) ≤ cn.
Pn−1
2
Also: f (n) ≤ n + n k =bn/2c c · k [laut Annahme]
Pn−1
Pbn/2c−1 2c
=n+ n
k
k =1 k −
k =1
= n + 2nc n(n2−1) − bn/2c(b2n/2c−1)
≤n+
c
n
n(n − 1) − (n/2 − 1)(n/2 − 2)
< n + c · 3n4+2 = cn − (c ·
≤ cn falls n(c − 4) ≥ 2c
E [V (n)] ≤ n −1 +
2· n1
Pn−1
k =bn/2c
E [V (k )]
n−2
4
?!
− n) ≥ 0
8-15
Substitutionsmethode
Wir schreiben f (n) für E [V (n)].
Pn−1
2
Dann gilt f (n) ≤ n + n k =bn/2c f (k )
Wir wollen prüfen, ob es ein c > 0 gibt, so dass f (n) ≤ cn.
Pn−1
2
Also: f (n) ≤ n + n k =bn/2c c · k [laut Annahme]
Pn−1
Pbn/2c−1 2c
=n+ n
k
k =1 k −
k =1
= n + 2nc n(n2−1) − bn/2c(b2n/2c−1)
≤n+
c
n
n(n − 1) − (n/2 − 1)(n/2 − 2)
?!
≥0
< n + c · 3n4+2 = cn − (c · n−2
−
n
)
4
2c
≤ cn falls n(c − 4) ≥ 2c d.h. n ≥ c −4
E [V (n)] ≤ n −1 +
2· n1
Pn−1
k =bn/2c
E [V (k )]
8-16
Substitutionsmethode
Wir schreiben f (n) für E [V (n)].
Pn−1
2
Dann gilt f (n) ≤ n + n k =bn/2c f (k )
Wir wollen prüfen, ob es ein c > 0 gibt, so dass f (n) ≤ cn.
Pn−1
2
Also: f (n) ≤ n + n k =bn/2c c · k [laut Annahme]
Pn−1
Pbn/2c−1 2c
=n+ n
k
k =1 k −
k =1
= n + 2nc n(n2−1) − bn/2c(b2n/2c−1)
≤n+
c
n
n(n − 1) − (n/2 − 1)(n/2 − 2)
?!
≥0
< n + c · 3n4+2 = cn − (c · n−2
−
n
)
4
2c
≤ cn falls n(c − 4) ≥ 2c d.h. n ≥ c −4
c >4
E [V (n)] ≤ n −1 +
2· n1
Pn−1
k =bn/2c
E [V (k )]
8-17
Substitutionsmethode
Wir schreiben f (n) für E [V (n)].
Pn−1
2
Dann gilt f (n) ≤ n + n k =bn/2c f (k )
Wir wollen prüfen, ob es ein c > 0 gibt, so dass f (n) ≤ cn.
Pn−1
2
Also: f (n) ≤ n + n k =bn/2c c · k [laut Annahme]
Pn−1
Pbn/2c−1 2c
=n+ n
k
k =1 k −
k =1
= n + 2nc n(n2−1) − bn/2c(b2n/2c−1)
≤n+
c
n
n(n − 1) − (n/2 − 1)(n/2 − 2)
?!
≥0
< n + c · 3n4+2 = cn − (c · n−2
−
n
)
4
2c
≤ cn falls n(c − 4) ≥ 2c d.h. n ≥ c −4
E [V (n)] ≤ n −1 +
2· n1
Pn−1
k =bn/2c
c >4
c
:=
z }| {
E [V (k )] ≤ (4 + ε)n
8-18
Substitutionsmethode
Wir schreiben f (n) für E [V (n)].
Pn−1
2
Dann gilt f (n) ≤ n + n k =bn/2c f (k )
Wir wollen prüfen, ob es ein c > 0 gibt, so dass f (n) ≤ cn.
Pn−1
2
Also: f (n) ≤ n + n k =bn/2c c · k [laut Annahme]
Pn−1
Pbn/2c−1 2c
=n+ n
k
k =1 k −
k =1
= n + 2nc n(n2−1) − bn/2c(b2n/2c−1)
≤n+
c
n
n(n − 1) − (n/2 − 1)(n/2 − 2)
?!
≥0
< n + c · 3n4+2 = cn − (c · n−2
−
n
)
4
2c
≤ cn falls n(c − 4) ≥ 2c d.h. n ≥ c −4
E [V (n)] ≤ n −1 +
2· n1
Pn−1
k =bn/2c
c >4
c
:=
z }| { h falls i
E [V (k )] ≤ (4 + ε)n
n≥
8+2ε
ε
8-19
Substitutionsmethode
Wir schreiben f (n) für E [V (n)].
Pn−1
2
Dann gilt f (n) ≤ n + n k =bn/2c f (k )
Wir wollen prüfen, ob es ein c > 0 gibt, so dass f (n) ≤ cn.
Pn−1
2
Also: f (n) ≤ n + n k =bn/2c c · k [laut Annahme]
Pn−1
Pbn/2c−1 2c
=n+ n
k
k =1 k −
k =1
= n + 2nc n(n2−1) − bn/2c(b2n/2c−1)
≤n+
Für jedes ε > 0 gilt:
E [V (n)] ≤ n −1 +
c
n
n(n − 1) − (n/2 − 1)(n/2 − 2)
?!
≥0
< n + c · 3n4+2 = cn − (c · n−2
−
n
)
4
2c
≤ cn falls n(c − 4) ≥ 2c d.h. n ≥ c −4
2· n1
Pn−1
k =bn/2c
c >4
c
:=
z }| { h falls i
E [V (k )] ≤ (4 + ε)n
n≥
8+2ε
ε
9
Ergebnis und Diskussion
Satz.
Das Auswahlproblem kann in erwartet linearer Zeit
gelöst werden.
9
Ergebnis und Diskussion
Satz.
Genauer:
Das Auswahlproblem kann in erwartet linearer Zeit
gelöst werden.
9
Ergebnis und Diskussion
Satz.
Das Auswahlproblem kann in erwartet linearer Zeit
gelöst werden.
Genauer: Für jedes ε > 0 gilt, dass man in einer Folge von
n ≥ ε8 + 2 Zahlen die i .-kleinste Zahl (1 ≤ i ≤ n) mit
erwartet (4 + ε)n Vergleichen finden kann.
9
Ergebnis und Diskussion
Satz.
Das Auswahlproblem kann in erwartet linearer Zeit
gelöst werden.
Genauer: Für jedes ε > 0 gilt, dass man in einer Folge von
n ≥ ε8 + 2 Zahlen die i .-kleinste Zahl (1 ≤ i ≤ n) mit
erwartet (4 + ε)n Vergleichen finden kann.
Frage:
9
Ergebnis und Diskussion
Satz.
Das Auswahlproblem kann in erwartet linearer Zeit
gelöst werden.
Genauer: Für jedes ε > 0 gilt, dass man in einer Folge von
n ≥ ε8 + 2 Zahlen die i .-kleinste Zahl (1 ≤ i ≤ n) mit
erwartet (4 + ε)n Vergleichen finden kann.
Frage:
Geht das auch deterministisch, d.h. ohne Zufall?
9
Ergebnis und Diskussion
Satz.
Das Auswahlproblem kann in erwartet linearer Zeit
gelöst werden.
Genauer: Für jedes ε > 0 gilt, dass man in einer Folge von
n ≥ ε8 + 2 Zahlen die i .-kleinste Zahl (1 ≤ i ≤ n) mit
erwartet (4 + ε)n Vergleichen finden kann.
Frage:
Geht das auch deterministisch, d.h. ohne Zufall?
M.a.W.: Kann man das Auswahlproblem auch im
schlechtesten Fall in linearer Zeit lösen?
10
Vorbereitung
Wir verwenden wieder Teile-und-Herrsche –
10
Vorbereitung
Wir verwenden wieder Teile-und-Herrsche –
aber diesmal mit einer garantiert guten Aufteilung in Teilfelder.
10
Vorbereitung
Wir verwenden wieder Teile-und-Herrsche –
aber diesmal mit einer garantiert guten Aufteilung in Teilfelder.
10
Vorbereitung
Wir verwenden wieder Teile-und-Herrsche –
aber diesmal mit einer garantiert guten Aufteilung in Teilfelder.
d.h. balanciert:
10
Vorbereitung
Wir verwenden wieder Teile-und-Herrsche –
aber diesmal mit einer garantiert guten Aufteilung in Teilfelder.
d.h. balanciert:
jede Seite sollte ≥ γ n Elem. enthalten, für ein festes 0 < γ ≤ 12 .
10
Vorbereitung
Wir verwenden wieder Teile-und-Herrsche –
aber diesmal mit einer garantiert guten Aufteilung in Teilfelder.
d.h. balanciert:
jede Seite sollte ≥ γ n Elem. enthalten, für ein festes 0 < γ ≤ 12 .
Partition (A, `, r )
pivot = A[r ]
i =`−1
for j = ` to r − 1 do
if A[j ] ≤ pivot then
i =i +1
Swap(A, i , j )
Swap(A, i + 1, r )
return i + 1
10
Vorbereitung
Wir verwenden wieder Teile-und-Herrsche –
aber diesmal mit einer garantiert guten Aufteilung in Teilfelder.
d.h. balanciert:
jede Seite sollte ≥ γ n Elem. enthalten, für ein festes 0 < γ ≤ 12 .
Partition0(A, `, r )
pivot = A[r ]
i =`−1
for j = ` to r − 1 do
if A[j ] ≤ pivot then
i =i +1
Swap(A, i , j )
Swap(A, i + 1, r )
return i + 1
10
Vorbereitung
Wir verwenden wieder Teile-und-Herrsche –
aber diesmal mit einer garantiert guten Aufteilung in Teilfelder.
d.h. balanciert:
jede Seite sollte ≥ γ n Elem. enthalten, für ein festes 0 < γ ≤ 12 .
Partition0(A, `, r ) , pivot)
pivot = A[r ]
i =`−1
for j = ` to r − 1 do
if A[j ] ≤ pivot then
i =i +1
Swap(A, i , j )
Swap(A, i + 1, r )
return i + 1
10
Vorbereitung
Wir verwenden wieder Teile-und-Herrsche –
aber diesmal mit einer garantiert guten Aufteilung in Teilfelder.
d.h. balanciert:
jede Seite sollte ≥ γ n Elem. enthalten, für ein festes 0 < γ ≤ 12 .
Partition0(A, `, r ) , pivot)
pivot = A[r ]
i =`−1
for j = ` to r − 1 do
if A[j ] ≤ pivot then
i =i +1
Swap(A, i , j )
Swap(A, i + 1, r )
return i + 1
10
Vorbereitung
Wir verwenden wieder Teile-und-Herrsche –
aber diesmal mit einer garantiert guten Aufteilung in Teilfelder.
d.h. balanciert:
jede Seite sollte ≥ γ n Elem. enthalten, für ein festes 0 < γ ≤ 12 .
Wir gehen für die Analyse
wieder davon aus, dass alle
Elemente verschieden sind.
Partition0(A, `, r ) , pivot)
pivot = A[r ]
i =`−1
for j = ` to r − 1 do
if A[j ] ≤ pivot then
i =i +1
Swap(A, i , j )
Swap(A, i + 1, r )
return i + 1
11-1
Select: deterministisch
Select(A, `, r , i )
1. Teile die n Elem. der Eingabe in bn/5c 5er-Gruppen und
eine Gruppe mit den restlichen (n mod 5) Elem.
11-2
Select: deterministisch
Select(A, `, r , i )
1. Teile die n Elem. der Eingabe in bn/5c 5er-Gruppen und
eine Gruppe mit den restlichen (n mod 5) Elem.
11-3
Select: deterministisch
Select(A, `, r , i )
1. Teile die n Elem. der Eingabe in bn/5c 5er-Gruppen und
eine Gruppe mit den restlichen (n mod 5) Elem.
2. Sortiere jede der dn/5e Gruppen und bestimme ihren Median.
11-4
Select: deterministisch
Select(A, `, r , i )
1. Teile die n Elem. der Eingabe in bn/5c 5er-Gruppen und
eine Gruppe mit den restlichen (n mod 5) Elem.
2. Sortiere jede der dn/5e Gruppen und bestimme ihren Median.
11-5
Select: deterministisch
Select(A, `, r , i )
1. Teile die n Elem. der Eingabe in bn/5c 5er-Gruppen und
eine Gruppe mit den restlichen (n mod 5) Elem.
2. Sortiere jede der dn/5e Gruppen und bestimme ihren Median.
3. Bestimme rekursiv den Median x der Gruppen-Mediane.
11-6
Select: deterministisch
Select(A, `, r , i )
1. Teile die n Elem. der Eingabe in bn/5c 5er-Gruppen und
eine Gruppe mit den restlichen (n mod 5) Elem.
2. Sortiere jede der dn/5e Gruppen und bestimme ihren Median.
3. Bestimme rekursiv den Median x der Gruppen-Mediane.
x
11-7
Select: deterministisch
Select(A, `, r , i )
1. Teile die n Elem. der Eingabe in bn/5c 5er-Gruppen und
eine Gruppe mit den restlichen (n mod 5) Elem.
2. Sortiere jede der dn/5e Gruppen und bestimme ihren Median.
3. Bestimme rekursiv den Median x der Gruppen-Mediane.
4. m = Partition0 (A, `, r , x )
x
11-8
Select: deterministisch
Select(A, `, r , i )
1. Teile die n Elem. der Eingabe in bn/5c 5er-Gruppen und
eine Gruppe mit den restlichen (n mod 5) Elem.
2. Sortiere jede der dn/5e Gruppen und bestimme ihren Median.
3. Bestimme rekursiv den Median x der Gruppen-Mediane.
4. m = Partition0 (A, `, r , x )
x
11-9
Select: deterministisch
Select(A, `, r , i )
1. Teile die n Elem. der Eingabe in bn/5c 5er-Gruppen und
eine Gruppe mit den restlichen (n mod 5) Elem.
2. Sortiere jede der dn/5e Gruppen und bestimme ihren Median.
3. Bestimme rekursiv den Median x der Gruppen-Mediane.
4. m = Partition0 (A, `, r , x )
x
11-1
Select: deterministisch
Select(A, `, r , i )
1. Teile die n Elem. der Eingabe in bn/5c 5er-Gruppen und
eine Gruppe mit den restlichen (n mod 5) Elem.
2. Sortiere jede der dn/5e Gruppen und bestimme ihren Median.
3. Bestimme rekursiv den Median x der Gruppen-Mediane.
4. m = Partition0 (A, `, r , x )
x
>
11-1
Select: deterministisch
Select(A, `, r , i )
1. Teile die n Elem. der Eingabe in bn/5c 5er-Gruppen und
eine Gruppe mit den restlichen (n mod 5) Elem.
2. Sortiere jede der dn/5e Gruppen und bestimme ihren Median.
3. Bestimme rekursiv den Median x der Gruppen-Mediane.
4. m = Partition0 (A, `, r , x )
≤
x
>
11-1
Select: deterministisch
Select(A, `, r , i )
1. Teile die n Elem. der Eingabe in bn/5c 5er-Gruppen und
eine Gruppe mit den restlichen (n mod 5) Elem.
2. Sortiere jede der dn/5e Gruppen und bestimme ihren Median.
3. Bestimme rekursiv den Median x der Gruppen-Mediane.
4. m = Partition0 (A, `, r , x ) ; k = m − ` + 1
≤
x
>
11-1
Select: deterministisch
Select(A, `, r , i )
1. Teile die n Elem. der Eingabe in bn/5c 5er-Gruppen und
eine Gruppe mit den restlichen (n mod 5) Elem.
2. Sortiere jede der dn/5e Gruppen und bestimme ihren Median.
3. Bestimme rekursiv den Median x der Gruppen-Mediane.
4. m = Partition0 (A, `, r , x ) ; k = m − ` + 1
// A[m] k .-kleinstes El.
≤
x
>
11-1
Select: deterministisch
Select(A, `, r , i )
1. Teile die n Elem. der Eingabe in bn/5c 5er-Gruppen und
eine Gruppe mit den restlichen (n mod 5) Elem.
2. Sortiere jede der dn/5e Gruppen und bestimme ihren Median.
3. Bestimme rekursiv den Median x der Gruppen-Mediane.
4. m = Partition0 (A, `, r , x ) ; k = m − ` + 1
5. if i == k then return A[m]
else
if i < k then
return Select(A, `, m − 1, i)
else
return Select(A, m + 1, r , i − k)
// A[m] k .-kleinstes El.
≤
x
>
11-1
Select: deterministisch
Select(A, `, r , i )
1. Teile die n Elem. der Eingabe in bn/5c 5er-Gruppen und
eine Gruppe mit den restlichen (n mod 5) Elem.
2. Sortiere jede der dn/5e Gruppen und bestimme ihren Median.
3. Bestimme rekursiv den Median x der Gruppen-Mediane.
4. m = Partition0 (A, `, r , x ) ; k = m − ` + 1
5. if i == k then return A[m]
|{z}
else
x
if i < k then
return Select(A, `, m − 1, i)
else
return Select(A, m + 1, r , i − k)
// A[m] k .-kleinstes El.
≤
x
>
11-1
Select: deterministisch
Select(A, `, r , i )
1. Teile die n Elem. der Eingabe in bn/5c 5er-Gruppen und
eine Gruppe mit den restlichen (n mod 5) Elem.
2. Sortiere jede der dn/5e Gruppen und bestimme ihren Median.
3. Bestimme rekursiv den Median x der Gruppen-Mediane.
4. m = Partition0 (A, `, r , x ) ; k = m − ` + 1
5. if i == k then return A[m]
|{z}
else
x
if i < k then
return Select(A, `, m − 1, i)
else
return Select(A, m + 1, r , i − k)
Anzahl
≥
// A[m] k .-kleinstes El.
≤
x
>
11-1
Select: deterministisch
Select(A, `, r , i )
1. Teile die n Elem. der Eingabe in bn/5c 5er-Gruppen und
eine Gruppe mit den restlichen (n mod 5) Elem.
2. Sortiere jede der dn/5e Gruppen und bestimme ihren Median.
3. Bestimme rekursiv den Median x der Gruppen-Mediane.
4. m = Partition0 (A, `, r , x ) ; k = m − ` + 1
5. if i == k then return A[m]
|{z}
else
x
if i < k then
return Select(A, `, m − 1, i)
else
return Select(A, m + 1, r , i − k)
1 n Anzahl
≥ 3 2 5 −2
// A[m] k .-kleinstes El.
≤
x
>
11-1
Select: deterministisch
Select(A, `, r , i )
1. Teile die n Elem. der Eingabe in bn/5c 5er-Gruppen und
eine Gruppe mit den restlichen (n mod 5) Elem.
2. Sortiere jede der dn/5e Gruppen und bestimme ihren Median.
3. Bestimme rekursiv den Median x der Gruppen-Mediane.
4. m = Partition0 (A, `, r , x ) ; k = m − ` + 1
5. if i == k then return A[m]
|{z}
else
x
if i < k then
return Select(A, `, m − 1, i)
else
return Select(A, m + 1, r , i − k)
1 n Anzahl
≥ 3 2 5 − 2 ≥ 310n − 6
// A[m] k .-kleinstes El.
≤
x
>
11-1
Select: deterministisch
Select(A, `, r , i )
1. Teile die n Elem. der Eingabe in bn/5c 5er-Gruppen und
eine Gruppe mit den restlichen (n mod 5) Elem.
2. Sortiere jede der dn/5e Gruppen und bestimme ihren Median.
3. Bestimme rekursiv den Median x der Gruppen-Mediane.
4. m = Partition0 (A, `, r , x ) ; k = m − ` + 1
5. if i == k then return A[m]
|{z}
else
x
if i < k then
return Select(A, `, m − 1, i)
else
return Select(A, m + 1, r , i − k)
1 n Anzahl
≥ 3 2 5 − 2 ≥ 310n − 6
// A[m] k .-kleinstes El.
≤
x
>
11-2
Select: deterministisch
Select(A, `, r , i )
1. Teile die n Elem. der Eingabe in bn/5c 5er-Gruppen und
eine Gruppe mit den restlichen (n mod 5) Elem.
2. Sortiere jede der dn/5e Gruppen und bestimme ihren Median.
3. Bestimme rekursiv den Median x der Gruppen-Mediane.
4. m = Partition0 (A, `, r , x ) ; k = m − ` + 1
5. if i == k then return A[m]
|{z}
else
x
if i < k then
return Select(A,|`, m{z− 1,
} i)
else
z
}|
{
return Select(A, m + 1, r , i − k)
1 n Anzahl
≥ 3 2 5 − 2 ≥ 310n − 6
// A[m] k .-kleinstes El.
≤
x
>
11-2
Select: deterministisch
Select(A, `, r , i )
1. Teile die n Elem. der Eingabe in bn/5c 5er-Gruppen und
eine Gruppe mit den restlichen (n mod 5) Elem.
2. Sortiere jede der dn/5e Gruppen und bestimme ihren Median.
3. Bestimme rekursiv den Median x der Gruppen-Mediane.
4. m = Partition0 (A, `, r , x ) ; k = m − ` + 1
5. if i == k then return A[m]
|{z}
else
x
if i < k then
return Select(A,|`, m{z− 1,
} i)
≤ 7n/10 + 6 Elem.
else
z
}|
{
return Select(A, m + 1, r , i − k)
1 n Anzahl
≥ 3 2 5 − 2 ≥ 310n − 6
// A[m] k .-kleinstes El.
≤
x
>
12-1
Laufzeit-Analyse
Beob.
Es genügt wieder, Vergleiche zu zählen!
12-2
Laufzeit-Analyse
Beob.
Es genügt wieder, Vergleiche zu zählen!
Partition0 : ≈ 1n
12-3
Laufzeit-Analyse
Beob.
Es genügt wieder, Vergleiche zu zählen!
Partition0 : ≈ 1n , Sortieren: ≈ n5 · VIS (5) = 2n Vgl.
12-4
Laufzeit-Analyse
Beob.
Es genügt wieder, Vergleiche zu zählen!
Partition0 : ≈ 1n , Sortieren: ≈ n5 · VIS (5) = 2n Vgl.
Ansatz: (
V (n) ≤
V (dn/5e) + V (7n/10 + 6) + 3n
O (1)
falls n ≥ n0 ,
sonst.
12-5
Laufzeit-Analyse
Beob.
Es genügt wieder, Vergleiche zu zählen!
Partition0 : ≈ 1n , Sortieren: ≈ n5 · VIS (5) = 2n Vgl.
3
Ansatz: (zSchritt
}| {
V (dn/5e) + V (7n/10 + 6) + 3n
V (n) ≤
|
{z
}
O (1)
Schritt 5
falls n ≥ n0 ,
sonst.
12-6
Laufzeit-Analyse
Beob.
Es genügt wieder, Vergleiche zu zählen!
Partition0 : ≈ 1n , Sortieren: ≈ n5 · VIS (5) = 2n Vgl.
Ansatz: (
V (n) ≤
V (dn/5e) + V (7n/10 + 6) + 3n
O (1)
falls n ≥ n0 ,
sonst.
Behauptung:
Es gibt c , n0 > 0, so dass für alle n ≥ n0 gilt: V (n) ≤ cn.
12-7
Laufzeit-Analyse
Beob.
Es genügt wieder, Vergleiche zu zählen!
Partition0 : ≈ 1n , Sortieren: ≈ n5 · VIS (5) = 2n Vgl.
Ansatz: (
V (n) ≤
V (dn/5e) + V (7n/10 + 6) + 3n
O (1)
falls n ≥ n0 ,
sonst.
Behauptung:
Es gibt c , n0 > 0, so dass für alle n ≥ n0 gilt: V (n) ≤ cn.
⇒ V (n) ≤ c · (n/5 + 1) + c · (7n/10 + 6) + 3n
12-8
Laufzeit-Analyse
Beob.
Es genügt wieder, Vergleiche zu zählen!
Partition0 : ≈ 1n , Sortieren: ≈ n5 · VIS (5) = 2n Vgl.
Ansatz: (
V (n) ≤
V (dn/5e) + V (7n/10 + 6) + 3n
O (1)
falls n ≥ n0 ,
sonst.
Behauptung:
Es gibt c , n0 > 0, so dass für alle n ≥ n0 gilt: V (n) ≤ cn.
⇒ V (n) ≤ c · (n/5 + 1) + c · (7n/10 + 6) + 3n
= c · (9n/10 + 7) + 3n
12-9
Laufzeit-Analyse
Beob.
Es genügt wieder, Vergleiche zu zählen!
Partition0 : ≈ 1n , Sortieren: ≈ n5 · VIS (5) = 2n Vgl.
Ansatz: (
V (n) ≤
V (dn/5e) + V (7n/10 + 6) + 3n
O (1)
falls n ≥ n0 ,
sonst.
Behauptung:
Es gibt c , n0 > 0, so dass für alle n ≥ n0 gilt: V (n) ≤ cn.
⇒ V (n) ≤ c · (n/5 + 1) + c · (7n/10 + 6) + 3n
= c · (9n/10 + 7) + 3n = cn − c · (n/10 − 7) − 3n
12-1
Laufzeit-Analyse
Beob.
Es genügt wieder, Vergleiche zu zählen!
Partition0 : ≈ 1n , Sortieren: ≈ n5 · VIS (5) = 2n Vgl.
Ansatz: (
V (n) ≤
V (dn/5e) + V (7n/10 + 6) + 3n
O (1)
falls n ≥ n0 ,
sonst.
Behauptung:
Es gibt c , n0 > 0, so dass für alle n ≥ n0 gilt: V (n) ≤ cn.
⇒ V (n) ≤ c · (n/5 + 1) + c · (7n/10 + 6) + 3n
= c · (9n/10 + 7) + 3n = cn − c · (n/10 − 7) − 3n
12-1
Laufzeit-Analyse
Beob.
Es genügt wieder, Vergleiche zu zählen!
Partition0 : ≈ 1n , Sortieren: ≈ n5 · VIS (5) = 2n Vgl.
Ansatz: (
V (n) ≤
V (dn/5e) + V (7n/10 + 6) + 3n
O (1)
falls n ≥ n0 ,
sonst.
Behauptung:
Es gibt c , n0 > 0, so dass für alle n ≥ n0 gilt: V (n) ≤ cn.
⇒ V (n) ≤ c · (n/5 + 1) + c · (7n/10 + 6) + 3n
?!
≥ 0
= c · (9n/10 + 7) + 3n = cn − c · (n/10 − 7) − 3n
12-1
Laufzeit-Analyse
Beob.
Es genügt wieder, Vergleiche zu zählen!
Partition0 : ≈ 1n , Sortieren: ≈ n5 · VIS (5) = 2n Vgl.
Ansatz: (
V (n) ≤
V (dn/5e) + V (7n/10 + 6) + 3n
O (1)
falls n ≥ n0 ,
sonst.
Behauptung:
Es gibt c , n0 > 0, so dass für alle n ≥ n0 gilt: V (n) ≤ cn.
⇒ V (n) ≤ c · (n/5 + 1) + c · (7n/10 + 6) + 3n
?!
≥ 0
= c · (9n/10 + 7) + 3n = cn − c · (n/10 − 7) − 3n
falls n · (c − 30) ≥ 70c
12-1
Laufzeit-Analyse
Beob.
Es genügt wieder, Vergleiche zu zählen!
Partition0 : ≈ 1n , Sortieren: ≈ n5 · VIS (5) = 2n Vgl.
Ansatz: (
V (n) ≤
V (dn/5e) + V (7n/10 + 6) + 3n
O (1)
falls n ≥ n0 ,
sonst.
Behauptung:
Es gibt c , n0 > 0, so dass für alle n ≥ n0 gilt: V (n) ≤ cn.
⇒ V (n) ≤ c · (n/5 + 1) + c · (7n/10 + 6) + 3n
?!
≥ 0
= c · (9n/10 + 7) + 3n = cn − c · (n/10 − 7) − 3n
falls n · (c − 30) ≥ 70c , d.h. falls n ≥
70c
c −30
und c > 30.
12-1
Laufzeit-Analyse
Beob.
Es genügt wieder, Vergleiche zu zählen!
Partition0 : ≈ 1n , Sortieren: ≈ n5 · VIS (5) = 2n Vgl.
Ansatz: (
V (n) ≤
V (dn/5e) + V (7n/10 + 6) + 3n
O (1)
falls n ≥ n0 ,
sonst.
Behauptung:
Es gibt c , n0 > 0, so dass für alle n ≥ n0 gilt: V (n) ≤ cn.
⇒ V (n) ≤ c · (n/5 + 1) + c · (7n/10 + 6) + 3n
= c · (9n/10 + 7) + 3n = cn − c · (n/10 − 7) − 3n
falls n · (c − 30) ≥ 70c , d.h. falls n ≥
70c
c −30
und c > 30.
12-1
Laufzeit-Analyse
Beob.
Es genügt wieder, Vergleiche zu zählen!
Partition0 : ≈ 1n , Sortieren: ≈ n5 · VIS (5) = 2n Vgl.
Ansatz: (
V (n) ≤
V (dn/5e) + V (7n/10 + 6) + 3n
O (1)
falls n ≥ n0 ,
sonst.
Behauptung:
Es gibt c , n0 > 0, so dass für alle n ≥ n0 gilt: V (n) ≤ cn.
⇒ V (n) ≤ c · (n/5 + 1) + c · (7n/10 + 6) + 3n
= c · (9n/10 + 7) + 3n = cn − c · (n/10 − 7) − 3n
falls n · (c − 30) ≥ 70c , d.h. falls n ≥
⇒ für jedes ε > 0 und n ≥
2100
ε
70c
c −30
und c > 30.
+ 70 gilt: V (n) ≤ (30 + ε) · n
|
{z
c
}
12-1
Laufzeit-Analyse
Beob.
Es genügt wieder, Vergleiche zu zählen!
Partition0 : ≈ 1n , Sortieren: ≈ n5 · VIS (5) = 2n Vgl.
Ansatz: (
V (n) ≤
V (dn/5e) + V (7n/10 + 6) + 3n
O (1)
falls n ≥ n0 ,
sonst.
Behauptung:
Es gibt c , n0 > 0, so dass für alle n ≥ n0 gilt: V (n) ≤ cn.
⇒ V (n) ≤ c · (n/5 + 1) + c · (7n/10 + 6) + 3n
= c · (9n/10 + 7) + 3n = cn − c · (n/10 − 7) − 3n
falls n · (c − 30) ≥ 70c , d.h. falls n ≥
⇒ für jedes ε > 0 und n ≥
2100
ε
70c
c −30
und c > 30.
+ 70 gilt: V (n) ≤ (30 + ε) · n
|
{z
c
}
12-1
Laufzeit-Analyse
Beob.
Es genügt wieder, Vergleiche zu zählen!
Partition0 : ≈ 1n , Sortieren: ≈ n5 · VIS (5) = 2n Vgl.
Ansatz: (
V (n) ≤
V (dn/5e) + V (7n/10 + 6) + 3n
O (1)
falls n ≥ n0 ,
sonst.
Behauptung:
Es gibt c , n0 > 0, so dass für alle n ≥ n0 gilt: V (n) ≤ cn.
⇒ V (n) ≤ c · (n/5 + 1) + c · (7n/10 + 6) + 3n
= c · (9n/10 + 7) + 3n = cn − c · (n/10 − 7) − 3n
falls n · (c − 30) ≥ 70c , d.h. falls n ≥
⇒ für jedes ε > 0 und n ≥
2100
ε
70c
c −30
und c > 30.
+ 70 gilt: V (n) ≤ (30 + ε) · n
12-1
Laufzeit-Analyse
Beob.
Es genügt wieder, Vergleiche zu zählen!
Partition0 : ≈ 1n , Sortieren: ≈ n5 · VIS (5) = 2n Vgl.
Ansatz: (
V (n) ≤
V (dn/5e) + V (7n/10 + 6) + 3n
O (1)
falls n ≥ n0 ,
sonst.
Behauptung:
Es gibt c , n0 > 0, so dass für alle n ≥ n0 gilt: V (n) ≤ cn.
⇒ V (n) ≤ c · (n/5 + 1) + c · (7n/10 + 6) + 3n
= c · (9n/10 + 7) + 3n = cn − c · (n/10 − 7) − 3n
falls n · (c − 30) ≥ 70c , d.h. falls n ≥
⇒ für jedes ε > 0 und n ≥
2100
ε
70c
c −30
und c > 30.
+ 70 gilt: V (n) ≤ (30 + ε) · n
12-1
Laufzeit-Analyse
Beob.
Es genügt wieder, Vergleiche zu zählen!
Partition0 : ≈ 1n , Sortieren: ≈ n5 · VIS (5) = 2n Vgl.
Ansatz: (
V (n) ≤
V (dn/5e) + V (7n/10 + 6) + 3n
O (1)
falls n ≥ n0 ,
sonst.
Behauptung:
Es gibt c , n0 > 0, so dass für alle n ≥ n0 gilt: V (n) ≤ cn.
⇒ V (n) ≤ c · (n/5 + 1) + c · (7n/10 + 6) + 3n
= c · (9n/10 + 7) + 3n = cn − c · (n/10 − 7) − 3n
falls n · (c − 30) ≥ 70c , d.h. falls n ≥
⇒ für jedes ε > 0 und n ≥
2100
ε
70c
c −30
und c > 30.
+ 70 gilt: V (n) ≤ (30 + ε) · n
Kann man das
verbessern?
Laufzeit-Analyse
Beob.
Es genügt wieder, Vergleiche zu zählen!
Partition0 : ≈ 1n , Sortieren: ≈ n5 · VIS (5) = 2n Vgl.
Ansatz: (
V (n) ≤
V (dn/5e) + V (7n/10 + 6) + 3n
O (1)
falls n ≥ n0 ,
sonst.
Behauptung:
Es gibt c , n0 > 0, so dass für alle n ≥ n0 gilt: V (n) ≤ cn.
⇒ V (n) ≤ c · (n/5 + 1) + c · (7n/10 + 6) + 3n
= c · (9n/10 + 7) + 3n = cn − c · (n/10 − 7) − 3n
falls n · (c − 30) ≥ 70c , d.h. falls n ≥
⇒ für jedes ε > 0 und n ≥
2100
ε
70c
c −30
und c > 30.
+ 70 gilt: V (n) ≤ (30 + ε) · n
12-2
Kann man das
verbessern?
Laufzeit-Analyse
Beob.
Hausaufgabe!
Es genügt wieder, Vergleiche zu zählen!
Partition0 : ≈ 1n , Sortieren: ≈ n5 · VIS (5) = 2n Vgl.
Ansatz: (
V (n) ≤
12-2
V (dn/5e) + V (7n/10 + 6) + 3n
O (1)
falls n ≥ n0 ,
sonst.
Behauptung:
Es gibt c , n0 > 0, so dass für alle n ≥ n0 gilt: V (n) ≤ cn.
⇒ V (n) ≤ c · (n/5 + 1) + c · (7n/10 + 6) + 3n
= c · (9n/10 + 7) + 3n = cn − c · (n/10 − 7) − 3n
falls n · (c − 30) ≥ 70c , d.h. falls n ≥
⇒ für jedes ε > 0 und n ≥
2100
ε
70c
c −30
und c > 30.
+ 70 gilt: V (n) ≤ (30 + ε) · n
13
Ergebnis und Diskussion
Satz:
Das Auswahlproblem kann auch im schlechtesten
Fall in linearer Zeit gelöst werden.
13
Ergebnis und Diskussion
Satz:
Das Auswahlproblem kann auch im schlechtesten
Fall in linearer Zeit gelöst werden.
Genauer: Für jedes ε > 0 gilt, dass man in einer Folge von
n ≥ 2100/ε + 70 Zahlen die i .-kleinste Zahl mit
höchstens (30 + ε)n Vergleichen finden kann.
13
Ergebnis und Diskussion
Satz:
Das Auswahlproblem kann auch im schlechtesten
Fall in linearer Zeit gelöst werden.
Genauer: Für jedes ε > 0 gilt, dass man in einer Folge von
n ≥ 2100/ε + 70 Zahlen die i .-kleinste Zahl mit
höchstens (30 + ε)n Vergleichen finden kann.
Literatur:
Randomized Algorithms [Motwani+Raghavan, Cambridge U Press, ’95]
Algorithmen und Zufall [Vorlesungsskript, Jochen Geiger, Uni KL]
13
Ergebnis und Diskussion
Satz:
Das Auswahlproblem kann auch im schlechtesten
Fall in linearer Zeit gelöst werden.
Genauer: Für jedes ε > 0 gilt, dass man in einer Folge von
n ≥ 2100/ε + 70 Zahlen die i .-kleinste Zahl mit
höchstens (30 + ε)n Vergleichen finden kann.
Literatur:
Randomized Algorithms [Motwani+Raghavan, Cambridge U Press, ’95]
Algorithmen und Zufall [Vorlesungsskript, Jochen Geiger, Uni KL]
Der Algorithmus LazySelect [Floyd √
& Rivest, 1975] löst das
Auswahlproblem mit WK 1 − O (1/ 4 n) mit 32 n + o (n) Vgl.
13
Ergebnis und Diskussion
Satz:
Das Auswahlproblem kann auch im schlechtesten
Fall in linearer Zeit gelöst werden.
Genauer: Für jedes ε > 0 gilt, dass man in einer Folge von
n ≥ 2100/ε + 70 Zahlen die i .-kleinste Zahl mit
höchstens (30 + ε)n Vergleichen finden kann.
Literatur:
Randomized Algorithms [Motwani+Raghavan, Cambridge U Press, ’95]
Algorithmen und Zufall [Vorlesungsskript, Jochen Geiger, Uni KL]
Der Algorithmus LazySelect [Floyd √
& Rivest, 1975] löst das
Auswahlproblem mit WK 1 − O (1/ 4 n) mit 32 n + o (n) Vgl.
Die besten deterministischen Auswahl-Algorithmen (sehr
kompliziert!) benötigen 3n Vergleiche im schlechtesten Fall.
13
Ergebnis und Diskussion
Satz:
Das Auswahlproblem kann auch im schlechtesten
Fall in linearer Zeit gelöst werden.
Genauer: Für jedes ε > 0 gilt, dass man in einer Folge von
n ≥ 2100/ε + 70 Zahlen die i .-kleinste Zahl mit
höchstens (30 + ε)n Vergleichen finden kann.
Literatur:
Randomized Algorithms [Motwani+Raghavan, Cambridge U Press, ’95]
Algorithmen und Zufall [Vorlesungsskript, Jochen Geiger, Uni KL]
Der Algorithmus LazySelect [Floyd √
& Rivest, 1975] löst das
Auswahlproblem mit WK 1 − O (1/ 4 n) mit 32 n + o (n) Vgl.
Die besten deterministischen Auswahl-Algorithmen (sehr
kompliziert!) benötigen 3n Vergleiche im schlechtesten Fall.
Jeder deterministische Auswahl-Alg. benötigt im
schlechtesten Fall mindestens 2n Vergleiche.
13
Ergebnis und Diskussion
Satz:
Das Auswahlproblem kann auch im schlechtesten
Fall in linearer Zeit gelöst werden.
Genauer: Für jedes ε > 0 gilt, dass man in einer Folge von
n ≥ 2100/ε + 70 Zahlen die i .-kleinste Zahl mit
höchstens (30 + ε)n Vergleichen finden kann.
Literatur:
Randomized Algorithms [Motwani+Raghavan, Cambridge U Press, ’95]
Algorithmen und Zufall [Vorlesungsskript, Jochen Geiger, Uni KL]
Der Algorithmus LazySelect [Floyd √
& Rivest, 1975] löst das
Auswahlproblem mit WK 1 − O (1/ 4 n) mit 32 n + o (n) Vgl.
Die besten deterministischen Auswahl-Algorithmen (sehr
kompliziert!) benötigen 3n Vergleiche im schlechtesten Fall.
Jeder deterministische Auswahl-Alg. benötigt im
Zufall
hilft!
schlechtesten Fall mindestens 2n Vergleiche.
Herunterladen