4 Greedy-Algorithmen (gierige Algorithmen)

Werbung
Andreas Jakoby
Universität zu Lübeck
Algorithmik WS 07/08
2. Vorlesung, 31.10.2007
4 Greedy-Algorithmen (gierige Algorithmen)
I
Greedy-Algorithmen werden oft für die exakte oder approximative
Lösung von Optimierungsproblemen verwendet.
I
Typischerweise konstruiert ein Greedy-Algorithmus eine Lösung
Komponente für Komponente, wobei der Wert einer einmal
gesetzten Komponente nie zurückgenommen wird.
I
Beispiele: die Algorithmus von Kruskal, die Konstruktion eines
Huffman-Codes und der Approximationsalgorithmus für das
Binpacking Problem Best-Fit.
24
Andreas Jakoby
Universität zu Lübeck
Algorithmik WS 07/08
2. Vorlesung, 31.10.2007
Philosophie von Greedy-Verfahren
I
Iterative Konstruktion einer Lösung unter Verwendung lokaler
Optimalitätskriterien.
I
Hoffnung: Lokale Optimalität führt auch zur globalen Optimalität —
oder zumindest zu einer guten Approximation.
I
Verschiedene lokale Kriterien führen zu verschiedenen Algorithmen.
Analysemethoden für Greedy-Verfahren
Um zu zeigen, dass ein Greedy-Verfahren eine optimale Lösung findet,
werden im wesentlichen zwei Analysemethoden eingesetzt:
1. the greedy algorithm stays ahead: In jedem Schritt ist die gefundene
partielle Lösung des Greedy-Verfahrens mindestens so gut wie jede
andere partielle Lösung.
2. exchange argument: Jede Lösung kann Schrittweise in die Lösung
des Greedy-Verfahrens transformiert werden, ohne dass hierbei die
Güte der Lösung abnimmt.
25
Andreas Jakoby
Universität zu Lübeck
Algorithmik WS 07/08
2. Vorlesung, 31.10.2007
4.1 Minimale Spannbäume
I
Gegeben ist ein ungerichteter, zusammenhängender, gewichteter
Graph G = (V , E ) mit einer positiven Kostenfunktion f : E → R+ .
I
Wir nehmen an, dass für alle Kanten e ∈ E f (e) > 0 ist.
I
Wir nennen T = (V 0 , E 0 ) einen Spannbaum von G , wenn V = V 0
und T ein Baum ist.
P
Gesucht ist ein Baum T = (V , E 0 ) mit E 0 ⊆ E , so dass, e∈E 0 f (e)
minimal unter allen Spannbäumen von G ist.
I
I
I
Ist f (e) konstant 1, so können wir dieses Problem wieder mit Hilfe
der Breiten- oder Tiefensuche lösen.
Wir werden im Folgenden das Verfahren von Kruskal vorstellen.
26
Andreas Jakoby
Universität zu Lübeck
Algorithmik WS 07/08
2. Vorlesung, 31.10.2007
I
Zur effizienten Implementation benutzen wir die Datenstruktur der
Priorityqueue und der Partition. Die letztere Datenstruktur ist auch
unter dem Namen UNION/FIND-Datenstruktur bekannt.
I
Wir starten mit |V | einelementigen Mengen, von denen jede einen
anderen Knoten des Graphen enthält.
I
Diese Mengen werden als Bäume mit jeweils einem Knoten
interpretiert.
Sukzessive verschmelzen wir diese Mengen durch Hinzunahme einer
Kante mit minimalen Kosten: Finde die minimale Kante, die zwei
Knoten aus unterschiedlichen Mengen verbindet und vereinige die
beiden Mengen.
I
27
Andreas Jakoby
Universität zu Lübeck
Algorithmik WS 07/08
2. Vorlesung, 31.10.2007
Was ist eine Priorityqueue?
I
Wir betrachten eine Teilmenge M eines Universums U, wobei jedem
Element m ∈ M eine Priorität p(m) (oder kurz p) zugeordnet wird.
I
insert(m, p): fügt m ∈ U mit Priorität p in M ein.
I
deletemin: gibt das Element aus M mit minimaler Priorität zurück
und entfernt dieses aus M.
I
readmin: gibt das Element aus M mit minimaler Priorität zurück
ohne es zu entfernen.
I
decpriority(m, d): die Priorität von m in M wird um d reduziert.
Eine Priorityqueue kann mit Hilfe eines Heaps (Heapsort) so
implementiert werden, dass die Laufzeiten der Initialisierung in O(|M|),
von readmin in O(1) und der drei verbleibenden Operationen in
O(log |M|) liegen.
28
Algorithmik WS 07/08
Andreas Jakoby
Universität zu Lübeck
2. Vorlesung, 31.10.2007
Was ist eine UNION/FIND-Datenstruktur bzw. eine Partition?
I
I
Partitionen stellen eine eingeschränkte Form von Mengen dar.
Der abstrakten Datentyp ist wie folgt definiert:
I
I
I
I
U = {1, . . . , n} sei ein Universum.
P = {P1 , . . . , Pk } sei eine Menge
von disjunkten, nicht leeren
S
Teilmengen von U mit U = ni=1 Pi . Wir nennen diese Teilmengen
Partitionsblöcke oder kurz Blöcke.
Jedem Partitionsblock Pi wird ein Element ni ∈ Pi als Repräsentant
(bzw. als Name) zugeordnet.
Auf P sind die folgenden zwei Prozeduren definiert: Sei x ∈ U und
ni , nj Repräsentanten zweier Partitionsblöcke Pi und Pj .
I
I
find(x) liefert den Repräsentanten ni der Menge Pi mit x ∈ Pi .
union(ni , nj ) vereinigt die Blöcke mit den Repräsentanten ni und nj .
Diese Operation verändert die Menge P, d.h.
P = (P \ {Pi , Pj }) ∪ {Pi ∪ Pj }. Der Repräsentant der neuen Menge
ist entweder ni oder nj .
29
Andreas Jakoby
Universität zu Lübeck
Algorithmik WS 07/08
2. Vorlesung, 31.10.2007
Die UNION/FIND-Datenstruktur kann recht einfach so implementiert
werden, dass
I
die Initialisierung in Zeit O(|U|),
I
jede union-Operation in konstanter Zeit und
jede find-Operation in Zeit O(log2 |U|)
I
ausgeführt werden kann. Einige aufwendigere Implementierungen
erlauben es die Laufzeit der find-Operation erheblich zu reduzieren.
30
Andreas Jakoby
Universität zu Lübeck
Algorithmik WS 07/08
2. Vorlesung, 31.10.2007
Algorithmus MST-Kruskal()
Eingabe: global gegebener Graph G
Ergebnis: minimaler Spannbaum T = (V , E 0 )
1: Bilde die Priorityqueue Q aller e ∈ E mit Prioritäten f (e).
2: Initialisiere die Partitionen {v } für alle v ∈ V .
3: E 0 := ∅, k = |V |
4: while k > 1 do
5:
{v , w } := deletemin(Q); v0 := find(v ); w0 := find(w );
6:
if v0 6= w0 then
7:
union(v0 , w0 ); E 0 := E 0 ∪ {{v , w }}; k := k − 1;
8:
end if
9: end while
10: Return(T = (V , E 0 ))
31
Algorithmik WS 07/08
Andreas Jakoby
Universität zu Lübeck
2. Vorlesung, 31.10.2007
Beispiel
3
1
5
6
2
4
5
6
2
16
13
4
1
7
9
3
0. Initialisierung
1
1. deletemin= {3, 6}
find(3) 6= find(6)
1
5
2. deletemin= {1, 2}
find(1) 6= find(2)
1
5
5
2
6
6
2
4
3
2
6
1
3
4
2
1
4
3
32
Algorithmik WS 07/08
Andreas Jakoby
Universität zu Lübeck
2. Vorlesung, 31.10.2007
3. deletemin= {5, 1}
find(5) 6= find(1)
4. deletemin= {5, 6}
find(5) 6= find(6)
3
3
1
5
3
1
2
5
2
4
2
4
6
4
1
2
6. deletemin= {1, 6}
find(1) = find(6)
3
7. deletemin= {2, 3}
find(2) = find(3)
3
8. deletemin= {3, 4}
find(3) 6= find(4)
3
1
5
2
3
1
5
2
4
6
1
4
2
5
2
4
6
1
4
1
3
3
5
2
6
1
2
1
4
6
2
5. deletemin= {2, 6}
find(2) = find(6)
4
6
1
4
2
4
1
9
3
3
3
33
Andreas Jakoby
Universität zu Lübeck
Algorithmik WS 07/08
2. Vorlesung, 31.10.2007
Korrektheit
Lemma 1 Sei
I
G = (V , E ) ein ungerichteter Graph,
I
T = (V , ET ) ein minimaler Spannbaum für G ,
I
W = (V , EW ) ein Wald der in T enthalten ist, d.h. EW ⊆ ET und
I
S ⊆ V eine Knotenmenge, so dass keine Kante aus EW zwischen
den Mengen S und V \ S verläuft.
Wir nennen eine Kante aus E kreuzend, wenn sie einen Knoten aus S
mit einem Knoten aus V \ S verbindet. Ist e ∈ E eine kreuzende Kante,
die minimale Kosten unter allen kreuzenden Kanten besitzt, dann ist
auch W 0 := (V , EW ∪ {e}) in einem minimalen Spannbaum enthalten.
34
Algorithmik WS 07/08
Andreas Jakoby
Universität zu Lübeck
2. Vorlesung, 31.10.2007
Beweis von Lemma 1:
Angenommen, T enthält W aber nicht W 0 .
V \S
S
I
Dann gilt e 6∈ ET .
I
T ist ein Spannbaum, somit gibt es von
jedem Knoten in V einen Weg zu jedem
anderen Knoten in V .
I
Addieren wir e zu T , so schließen wir
einen Kreis C .
C besitzt neben e noch eine kreuzende
Kante e 0 .
e
I
I
Sei T 0 := (V , (ET ∪ {e}) \ {e 0 }).
I
T 0 ist ein Spannbaum von G , da T 0 wieder zyklenfrei ist und |V | − 1
Kanten hat.
I
Da f (e) minimal unter allen kreuzenden Kanten ist, gilt
f (e) ≤ f (e 0 ).
35
Andreas Jakoby
Universität zu Lübeck
Algorithmik WS 07/08
2. Vorlesung, 31.10.2007
Beweis von Lemma 1 (Teil 2)
P
P
I Ist f (e) < f (e 0 ), so gilt
w ∈ET0 f (w ) <
w ∈ET f (w ) für
ET0 = (ET ∪ {e}) \ {e 0 }. Dieses widerspricht der Annahme, dass T
ein minimaler Spannbaum ist. Wir können somit ausschließen, dass
f (e) < f (e 0 ) ist.
I
Ist f (e) = f (e 0 ), so haben T und T 0 die gleichen Kosten. Da T ein
minimaler Spannbaum ist, muss auch T 0 ein minimaler Spannbaum
sein. Wir haben somit gezeigt, dass W 0 in einem minimalen
Spannbaum enthalten ist.
36
Algorithmik WS 07/08
Andreas Jakoby
Universität zu Lübeck
2. Vorlesung, 31.10.2007
Korrektheit vom Kruskals Algorithmus
I
Der MST-Algorithmus nimmt immer eine minimale kreuzende Kante
in den bereits konstruierten Wald W auf.
I
I
Sei e = {u, v } = deletemin(Q).
Über die Abfrage find(u) = find(v ) wird überprüft, ob u und v
bereits in einer Komponente von W liegen. Beachte: Mit jeder
eingefügten Kante {u 0 , v 0 } vereinigen wir die entsprechenden
Mengen find(u 0 ) und find(v 0 ). Somit repräsentiert jede Menge der
Partition einen Baum des konstruierten Walds.
I
I
I
Ist find(u) = find(v ), so verwerfen wir die Kante.
Ist find(u) 6= find(v ), so stellt S die Knotenmenge des Teilbaums dar,
in dem u liegt. Somit ist e eine minimale kreuzende Kante.
Aus Lemma 1 können wir nun schließen, dass W 0 = (V , EW ∪ {e})
in einem minimalen Spannbaum enthalten ist, wenn auch
W = (V , EW ) in einem minimalen Spannbaum enthalten ist.
37
Andreas Jakoby
Universität zu Lübeck
Algorithmik WS 07/08
2. Vorlesung, 31.10.2007
Laufzeit von Kruskals Algorithmus
I
Die Initialisierung der Priorityqueue gelingt in Zeit O(|E |).
I
Die Initialisierung der Partitionen gelingt in Zeit O(|V |).
I
Die While-Schleife muss im Worst-Case |E | mal durchlaufen werden.
Bei jedem Durchlauf werden einmal die Operationen deletemin und
zweimal die Operation find aufgerufen. Nach unseren Annahmen
über die Priorityqueue und der UNION/FIND-Datenstruktur können
wir diese Operationen in Zeit O(|E | · log |E |) ausführen.
I
In |V | − 1 Durchläufen der While-Schleife wird jeweils einmal eine
union-Operation aufgerufen.
I
Zusammen erhalten wir eine Laufzeit von O(|E | · log |E |).
38
Algorithmik WS 07/08
Andreas Jakoby
Universität zu Lübeck
2. Vorlesung, 31.10.2007
Satz 1 Sei G = (V , E ) ein zusammenhängender, ungerichteter,
gewichteter Graph. Dann berechnet Kruskals Algorithmus einen
minimalen Spannbaum für G in Zeit
O(|E | · log |E |) .
Beobachtung 1 Betrachten wir die Aussage von Lemma 1 und den
Korrektheitsbeweis von Kruskals Algorithmus, so erkennen wir, dass wir
hierbei ein exchange argument angewendet haben.
39
Algorithmik WS 07/08
Andreas Jakoby
Universität zu Lübeck
2. Vorlesung, 31.10.2007
4.2 Intervall-Scheduling
Definition 3 [Intervall-Scheduling Problem] Gegeben sei
I
I
eine Menge R = {1, . . . , n} von n Jobs und
zwei Funktionen s, f : R → N.
Hierbei gilt für alle Jobs i
s(i) ≤ f (i)
I
s(i) nennen wir die Startzeit von Job i und
I
f (i) nennen wir die Endzeit von Job i.
Job i steht im Konflikt mit Job j, wenn
I
i 6= j und
I
die Intervalle [s(i), f (i)[ und [s(j), f (j)[ sich überlappen.
Mit [s(i), f (i)[ bezeichnen wir das nach rechts offene reelle Intervall.
40
Andreas Jakoby
Universität zu Lübeck
Algorithmik WS 07/08
2. Vorlesung, 31.10.2007
Definition 3 (Teil 2)
I
Eine Teilmenge S ⊆ R ist eine zulässige Schedule, wenn S
konfliktfrei ist, d.h. für alle i, j ∈ S steht i nicht im Konflikt zu j.
I
Eine Teilmenge S ⊆ R ist eine optimale Schedule, wenn S eine
zulässige Schedule maximaler Kardinalität ist, d.h. |S| ist maximal.
Aufgabe: Bestimme eine optimale Schedule!
41
Andreas Jakoby
Universität zu Lübeck
Algorithmik WS 07/08
2. Vorlesung, 31.10.2007
Wir starten mit einem Grundgerüst für einen Greedy-Algorithmus für das
Intervall-Scheduling Problem:
Algorithmus Greedy-Intervall-Schedule(R)
Eingabe: Menge R
Ergebnis: optimale Schedule S
1: S := ∅
2: while R 6= ∅ do
3:
wähle ein eine Job i ∈ R
4:
S := S ∪ {i};
5:
entferne alle Jobs aus R, die zu i im Konflikt stehen
6:
R := R \ {i}
7: end while
8: Return(S)
Unsere Aufgabe besteht jetzt darin, den Auswahlmechanismus in Zeile 3
näher zu beschreiben.
42
Andreas Jakoby
Universität zu Lübeck
Algorithmik WS 07/08
2. Vorlesung, 31.10.2007
Wir starten mit einer einfachen Beobachtung:
Beobachtung 2 Für alle Auswahlmechanismen ist das Ergebnis S eine
zulässige Schedule.
Diese Beobachtung folgt unmittelbar daraus, dass wir in Zeile 5 alle Jobs
löschen, die zu einem einmal in die Schedule aufgenommenen Job im
Konflikt stehen.
43
Andreas Jakoby
Universität zu Lübeck
Algorithmik WS 07/08
2. Vorlesung, 31.10.2007
Einfache Auswahlmechanismen:
1. wähle i mit s(i) = minj∈R s(j)
2. wähle i mit f (i) − s(i) = minj∈R f (j) − s(j)
3. wähle das i, welches mit den wenigsten Jobs in R im Konflikt steht
4. wähle i mit f (i) = minj∈R f (j)
44
Algorithmik WS 07/08
Andreas Jakoby
Universität zu Lübeck
I
2. Vorlesung, 31.10.2007
Anhand der nachfolgenden Graphik können wir leicht erkennen, dass
die ersten drei Auswahlmechanismen auf Folie 44 keine optimale
Schedule liefern.
1.
2.
3.
I
Behauptung Benutzen wir jedoch den vierten Mechanismus in Zeile
3 von Algorithmus Greedy-Intervall-Schedule, so erhalten wir eine
optimale Schedule. Dieses muss aber noch bewiesen werden!
45
Herunterladen