presentation

advertisement
Grundlagen der Algorithmen
und Datenstrukturen
Kapitel 12
Prof. Dr. Christian Scheideler
Stv: Stefan Schmid
SS 2008
07.11.2015
Kapitel 12
1
Heute...
Prof Scheideler auf Konferenz...
Vorlesung:
- Techniken beim Algorithmenentwurf
(„check list“?)
- ev. Nachbesprechung Midterm
- Fragen Endterm?
07.11.2015
Kapitel 12
2
Generische Optimierungsverfahren
Techniken:
• Systematische Suche
– lass nichts aus
• Divide and Conquer
– löse das Ganze in Teilen
• Dynamische Programmierung
– mache nie etwas zweimal
• Greedy Verfahren
– schau niemals zurück
• Lokale Suche
– denke global, handle lokal
07.11.2015
Kapitel 12
3
Systematische Suche
Prinzip: durchsuche gesamten Lösungsraum
Auch bekannt als „Brute Force“
Vorteil: sehr einfach zu implementieren
Nachteil: sehr zeitaufwendig und sollte
daher nur für kleine Instanzen verwendet
werden
07.11.2015
Kapitel 12
4
Systematische Suche
Beispiele:
• Suche in unsortierter Liste
• Broadcasting in unstrukturierten verteilten
Systemen (Peer-to-Peer Systeme)
• Selection Sort (nimm wiederholt kleinstes
Element aus Eingabesequenz)
• Rucksackproblem (siehe nächste Folie)
07.11.2015
Kapitel 12
5
Systematische Suche
Rucksackproblem:
• Eingabe: n Objekte mit
Gewichten w1,…,wn und
Werten v1,…,vn und Rucksack
mit Kapazität W
• Ausgabe: Objektmenge M
maximalen Wertes, die in
Rucksack passt
Anwendungen: Nikolaus, Räuber, …
07.11.2015
Kapitel 12
6
Systematische Suche
Lösung zum Rucksackproblem:
Probiere alle Teilmengen von Objekten
aus und merke die Menge M von Objekten
mit i 2 M wi <= W, die bisher den maximalen Wert hatte
Aufwand: O(2n), da es 2n Möglichkeiten gibt,
Teilmengen aus einer n-elementigen
Menge zu bilden.
07.11.2015
Kapitel 12
7
Divide and Conquer
Prinzip: teile Problem in Teilprobleme auf,
die unabhängig voneinander gelöst
werden können
Vorteil: Implementierung oft einfach, da
rekursiv
Nachteil: eventuell werden Teilprobleme
doppelt gelöst
07.11.2015
Kapitel 12
8
Doppelte Berechnungen...
Fibonacci Zahlen:
f0 = 0, f1 = 1
fn = fn-1 + fn-2
07.11.2015
Kapitel 12
9
Divide and Conquer
Beispiele:
• Mergesort
• Quicksort
• Binary Search
• Arithmische Operationen wie Matrixmultiplikation oder Multiplikation großer Zahlen
• Nächstes-Paar-Problem
07.11.2015
Kapitel 12
10
Divide and Conquer
Matrixmultiplikation nach Strassen:
• Eingabe: nxn-Matrizen A und B
• Ausgabe: nxn-Matrix C mit C=A¢B
Wir nehmen vereinfachend an, n sei Zweierpotenz. Dann A und B darstellbar durch
jeweils 4 (n/2)x(n/2)-Matrizen:
A=
07.11.2015
A00 A01
A10 A11
B=
Kapitel 12
B00 B01
B10 B11
11
Divide and Conquer
Für Matrix C gilt:
C=
C00 C01
C10 C11
mit
• C00=M1+M4-M5+M7
• C01=M3+M5
• C10=M2+M4
• C11=M1+M3-M2+M6
mit Matrizen M1,…,M7 wie in nächster Folie
07.11.2015
Kapitel 12
12
Divide and Conquer
Matrizen M1,…,M7:
• M1=(A00+A11) ¢ (B00+B11)
• M2=(A10+A11) ¢ B00
• M3=A00 ¢ (B01-B11)
• M4=A11 ¢ (B10-B00)
• M5=(A00+A01) ¢ B11
• M6=(A10-A00) ¢ (B00+B01)
• M7=(A01-A11) ¢ (B10+B11)
07.11.2015
Kapitel 12
7 rekursive
Aufrufe
13
Divide and Conquer
Laufzeit von Strassens Algorithmus:
T(1)=O(1), T(n)=7T(n/2) + O(n2)
Also Laufzeit O(nlog2 7) = O(n2,81)
Laufzeit der Schulmethode (brute force):
O(n3)
07.11.2015
Kapitel 12
14
Divide and Conquer
Nächstes-Paar-Problem:
• Eingabe: Menge S von n Punkten
P1=(x1,y1),…,Pn=(xn,yn) im 2-dimensionalen Euklidischen Raum
• Ausgabe: Punktpaar mit kürzester Distanz
Annahme: n ist Zweierpotenz
07.11.2015
Kapitel 12
15
Divide and Conquer
Algo für Nächstes-Paar-Problem:
• Sortiere Punkte gemäß x-Koordinate
(z.B. Mergesort, Zeit O(n log n) )
• Löse danach Nächstes-Paar-Problem
rekursiv durch Algo ClosestPair
07.11.2015
Kapitel 12
16
Divide and Conquer
Algo ClosestPair(S):
• Eingabe: nach x-Koordinate sortierte
Punktmenge S
• |S|=2: sortiere S gemäß y-Koordinate und gib
Distanz zwischen den zwei Punkten in S zurück
• |S|>2:
–
–
–
–
teile S in der Mitte (Position n/2) in S1 und S2
d1:=ClosestPair(S1); d2:=ClosestPair(S2)
d:=min{ClosestCrossPair(S1,S2,min(d1,d2)), d1, d2}
Führe Merge(S1,S2) durch, so dass S am Ende nach
y-Koordinate sortiert ist (S1, S2 bereits sortiert)
– gib d zurück
07.11.2015
Kapitel 12
17
Divide and Conquer
ClosestCrossPair(S1,S2,d):
d=min{d1,d2}
d
Nur Punktpaare in
Streifen interessant
d
d2
d1
Nur max. 4 Punkte
in dxd-Quadrant
Punkte nach yKoordinate sortiert
07.11.2015
S1
Kapitel 12
S2
18
Divide and Conquer
ClosestCrossPair:
• Durchlaufe die (nach der y-Koordinate
sortierten) Punkte in S1 und S2 von oben nach
unten (wie in Merge(S1,S2)) und merke die
Mengen M1 und M2 der 8 zuletzt gesehenen
Punkte in S1 und S2 im d-Streifen
• Bei jedem neuen Knoten in M1, berechne
Distanzen zu Knoten in M2, und bei jedem
neuen Knoten in M2, berechne Distanzen zu
Knoten in M1
• Gib am Ende minimal gefundene Distanz zurück
07.11.2015
Kapitel 12
19
Divide and Conquer
Last 8 points => y distance from current point at for other points > d
=> can be ignored!
d=min{d1,d2}
d
d
d2
d1
07.11.2015
S1
Kapitel 12
S2
20
Divide and Conquer
New point => compare to those stored points (max 8) which are on other side!
d=min{d1,d2}
d
d
d2
d1
07.11.2015
S1
Kapitel 12
S2
21
Divide and Conquer
Laufzeit für Nächstes-Paar-Algo:
• Mergesort am Anfang: O(n log n)
• Laufzeit T(n) von ClosestPair Algo:
T(1)=O(1), T(n)=2T(n/2)+O(n)
Gesamtlaufzeit: O(n log n)
Brute force: O(n2)
07.11.2015
Kapitel 12
22
Dynamische Programmierung
Prinzip: rekursive Durchsuchung des
Lösungsraums mittels Speicher
Vorteil: verhindert doppelte Berechnung von
Teillösungen
Nachteil: benötigt eventuell sehr viel
Speicher
07.11.2015
Kapitel 12
23
Dynamische Programmierung
Beispiele:
• Berechnung des Binomialkoeffizienten
• Rucksackproblem
07.11.2015
Kapitel 12
24
Dynamische Programmierung
Berechnung des Binomialkoeffizienten:
• Eingabe: n,k>=0, n>=k
• Ausgabe: C(n,k) mit C(n,k) = nk
Rekursive Formel für C(n,k):
• C(n,0)=C(n,n)=1 für alle n>=0
• C(n,k)=C(n-1,k-1)+C(n-1,k) für n>k>0
07.11.2015
Kapitel 12
25
Dynamische Programmierung
0
1
0
1
1
1
1
2
1
2
2
….
k-1
k
1
..
.
k
1
k …
1
..
.
n-1
C(n-1,k-1)
C(n-1,k)
C(n,k)
n
07.11.2015
zu berechnende
Einträge (<n¢k);
linke Spalte und
Diagonale alles
1 zu Beginn, Rest
folgt rekursiv.
Kapitel 12
26
Dynamische Programmierung
Berechnung des Binomialkoeffizienten:
for i:=0 to n do
for j:=0 to min(i,k) do
if j=0 or j=i then C[i,j]:=1
else C[i,j]:=C[i-1,j-1]+C[i-1,j]
return C[n,k]
Laufzeit: O(n ¢ k)
07.11.2015
Kapitel 12
27
Dynamische Programmierung
Rucksackproblem:
• Eingabe: n Objekte mit Gewichten
w1,…,wn und Werten v1,…,vn und
Rucksack mit Kapazität W
• Ausgabe: Objektmenge M maximalen
Wertes, die in Rucksack passt
07.11.2015
Kapitel 12
28
Dynamische Programmierung
V[i,w]: optimaler Wert, der für die Objekte 1 bis i
bei Rucksackvolumen w erreichbar ist
Rekursive Berechnung von V[i,w]:
• Für die Teilmengen, die das i-te Objekt nicht
enthalten ist der Wert der optimalen Lösung
gleich V[i-1,w]
• Für die Teilmengen, die Objekt i enthalten, ist
der Wert der optimalen Lösung gleich
vi+V[i-1,w-wi] (wi abziehen, sonst würde
Gesamtgewicht zu gross!)
07.11.2015
Kapitel 12
29
Dynamische Programmierung
Idee also: Wenn wir für Teilmenge der Objekte
1..i-1 optimale Packung für Maximalgewichte 1...w
haben, können wir optimale Packung für Objekte
1..i mit Maximalgewicht w sehr schnell berechnen.
07.11.2015
Kapitel 12
30
Dynamische Programmierung
Rekursive Formel für V[i,w]:
• V[0,w]=0 für alle w>=0
• V[i,0]=0 für alle i>=0
• V[i,w]=V[i-1,w] falls w-wi<0
• V[i,w]=max{V[i-1,w], vi+V[i-1,w-wi]} sonst
07.11.2015
Kapitel 12
31
Dynamische Programmierung
Rekursive Berechnung von V[i,w]:
0
w-wi
w
W
0
0
0
0
0
i-1
0
i
0
n
0
07.11.2015
V[i-1,w-wi]
V[i-1,w]
V[i,w]
Ziel
V[n,W]
Kapitel 12
32
Dynamische Programmierung
Berechnung der Tabelle: O(n¢W) Zeit
Brute force: O(2n)
Frage: Wie schaut optimale Packung aus?
Fazit: solange W klein, viel bessere Laufzeit als brute force.
Falls W groß, dann unterteile Objekte in große
(wi>=W/(42) ) und kleine Objekte. Wende auf die großen
Objekte dynamische Programmierung an (kleine Tabelle)
und auf die kleinen eine Greedy Methode an, die wir
später noch beschreiben werden. Damit ist in Zeit
O(n ¢ poly(1/)) Lösung ermittelbar, die um maximal 1+
von Optimum abweicht.
07.11.2015
Kapitel 12
33
Greedy Verfahren
Prinzip: teile Problem in mehrere kleine
Entscheidungen auf, nimm immer lokales
Optimum für jede kleine Entscheidung
Vorteil: sehr schnell
Nachteil: kann weit von optimaler Lösung
entfernt sein
07.11.2015
Kapitel 12
34
Greedy Verfahren
Beispiele:
• Dijkstra-Algorithmus für kürzeste Wege
• Jarnik-Prim-Algorithmus für minimale
Spannbäume
• Huffman-Bäume
• Rucksackproblem
07.11.2015
Kapitel 12
35
Greedy Verfahren
Alice muss Bob regelmässig wichtige
Nachricht zukommen lassen. Bob wohnt leider ein
paar Kilometer weit weg, es besteht aber
Sichtkontakt.
Alice hat eine Taschenlampe, und möchte die Nachricht
„morsen“ mittels eines binären Alphabets (lang = „0“, kurz =
„1“)
Alice und Bob können eine Kodierung abmachen, wissen
aber im voraus nur, dass die Nachrichten in deutsch sein
werden, nicht aber deren Inhalt.
Kodierung?
07.11.2015
Kapitel 12
36
Greedy Verfahren
Huffman-Baum:
• Eingabe: Wahrscheinlichkeitsverteilung p auf
einem Alphabet A (e.g., A = {a,b,c,d,...})
• Ausgabe: optimaler Präfixcode f:A ! {0,1}* für A,
d.h. a 2 A |f(a)|¢p(a) minimal
Präfixcode: Kodierung f:A ! {0,1}*, für die es keine
Zeichen a,b2  gibt, für die f(a) ein Präfix von
f(b) ist (d.h. f(b) anfängt mit f(a) )
Präfixcodes wichtig für eindeutige Dekodierung!
07.11.2015
Kapitel 12
37
Greedy Verfahren
Einsicht: jeder Präfixcode lässt sich als Binärbaum
darstellen mit Zeichen in A an Blättern
Beispiel: A={a,b,c,d}
0
a
0
c
07.11.2015
Kodierung f:
• f(a) = 0
• f(b) = 110
• f(c) = 10
• f(d) = 111
1
1
0
b
1
d Kapitel 12
38
Greedy Verfahren
Huffman-Baum: Baum für optimale Kodierung
Strategie:
• Anfangs ist jedes Zeichen in A ein Baum für sich
• Wiederhole, bis ein einziger Baum übrig:
– Bestimme die beiden Bäume T1 und T2 mit kleinsten
Wahrscheinlichkeitswerten a p(a) ihrer Zeichen
– Verbinde T1 und T2
zu neuem Baum T
07.11.2015
0
Kapitel 12
T1
1
T2
T
39
Greedy Verfahren
Beispiel für Huffman-Baum:
Zeichen
A
B
C
D
_
Wkeit p
0,35
0,1
0,2
0,2
0,15
1,0
0
1
0,4
0
C
0,2
0,6
0
1
D
0,2
0,25
0
07.11.2015
B
1
0,1 12
Kapitel
0,35
A
1
0,15
_
40
Greedy Verfahren
Rucksackproblem:
• Eingabe: n Objekte mit Gewichten
w1,…,wn und Werten v1,…,vn und
Rucksack mit Kapazität W
• Ausgabe: Objektmenge M maximalen
Wertes, die in Rucksack passt
07.11.2015
Kapitel 12
41
Greedy Verfahren
Greedy Strategie:
• Berechne Profitdichten d1=v1/w1,.., dn=vn/wn
• Sortiere Objekte nach Profitdichten
• Angefangen von dem Objekt mit höchster
Profitdichte, füge Objekte zu Rucksack hinzu,
bis kein Platz mehr da
Problem: Greedy Strategie kann weit vom
Optimum entfernt liegen
07.11.2015
Kapitel 12
42
Greedy Verfahren
Beispiel: zwei Objekte mit v1=1 und v2=W-1
und w1=1 und w2=W, Rucksackkapazität
ist W
Greedy-Methode: berechnet d1=1 und d2 =
1-1/W und wird nur Objekt 1 in Rucksack
packen, da Objekt 2 nicht mehr passt
Optimale Lösung: packe Objekt 2 in Rucksack (viel besser da Wert W-1 statt 1)
07.11.2015
Kapitel 12
43
Greedy Verfahren
Verbesserte Greedy-Methode:
• Seien die Objekte 1 bis n absteigend nach
Profitdichte sortiert
• Bestimme maximale Objektmenge {1,…,i}
wie bisher mit j<=i wj <=W
• Gib entweder {1,…,i} oder {i+1} aus, je
nachdem, welche Menge den maximalen
(absoluten) Wert hat
07.11.2015
Kapitel 12
44
Greedy Verfahren
Behauptung: die Lösung der verbesserten Greedy-Methode
ist höchstens einen Faktor 2 von der optimalen Lösung
entfernt
Beweis:
• Wenn beliebige Bruchteile der Objekte gewählt werden
könnten, wäre die optimale Lösung {1,…,i+1} (da
maximale Profitdichte), wobei von Objekt i+1 nur der
Bruchteil genommen wird, der noch in den Rucksack
passt.
• Für den optimalen Wert OPT gilt demnach:
OPT <= j<=i+1 vj.
• Also ist max{j<=i vj, vi+1} >= OPT/2 da beides
zusammen grössergleich OPT, und wir grösseres nehmen
07.11.2015
Kapitel 12
45
Lokale Suche
Generische Verfahren (mit Nachbarschaft):
• Backtracking
• Branch-and-Bound
• Hill climbing
• Simulated annealing
• Tabu search
• Evolutionäre Verfahren
(Mutation, Mating & Survival of the Fittest)
07.11.2015
Kapitel 12
46
Backtracking
Prinzip: systematische Tiefensuche im
Lösungsraum, bis gültige Lösung
gefunden
Vorteil: einfach zu implementieren
Nachteil: kann sehr lange dauern
07.11.2015
Kapitel 12
47
Backtracking
Beispiele:
• n-Damen Problem
• Hamiltonscher Kreis Problem
07.11.2015
Kapitel 12
48
Backtracking
n-Damen Problem:
• Eingabe: n 2 IN
• Ausgabe: Antwort auf die Frage, ob sich n
Damen so auf einem nxn-Schachbrett
stellen lassen, dass keine die andere
schlagen kann
07.11.2015
Kapitel 12
49
Backtracking
Tiefensuche über
Spalten (Nummern
geben Reihenfolge
an, in der
Zustände
1
besucht
werden)
07.11.2015
5
Keine Lösung
3
2
Keine Lösung
für 3. Dame!
Beispiel für n=4
0
6
7
4
Keine Lösung
Keine Lösung
Kapitel 12
8
Lösung
50
Backtracking
Hamiltonscher Kreis Problem:
• Eingabe: ungerichteter Graph G=(V,E)
• Ausgabe: Kreis C ½ E, der jeden Knoten
genau einmal besucht, falls dieser existiert
07.11.2015
Kapitel 12
51
Backtracking
a
b
c
d
f
e
G=(V,E)
07.11.2015
Kapitel 12
52
Branch and Bound
Prinzip: systematische Breitensuche im
Lösungsraum (mit Bewertung der Zustände), bis optimale Lösung gefunden
Vorteil: relativ einfach zu implementieren
Nachteil: kann sehr lange dauern
07.11.2015
Kapitel 12
53
Now to s.th. completely different...
07.11.2015
Kapitel 12
54
Aufgabe 1
07.11.2015
Kapitel 12
55
Aufgabe 2
07.11.2015
Kapitel 12
56
Aufgabe 3
07.11.2015
Kapitel 12
57
Aufgabe 4
07.11.2015
Kapitel 12
58
Herunterladen