Algorithmen und Datenstrukturen

Werbung
1
Algorithmen und Datenstrukturen
Wintersemester 2016/17
10. Vorlesung
Das Auswahlproblem
Prof. Dr. Alexander Wolff
Lehrstuhl für Informatik I
2-1
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-5
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-1
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-2
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-1
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-1
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-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-1
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
4
n
+
−→
= 1−2/
≤ cn falls c ≥ n4−2
4
n n→∞
Für jedes ε > 0 gilt:
c}|
:= { h
i
z
P
falls
n−1
1
E [V (n)] ≤ n −1 + 2· n k =bn/2c E [V (k )] ≤ (4 + ε)n n ≥ ε8 +2
9-6
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 –
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 -
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 -
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 -
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 -
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 c ≥
3n
n/10−7
=
30
1−70/n
−→
n→∞
12 -
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 c ≥
3n
n/10−7
=
30
1−70/n
⇒ für jedes ε > 0 und n ≥
−→
n→∞
2100
ε
30+
bzw. n ≥
70c
c −30 .
+ 70 gilt: V (n) ≤ (30 + ε) · n
|
{z
c
}
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 -
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 c ≥
3n
n/10−7
=
30
1−70/n
⇒ für jedes ε > 0 und n ≥
−→
n→∞
2100
ε
30+
bzw. n ≥
70c
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.
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