Datenstrukturen und Algorithmen

Werbung
Datenstrukturen und Algorithmen VO 708.031 24.10.2013 [email protected] 1 Kapitel 2 Algorithmische Grundprinzipien 24.10.2013 [email protected] 2 2. Algorithmische Grundprinzipien • 
• 
• 
• 
• 
1) IteraEve Algorithmen 2) Rekursive Algorithmen 3) Teile u. Herrsche (engl. Divide & Conquer) Prinzip 4) "Gierige" (engl. Greedy) Algorithmen 5) Dynamische Programmierung Entwurf&Analyse von Alg. (5. Semester) •  6) ProbabilisEsche Algorithmen (Masterstudium) 24.10.2013 [email protected] 3 1) IteraEve Algorithmen •  Bisher wurden nur iteraEve Alg. analysiert (InserEonSort, MergeSort u. BubbleSort) •  Abfolge von Anweisungen •  Verschachtelung durch Schleifen •  IntuiEves Prinzip, leicht zu formulieren, für komplexe Probleme aufwendig •  Jeder iteraEve Alg. lässt sich als rekursiven Alg. implemenEeren (und umgekehrt). Entrekursivierung und Rekursivierung siehe [Algorithmen und Datenstrukturen G. Pomberger und H. Dobler, Pearson Studium] 24.10.2013 [email protected] 4 2) Rekursive Algorithmen •  Rekursion = Selbstbezüglichkeit (Prinzip geht über die MathemaEk und Algorithmik hinaus, Musik, Malerei, Grafik u. in der Natur, siehe [Ein endloses Geflochtenes Band, Hofstadter 2006]) •  DefiniEon: Eine Funk)on ru, sich selbst mit veränderten Parametern auf. Jeder rekursive Alg. muss eine Abbruchbedingung implemenEeren. •  Vorteil: Viele (komplexe) Probleme können elegant mit rekursiven Alg. gelöst werden. Laufzeitanalyse einfacher. •  Nachteil: höherer Speicheraufwand da die Rücksprungadressen u. die Argumente in einem Stapel gespeichert werden müssen. 24.10.2013 [email protected] 5 IteraEve Alg. u. Rekursionen •  Viele Algorithmen können sowohl itera)v als auch rekursiv implemenEert werden •  Beispiel: Fakultät f (n) = n!= n ⋅ (n − 1) ⋅ (n − 2) ⋅…⋅ 2 ⋅1
T(n) = O(n)
S(n) = O(1)
24.10.2013 T(n) = O(n)
S(n) = O(n) (entspricht Rekursionstiefe)
[email protected] 6 IteraEve Alg. u. Rekursionen •  Beispiel: Fibonacci‐Zahlen f n = f n−1 + f n−2 , n ≥ 3; f1 = f 2 = 1
⇒
1,
1,
2,
3,
5,
8,
13,
21,
…
T(n) = O(n)
S(n) = O(1)
T(n) = Θ(cn) (exponentiell!)
S(n) = O(n) (entspricht Rekursionstiefe)
Rekursive Varianten sind ok einfacher zu implemenEeren, besitzen aber ok den größeren Laufzeit‐ und Speicherbedarf! 24.10.2013 [email protected] 7 Weitere Bsp. zu Rekursionen •  Alg. zur Kurvengläoung (Douglas‐Peucker Alg.) •  Input: Konturline als Folge von <p1, p2, ..., pn> Punkten •  Output: ApproximaEon als Folge von m Punkten (mit m<=n abhängig von einem Schwellwert ε) <p1, p2, ..., pm> •  Formulierung: –  Verbinde Anfangs‐ und Endpunkt durch ein Geradensegment –  Ermiole jenen Punkt pi mit der größten Enternung zur Geraden –  Ist die Distanz kleiner als der Schwellwert, dann verwerfe alle dazwischen liegenden Punkte (die Approx. ist ausreichend) –  Ansonsten: Splate das Geradensegment am Punkt pi in zwei Teilfolgen und rufe den Alg. rekursiv auf. 24.10.2013 [email protected] 8 T(n) = 2T(n/2) + O(n) = O(n log n)
aus InformaEk I VO der Uni. Münsert, Xiaoyi Jiang 24.10.2013 [email protected] 9 Es gibt einen Zusatzpunkt für eine ImplemenEerung der Douglas‐Peucker Methode. Abzugeben am 31.10.2013 •  Punktmenge als Datenfile u. ein Matlab‐Template sind auf der D&A Webpage •  Codeausdruck (nur der Alg. kein Plot oder sonsEge FunkEon) •  Grafik mit dem Polygon vor und nach der Kläoung (wählen sie einen "guten" Schwellwert) 24.10.2013 [email protected] 10 Zusammenfassung: IteraEve Algorithmen vs. Rekursionen •  Vorteile rekursiver gegenüber iteraEver Alg. –  Rekursive Alg. sind ok natürlicher und einfacher zu finden als iteraEve, insbesondere bei rekursiven Aufgabenstellungen –  Laufzeit und Korrektheit ok einfacher auszuwerten. (Rek. Zeitgl.) –  Rekursive Alg. können in der Regel mit weniger Zeilen Code impl. werden ‐> wartungsfreundlicher •  Nachteile rekursiver gegenüber iteraEver Alg. –  geringere Effizienz und höherer Speicherbedarf (Stapel) •  Fausregel: verwende Rekursionen wenn die Problemformulierung rekursive Elemente enthält. Vermeide Rekursionen wenn es offensichtliche iteraEve Lösungen gibt. 24.10.2013 [email protected] 11 3) Das Teile u. Herrsche Prinzip Divide & Conquer •  Teile: das Problem in eine Anzahl von Teilproblemen auf •  Herrsche: Löse die Teilprobleme durch rekursive Aufrufe. Im Trivialfall wird das Problem direkt gelöst. •  Verbinde: die Teillösungen zu einer Gesamtlösung des Ausgangsproblems. •  Voraussetzungen: –  Problem ist teilbar –  Lösung aus Teillösungen einfacher konstruierbar •  Verwendet Rekursionen 24.10.2013 [email protected] 12 Ein Beispiel zum Teile u. Herrsche Prinzip •  Suchen in vorsorEerten linearen Feldern: Input: Feld A[1..n] mit A[1] ≤ A[2] ≤ … ≤ A[n] Output: Index t für das gesuchte Element x (A[1] ≤ x ≤ A[n]) Falls x ∉ A, wird als Ergebnis ‐1 ausgegeben •  Formulierung: –  Hat das Feld nur ein Element, so vergleiche dieses und gib das Ergebnis zurück. –  Besteht die Liste aus mehr als einem Element, so teile die Liste in der Mioe und vergleiche das größte Element der ersten Liste mit dem gesuchten Element. –  Wiederhole diesen Vorgang mit jener Liste in der sich das Element befinden könnte. 24.10.2013 [email protected] 13 Ein Beispiel zum Teile u. Herrsche Prinzip •  Suchen in vorsorEerten linearen Feldern: aus AuD VO der Techn. Uni. München, C. Eckert & Th. SEbor 24.10.2013 [email protected] 14 Ein Beispiel zum Teile u. Herrsche Prinzip (Binärsuche) Teile das Feld in zwei gleich große Hälken und vergleiche mit dem mioleren Element; falls ident → gefunden, sonst suche entweder in der linken (kleiner) oder rechten Hälke (größer) weiter 24.10.2013 [email protected] 15 Ein Beispiel zum Teile u. Herrsche Prinzip (Binärsuche) Teile das Feld in zwei gleich große Hälken und vergleiche mit dem mioleren 1.  Einführung u. Grundlagen Element; falls ident → gefunden, sonst suche entweder in der linken (kleiner) oder rechten Hälke (größer) weiter 2.  Algorithmische Grundprinzipien iteraEve Version 3.  SorEerverfahren Aufruf: BINSUCH_ITERATIV(1,n,x) 4.  Suchen in linearen Feldern 5.  Suchen in Bäumen 24.10.2013 [email protected] 16 4) "Gierige" Algorithmen (Greedy Algorithms) •  Wähle schrioweise jenen Folgezustand der den größten Gewinn bzw. das beste Ergebnis liefert. •  Schnelle Impl., Gute Laufzeit, lösen viele Probleme aber nicht opEmal (lokales OpEmum) •  Voraussetzungen: –  Zustände lassen sich bewerten (Maß für den Gewinn) –  Zustände lassen sich einfach überführen (durch AkEonen, z.B. ziehen von Zahlen) –  KonEnuierliche Verbesserung einfach berechenbar 24.10.2013 [email protected] 17 Ein Beispiel zu "Gierige" Algorithmen 24.10.2013 [email protected] aus AuD VO der HS. RheinMain, Prof. Dr. Peter Barth 18 Ein Beispiel zu "Gierige" Algorithmen 24.10.2013 [email protected] aus AuD VO der HS. RheinMain, Prof. Dr. Peter Barth 19 Ein Beispiel zu "Gierige" Algorithmen •  Pfad mit der größten Knotensumme in einem Binärbaum •  Nach der (7) wählt der Alg. die (12) •  ε‐greedy algorithms: –  Wähle mit einer gewissen Wahrscheinlichkeit eine zufällige AkEon –  Wähle das beste Ergebniss aus vielen Durchläufen 24.10.2013 [email protected] 20 Wikipedia Eintrag zu Greedy Algorithms, Stand Okt. 2013 5) Dynamische Programmierung •  Richard Bellman (Bellman EquaEon), Regelungstechnik •  Wie im Teile u. Herrsche Prinzip baut die Gesamtlösung auf Teillösungen eines Problems auf. •  Allerdings: Lösungen zu Teilproblemen werden nicht rekursiv berechnet sondern iteraEve berechnet •  im Gegensatz zu Teile u. Herrsche Alg. müssen die Teilprobleme nicht unabhängig voneinander sein •  Voraussetzungen (wie bei "gierigen" Alg.): –  Zustände lassen sich bewerten (Maß für den Gewinn) –  Zustände lassen sich einfach überführen –  KonEnuierliche Verbesserung einfach berechenbar 24.10.2013 [email protected] 21 Ein Beispiel zu Dynamischer Programmierung •  Fibonacci Zahlen: •  FunkEonsaufrufe der rekursiven Impl. f(6) f(5) + f(4) (f(4) + f(3)) + (f(3) + f(2)) .... 24.10.2013 f n = f n−1 + f n−2 , n ≥ 3; f1 = f 2 = 1
⇒
1,
1,
2,
3,
5,
8,
13,
21,
…
[email protected] 22 hop://en.wikibooks.org/wiki/Algorithms/Dynamic_Programming, Stand Okt. 2013 Ein Beispiel zu Dynamischer Programmierung •  Wiederverwenden der Teilergebnisse (MemorizaEon) Algorithmus fib(n, A) if n = 1 return n else‐if A[n] != ‐1 return A[n] else A[n] = fib(n ‐ 1) + fib(n ‐ 2) return A[n] 24.10.2013 T(n) = Θ(cn) (exponentiell!) Θ(n)
S(n) = O(n)
[email protected] 23 hop://en.wikibooks.org/wiki/Algorithms/Dynamic_Programming, Stand Okt. 2013 Ein Beispiel zu Dynamischer Programmierung •  Wiederverwenden der Teilergebnisse (MemorizaEon) T(n) = Θ(cn) (exponentiell!) Θ(n)
S(n) = O(n) (Rek. Aufr. und A)
Top-Down Alg. mit Rekursionen
Buttom-Up Alg. ohne Rekursionen
-> Dynamische Programmierung
Tabelle wird sukzessive mit
Teilergebnissen gefüllt.
24.10.2013 wie in der IteraEven ImplemenEerung [email protected] 24 Ein Beispiel zu Dynamischer Programmierung •  Längster Pfad in einem Grid (Manhaoan Tourist Problem) Zahlen=# der Sehenswürdigkeiten 24.10.2013 nur Bewegungen nach Osten oder Süden sind erlaubt. [email protected] 25 Eric B. Laber Hua Zhou, North Carolina State Uni. Ein Beispiel zu Dynamischer Programmierung •  Wiederverwenden der Teilergebnisse (MemorizaEon) 24.10.2013 [email protected] 26 Eric B. Laber Hua Zhou, North Carolina State Uni. Ein Beispiel zu Dynamischer Programmierung •  Wiederverwenden der Teilergebnisse (MemorizaEon) =S0,1 + 2 =max( S1,0 + 3 , S0,1 + 0 ) 24.10.2013 [email protected] 27 Eric B. Laber Hua Zhou, North Carolina State Uni. Ein Beispiel zu Dynamischer Programmierung •  Wiederverwenden der Teilergebnisse (MemorizaEon) 24.10.2013 [email protected] 28 Eric B. Laber Hua Zhou, North Carolina State Uni. Ein Beispiel zu Dynamischer Programmierung •  Wiederverwenden der Teilergebnisse (MemorizaEon) 24.10.2013 [email protected] 29 Eric B. Laber Hua Zhou, North Carolina State Uni. 6) ProbabilisEsche Algorithmen •  Hidden‐Markov‐Models, Monte‐Carlo Alg., ProbabilisEsche Inferenz, Reinforcement Learning und Policy Search Masterstudium •  Machine Learning A •  Machine Learning B •  TheoreEsche InformaEk •  Speech CommunicaEon 2 24.10.2013 [email protected] 30 Danke für Ihre Aufmerksamkeit! Bis zum nächsten Mal. (Donnerstag, 31. Okt. 2013, 11:15, i13) 24.10.2013 [email protected] 31 
Herunterladen