Teile und Herrsche (Divide and Conquer) Entwurfsmethode f¨ ur Algorithmen 1. Teile das Problem in kleinere Unterprobleme (Divide) 2. L¨ ose rekursiv die entstehenden Unterprobleme (Conquer) 3. Setze die L¨ osungen zusammen. Instanzen : • Mergesort • Quicksort • Intervallhalbierung (kein Zusammensetzen) • schnelle Berechnung ganzzahliger Potenzen P raktische Informatik 1, WS 2004/05, F olien Div+Conq-1, (4. F ebruar2005) Seite 1
46
Embed
Teile und Herrsche (Divide and Conquer) · Teile und Herrsche (Divide and Conquer) Entwurfsmethode fur Algorithmen 1. Teile das Problem in kleinere Unterprobleme (Divide) 2. L¨ose
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Teile und Herrsche (Divide and Conquer)
Entwurfsmethode fur Algorithmen
1. Teile das Problem in kleinere Unterprobleme (Divide)2. Lose rekursiv die entstehenden Unterprobleme (Conquer)3. Setze die Losungen zusammen.
Weitere Verbesserungsmoglichkeiten: Symmetrien ausnutzen
Praktische Informatik 1, WS 2004/05, Folien Div+Conq−1, (4. F ebruar2005) Seite 16
Allgemeine Suchfunktion mit Tiefensuche und
Abschneiden
suchbtdf :: a -> (a->[a]) -> (a-> Bool) -> (a-> Bool) -> Maybe a
anf: aktuelles Objekt (Zustand)toechter: Direkte Nachfolgezustandeziel: Pradikat: ist der aktuelle Zustand ein Zielzustand?cut: Wenn ja, dann keine Nachfolgezustande untersuchen
Praktische Informatik 1, WS 2004/05, Folien Div+Conq−1, (4. F ebruar2005) Seite 17
Allgemeine Suchfunktion mit Tiefensuche und
Abschneiden
suchbtdf anf toechter ziel cut =
if ziel anf then Just anf
else if cut anf
then Nothing
else let nexts = toechter anf
in suchbtdfl nexts toechter ziel cut
suchbtdfl [] toechter ziel cut = Nothing
suchbtdfl (x:xs) toechter ziel cut =
let result1 = suchbtdf x toechter ziel cut
result2 = suchbtdfl xs toechter ziel cut
in case result1 of
Nothing -> result2
Just x -> Just x
Praktische Informatik 1, WS 2004/05, Folien Div+Conq−1, (4. F ebruar2005) Seite 18
Praktische Informatik 1, WS 2004/05, Folien Div+Conq−1, (4. F ebruar2005) Seite 34
Scan in Haskell
Beispiele filter p (map q xs)) ein Durchlauf
map q (reverse xs) ungunstig,da ganze Liste gleichzeitig im Speicher
Praktische Informatik 1, WS 2004/05, Folien Div+Conq−1, (4. F ebruar2005) Seite 35
Beispiel
Maximum einer Liste von Zahlen:
Verfahren 1: sortieren, dann erstes Element auswahlenO(n ∗ log(n))
Verfahren 2: Scannen der Liste mit aktuellem maximalen ElementO(n)
minim (x:xs) = minimr x xs
minimu x [] = x
minimr x (y:ys) = if x <= y then minimr x ys
else minimr y ys
Praktische Informatik 1, WS 2004/05, Folien Div+Conq−1, (4. F ebruar2005) Seite 36
Minimum mit Verfahren 2
Minimumberechnung:
minim_sort xs = head (mischsort xs)
naive Analyse: O(n ∗ log(n))genauere Analyse in Haskell: Aufwand: O(n)
Praktische Informatik 1, WS 2004/05, Folien Div+Conq−1, (4. F ebruar2005) Seite 37
Beispiele fur Scan-Algorithmen
Suche eines gegebenen Wortes in einem Textfile
Erzeugung eines optimalen Huffman-Kodes:1. Scan zur Ermittlung der Haufigkeiten der Zeichen2. Erzeugung des Huffman Baumes3. Kodierung: Scan
Praktische Informatik 1, WS 2004/05, Folien Div+Conq−1, (4. F ebruar2005) Seite 38
Beispiel fur lineare Algorithmen
Finden des Medians einer Liste:
Median: Element, so dass die Anzahl der kleinerenund die Anzahl der großerenmoglichst nah an der Halfte liegt.
Es gibt O(n)-Algorithmus
vermutlich gibt es keinen Scan- Algorithmus!
Praktische Informatik 1, WS 2004/05, Folien Div+Conq−1, (4. F ebruar2005) Seite 39
Beispiel: Summe von Teilfolgen
Aufgabe: Finde die maximale Summe einer zusammenhangenden
Teilfolge einer endlichen Folge von ganzen Zahlen.
bei der alle Elemente nichtnegativ sind
(mcv: maximal contiguous subvector).
Beispiel
Bei [1,2,−5,3,4,−1,1,2,5,−10] ergibt sich 8.
Praktische Informatik 1, WS 2004/05, Folien Div+Conq−1, (4. F ebruar2005) Seite 40
Beispiel: mcv: verschiedenen Methoden
direktes Verfahren
Bestimme alle Teilfolgen (ohne Lucken),
wahle die aus, die nur nichtnegative Elemente haben,
bilde die Summe und
bestimme das Maximum.
Dieses Verfahren ist kubisch O(n3):
i. Es gibt quadratisch viele dieser Teillisten,ii. Auswahl hat Zeitbedarf O(n3),iii. Summenbildung ist linear in einer Teilliste, also auch O(n ∗ n2)iv. Maximumsberechnung linear (d.h. quadratisch).
Zusammen O(n3).
Praktische Informatik 1, WS 2004/05, Folien Div+Conq−1, (4. F ebruar2005) Seite 41
(filter (\ys -> all (>= 0) ys) (nesublists (x:xs))))
Praktische Informatik 1, WS 2004/05, Folien Div+Conq−1, (4. F ebruar2005) Seite 42
Beispiel: mcv: Divide and Conquer
Halbiere die Liste in der Mitte, bestimme die mcv-Zahlen ml, mr rekursivberechne zusatzlich die rechte mcv-Zahl mlr der linken Teillistedie linke mcv-Zahl mrl der rechten Teilliste.Bilde das Maximum der Zahlen ml, mr, mrl + mlr.
Zeitbedarf ist O(n ∗ log(n))
mcv_dq [x] = if x <= 0 then 0 else x
mcv_dq (x:xs) = let len =length (x:xs)
xa = take (len ‘div‘ 2) (x:xs)
xb = drop (len ‘div‘ 2) (x:xs)
mca = mcv_dq xa
mcb = mcv_dq xb
mca_r = sum (takeWhile (>= 0) (reverse xa))
mcb_l = sum (takeWhile (>= 0) xb)
in maximum [mca,mcb,mca_r+mcb_l]
Praktische Informatik 1, WS 2004/05, Folien Div+Conq−1, (4. F ebruar2005) Seite 43
Beispiel: mcv: Scan-Verfahren
Der Scan benotigt zum Durchlauf der Liste eine Umgebung:• das bisher gefundene Maximum,• die Summe der aktuellen Teilliste• die Restliste.
Zeitbedarf ist O(n)
mcv_scan xs = mcv_scanr 0 0 xs
mcv_scanr gm lm [] = max gm lm
mcv_scanr gm lm (x:xs) =
if x < 0
then mcv_scanr (max gm lm) 0 xs
else mcv_scanr gm (lm+x) xs
Praktische Informatik 1, WS 2004/05, Folien Div+Conq−1, (4. F ebruar2005) Seite 44
Algorithmen fur mcv-Variante
Finde die maximale Summe einer zusammenhangenden Teilfolge
einer gegebenen endlichen Folge von ganzen Zahlen.