Hallo Welt für Fortgeschrittene

Größe: px
Ab Seite anzeigen:

Download "Hallo Welt für Fortgeschrittene"

Transkript

1 Hallo Welt für Fortgeschrittene Dynamische Programmierung Jan Spieck Programming Systems Group Martensstr Erlangen Germany

2 Gliederung Einführung Definition und Abgrenzung Top-Down und Bottom-Up Anwendungsbeispiele Longest Common Subsequence Optimal Binary Search Trees Komplexität und Optimierung Literatur & Anhang Hallo Welt für Fortgeschrittene Dynamische Programmierung Jan Spieck 2

3 Hinweis zum gezeigten Code Programmierstil: C++ Folgende (bekannte) Abbreviationen werden benutzt: typedef long long ll; #define FOR(i,a,b) for (int i = (a); i < (b); i++) #define FORD(i,a,b) for (int i = int(b)-1; i >= (a); i--) Zudem wird genutzt: using namespace std; Und aus Platzgründen werden alle #includes weggelassen. Hallo Welt für Fortgeschrittene Dynamische Programmierung Jan Spieck 3

4 Definition Dynamische Programmierung: Ursprung in der mathematischen Optimierung (Bellmann) Derivat des allgemeinen Rekursionsverfahren Verfahren: Untergliederung eines Problems in mehrere (ggf. überlappende) Teilprobleme Zwischenspeichern und Wiederverwenden von Teilergebnissen Lösung des Gesamtproblems durch geschickte Kombination der gelösten Teilprobleme Hallo Welt für Fortgeschrittene Dynamische Programmierung Jan Spieck 4

5 Abgrenzung Problemstruktur Optimale Substruktur: Optimale Gesamtlösung ergibt sich aus der optimalen Lösung der Teilprobleme. Also: A optimal & B optimal A B optimal Überlappende Teilprobleme: Es werden Teillösungen mehrfach berechnet, da diese im Rekursionsbaum mehrfach vorkommen. Dies grenzt das Verfahren von Divide & Conquer ab. Beispiel: B A C C D Hallo Welt für Fortgeschrittene Dynamische Programmierung Jan Spieck 5

6 Kaninchenpopulation Wie viele Kaninchenpaare entstehen im Verlauf eines Jahres aus einem Paar? Wir wissen: Kaninchen gebären erstmals ab dem zweiten Monat Jedes Paar bringt dann jeden Monat ein neues Paar auf die Welt Kaninchen sind unsterblich Lösen wir das Problem graphisch! Hallo Welt für Fortgeschrittene Dynamische Programmierung Jan Spieck 6

7 Kaninchenpopulation - Grafik Kaninchenbaum: Monat 1: Monat 2: Monat 3: Monat 4: Hallo Welt für Fortgeschrittene Dynamische Programmierung Jan Spieck 7

8 Kaninchenpopulation - Werte Wir stellen fest: Start: 1 Kaninchenpaar Monat 1: 1 Kaninchenpaar Monat 2: 2 Kaninchenpaare Monat 3: 3 Kaninchenpaare Monat 4: 5 Kaninchenpaare Diese Folge kennen wir doch: Fibonacci Folge Beispiel aus: Liber abaci (Rom 1857) Hallo Welt für Fortgeschrittene Dynamische Programmierung Jan Spieck 8

9 Fibonacci ohne Dynamische Programmierung Berechnen Sie den n-ten Wert der Fibonacci- Folge. Mathematische Definition (mit n 0): fib n = Naive Lösung (mit n 0): o 1 fib n 1 + fib(n 2), falls n = 0, falls n = 1, sonst ll fib (int n){ if (n == 0 n == 1) return n; return fib(n-1) + fib(n-2); } Hallo Welt für Fortgeschrittene Dynamische Programmierung Jan Spieck 9

10 Fibonacci ohne Dynamische Programmierung Aufwand fib(5): Zu hoch, da Mehrfachberechnung f(3) f(5) f(4) Überlappende Teilprobleme! f(2) f(1) f(2) f(3) f(0) f(1) f(0) f(1) f(1) f(2) f(0) f(1) Komplexität: O(2 n ) Hallo Welt für Fortgeschrittene Dynamische Programmierung Jan Spieck 10

11 Geschmacksrichtungen der DP: Top-Down Top-Down: Ausgangspunkt ist der gesuchte Wert (von oben) Rekursiver Abstieg bis zum Basisfall Zwischenspeicherung und Wiederverwendung bereits berechneter Teilergebnisse (Memoization) ll fibs[int_max]; fibs.fill(-1); ll fib_td(int n){ } if (n == 0 n == 1) return n; if (fibs[n] == -1) fibs[n] = fib_td(n-1) + fib_td(n-2); return fibs[n]; Hallo Welt für Fortgeschrittene Dynamische Programmierung Jan Spieck 11

12 Geschmacksrichtungen der DP: Top-Down Beispiel: fib_td(5) f(5) f(3) f(4) f(2) f(3) f(1) f(2) Komplexität: O(n) Start mit gesuchten Wert f(0) f(1) Aufruf In Tabelle f(5) fibs[4] == -1 X f(4) fibs[3] == -1 X f(3) fibs[2] == -1 X f(2) fibs[1] == -1 X f(1) return 1 f(0) return 0 Memo fibs[2] = 1 f(1) return 1 Memo fibs[3] = 2 f(2) fibs[2] == 1 Memo fibs[4] = 3 f(3) fibs[2] == 2 Memo fibs[5] = 5 Hallo Welt für Fortgeschrittene Dynamische Programmierung Jan Spieck 12

13 Geschmacksrichtungen der DP: Top-Down Vorteile: Ausschließliche Berechnung nützlicher Teilprobleme Einfache Implementierung durch intuitiven Ansatz Nachteile: Problematischer Speicheraufwand bei hoher Rekursionstiefe (ggf. Stack Overflow) Zusätzlicher Mehraufwand der Speicherung und Abfrage Hallo Welt für Fortgeschrittene Dynamische Programmierung Jan Spieck 13

14 Geschmacksrichtungen der DP: Bottom-Up Bottom Up: Ausgangspunkt ist die Basis des Problems (von unten) Lösung durch geschickte Strukturierung der Teilprobleme unter Beachtung bereits berechneter Teillösungen Entrekusivierte iterative Fassung des Problems ll fib_bu(int n){ } ll fibs[n+2]; fibs[0] = 0; fibs[1] = 1; FOR(i, 2, n + 1){ } fibs[i] = fibs[i-1] + fibs[i-2]; return fibs[n]; Kann auch vorberechnet werden Hallo Welt für Fortgeschrittene Dynamische Programmierung Jan Spieck 14

15 Geschmacksrichtungen der DP: Bottom-Up Ggf. Vorausberechnung der nötigen Werte: ll fibs[n_max+2]; void precalculate(){ fibs[0] = 0; fibs[1] = 1; FOR(i, 2, n + 1){ fibs[i] = fibs[i-1] + fibs[i-2]; } } ll fib_bu(int n){ return fibs[n]; } Komplexität: Vorberechnung: Zugriff: O(n) O(1) Hallo Welt für Fortgeschrittene Dynamische Programmierung Jan Spieck 15

16 Geschmacksrichtungen der DP: Bottom-Up Mischung, welche immer nur unbekannte Werte berechnet: ll fibs[n_max+2]; //initialisiert mit -1 fibs[0] = 0; fibs[1] = 1; ll fib_bu(int n){ if(fibs[n-1]!= -1) return (fibs[n] = fibs[n-1] + fibs[n-2]); FOR(i, 2, n + 1){ fibs[i] = fibs[i-1] + fibs[i-2]; } return fibs[n]; } Hallo Welt für Fortgeschrittene Dynamische Programmierung Jan Spieck 16

17 Geschmacksrichtungen der DP: Bottom-Up Beispiel: fib_bu(5) fibs[] abgekürzt durch f[] f[5] Ende mit Startwert f[4] f[3] f[2] f[0] f[1] Start mit Basis Hallo Welt für Fortgeschrittene Dynamische Programmierung Jan Spieck 17

18 Geschmacksrichtungen der DP: Bottom-Up Vorteile: Bei geschickter Programmierung entstehen Laufzeitvorteile Probleme der Rekursion entfallen (Overhead, Overflow, ) Nachteile: Kompliziertere Problemlösung (ggf. weniger intuitiv) Bei Vorberechnung werden auch nicht benötigte Werte berechnet (zudem: Obergrenze muss bekannt sein) Hallo Welt für Fortgeschrittene Dynamische Programmierung Jan Spieck 18

19 Zusammenfassung Lösen mittels DP Schritte der Dynamischen Programmierung: 1. Analyse o Kann ein Problem in Teilprobleme untergliedert werden? o Führt deren Zusammensetzung zur optimalen Lösung? 2. Mathematische Fixierung o Aufstellen der Rekursionsgleichung o (Pseudocode) 3. Algorithmische Umsetzung o Lösen mittels Top-Down Ansatz o Ggf. Umformung in eine Bottom-Up Lösung 4. Optimierung hinsichtlich Zeit und Platz Hallo Welt für Fortgeschrittene Dynamische Programmierung Jan Spieck 19

20 Wo sind wir? Einführung Definition und Abgrenzung Top-Down und Bottom-Up Anwendungsbeispiele Longest Common Subsequence Optimal Binary Search Trees Komplexität und Optimierung Literatur & Anhang Hallo Welt für Fortgeschrittene Dynamische Programmierung Jan Spieck 20

21 Longest Common Subsequence Einführung Problemstellung Gegeben: zwei Zeichenketten X (x 1,, x n ) und Y (y 1,, y m ) Gesucht: längste gemeinsame Folge Z, die identische Zeichen von X und Y in derselben Reihenfolge enthält, wobei Zeichen ausgelassen werden dürfen Beispiele: X = WASSER Y = AERMEL Z = AER X = MUSIK Y = SIMPEL Z = SI! Gieriges Vorgehen (d.h. jeden doppelten Buchstaben sofort nehmen) führt nicht zwingend zum Optimum! Hallo Welt für Fortgeschrittene Dynamische Programmierung Jan Spieck 21

22 Longest Common Subsequence Anwendung Anwendungsgebiete: Textvergleich (z.b. diff) Unterschiede zweier Programmtexte (Mergen, z.b. Git) Unterschiede von Programmausgaben (ICPC) Bioinformatik Analyse von DNA und Proteinsequenzen Benutzen Generalisierungen von LCS Hallo Welt für Fortgeschrittene Dynamische Programmierung Jan Spieck 22

23 Longest Common Subsequence Brute Force Problemlösung (naiv, Brute Force): 1. Berechne alle Teilstrings von X oder Y 2. Überprüfe welcher Teilstring in der anderen Folge vorkommt 3. Wähle die längste Kette aus Beispiel: X = CAB Y = ABC Teilstrings von X: Vorkommen in Y: Längste Kette: { C, A, B, CA, CB, AB, CAB } { C, A, B, AB } AB Aufwand: viel zu groß, selbst bei kleinen Beispielen! Hallo Welt für Fortgeschrittene Dynamische Programmierung Jan Spieck 23

24 Longest Common Subsequence Definitionen Definitionen: X x 1,, x m und Y y 1,, y n zwei Zeichenketten Z z 1,, z q : eine LCS von X und Y X i, Y j, Z k : Präfix von X, Y, Z bis zur Stelle i, j, k c[i, j]: Länge der längsten LCS von X i und Y j Beispiel der Schreibweisen (keine Nullindizierung!): X = SPATZ Y = KATZEN (m = 5, n = 6) x 1 = S y 3 = T X 3 = "SPA" Y 4 = "KATZ" c 3,4 = 1 (LCS = "A") Hallo Welt für Fortgeschrittene Dynamische Programmierung Jan Spieck 24

25 Longest Common Subsequence Beispiel Wir bestimmen die Länge der LCS: Idee: Wir vergleichen die Wörter beim ersten Zeichen beginnend Sind die Zeichen gleich: Buchstabe kommt in der LCS vor LCS = LCS + 1 Vergleichen der beiden Reststrings Sind die Zeichen unterschiedlich: Höchstens einer der Buchstaben ist in der LCS Wir schauen, ob einer der beiden Reststrings, das Zeichen des anderen Wortes enthält (Fallunterscheidung) Hallo Welt für Fortgeschrittene Dynamische Programmierung Jan Spieck 25

26 Longest Common Subsequence Rekursiv Mathematisch: lcs(x, Y) = 0 lcs(x i+1, Y j+1 ) + 1 max(lcs X, Y j+1, lcs X i+1, Y ) falls X = 0 Y = 0 falls x i = y j falls x i y j Algorithmisch: int lcs(char * X, char * Y){ } if ( * X == \0 * Y == \0 ) return 0; else if ( * X == * Y){ else return lcs(x+1, Y+1)+ 1; return max(lcs(x, Y+1), lcs(x+1, Y)); Hallo Welt für Fortgeschrittene Dynamische Programmierung Jan Spieck 26

27 Longest Common Subsequence Rekursiv Worst Case Fall: X = AST Y = UND x 1 y 1 Überlappende Teilprobleme! x 1 y 2 x 2 y 1 x 1 y 3 x 2 y 2 x 2 y 2 x 3 y 1 x 2 y 3 x 3 y 2 x 2 y 3 x 3 y 2 Hallo Welt für Fortgeschrittene Dynamische Programmierung Jan Spieck 27

28 Longest Common Subsequence Dynamisch int lcs(char * X, char * Y){ if ( * X == \0 * Y == \0 ) return 0; else if ( * X == * Y){ return lcs(x+1, Y+1)+ 1; else return max(lcs(x+1, Y), lcs(x, Y+1)); } Diese intuitive Lösung ist korrekt, aber zu zeitaufwendig. Komplexität ist im Worst Case Ο(2 n ) (keine gleichen Zeichen). Wir lösen das Problem nun mit Bottom-Up DP. Hallo Welt für Fortgeschrittene Dynamische Programmierung Jan Spieck 28

29 Longest Common Subsequence Bottom Up Beispiel Tafel (bzw. Anhang) Mathematische Definition: c i, j = 0 c i 1, j max(c i, j 1, c[i 1, j]) falls i = 0 j = 0 falls i, j > 0 x i = y j falls i, j > 0 x i y j Diese Formulierung lässt sich wiederum algorithmisch ausdrücken. Hallo Welt für Fortgeschrittene Dynamische Programmierung Jan Spieck 29

30 Longest Common Subsequence Bottom Up string X = /* */, Y = /* */; ll c[maxm+1][maxn+1]; //initialisiert mit 0 ll LCS() { } FOR(i, 0, X.size()){ } FOR(j, 0, Y.size()){ } if (X[i] == Y[i]){ c[i+1][j+1] = c[i][j] + 1; } else { } c[i+1][j+1] = max(c[i][j+1], c[i+1][j]); return c[x.size()][y.size()]; Komplexität: Ο(N M) Hallo Welt für Fortgeschrittene Dynamische Programmierung Jan Spieck 30

31 Longest Common Subsequence Vorteile Optimierungen: Wir sparen uns den Fall (X[i] == 0 Y[i] == 0), indem wir eine Nullzeile/-spalte einführen. Wir nutzen Memoization, um Teilergebnisse wiederverwenden zu können. Wir berechnen die Lösung iterativ Bisher berechnet der Algorithmus nur die Länge der längsten gemeinsamen Subsequenz. Um die eigentliche gemeinsame Sequenz herauszufinden, ergänzen wir den Algorithmus um eine Methode, welche die Bottom-Up Tabelle rückwärts nutzt. Hallo Welt für Fortgeschrittene Dynamische Programmierung Jan Spieck 31

32 Longest Common Subsequence Tabelle Beispiel einer Tabelle: X = OPA Y = TOA x i O P A y i T O A Wir starten bei c n [m]: Gleiche Buchstaben werden sicher genutzt A. Wir betrachten als nächstes Zelle c n 1 m 1. Hallo Welt für Fortgeschrittene Dynamische Programmierung Jan Spieck 32

33 Longest Common Subsequence Tabelle Beispiel einer Tabelle: X = OPA Y = TOA Weiter bei c n 1 [m 1]: x i O P A y i T O A Bei ungleichen Buchstaben differenzieren wir zwischen den Zeichen von X und Y. Wir nehmen das Maximum der Zellen c n 2 m 1 und c n 1 m 2. Hier c n 2 m 1 = 1. Hallo Welt für Fortgeschrittene Dynamische Programmierung Jan Spieck 33

34 Longest Common Subsequence Tabelle Beispiel einer Tabelle: X = OPA Y = TOA x i O P A y i T O A Weiter bei c n 2 [m 1]: Gleiche Buchstaben werden sicher genutzt. O Wir betrachten als nächstes c n 3 m 2 Hallo Welt für Fortgeschrittene Dynamische Programmierung Jan Spieck 34

35 Longest Common Subsequence Tabelle Beispiel einer Tabelle: X = OPA Y = TOA Weiter bei c n 3 [m 2]: x i O P A y i T O A Der Wert ist 0; es kommt also kein neuer Buchstabe mehr dazu. Wir sind fertig! Hallo Welt für Fortgeschrittene Dynamische Programmierung Jan Spieck 35

36 Longest Common Subsequence Rekonstruktion Wir speichern die Zeichen in w zwischen (Start: w = ) Mathematisch zusammengefasst: f i, j, w = w f(i 1, j 1, x i + w) falls falls falls c i, j = 0 x i = y j x i y j, c i, j 0 Fallunterscheidung bei ungleichem Zeichen: = f(i 1, j, w) f(i, j 1, w) falls falls c i 1, j c[i, j 1] sonst Hallo Welt für Fortgeschrittene Dynamische Programmierung Jan Spieck 36

37 Longest Common Subsequence Rekonstruktion Algorithmus: string word(ll i, ll j) { if (i==0 j==0) return ; if (X[i-1] == Y[j-1]) return word(i-1, j-1) + X[i-1]; else if (c[i-1][j] >= c[i][j-1]) return word(i-1, j); else return word(i, j-1); } Hier entfällt die Speicherung im Wort w (stattdessen im return). Aufgerufen wird die Funktion mit: word(x.size(), Y.size()) Hallo Welt für Fortgeschrittene Dynamische Programmierung Jan Spieck 37

38 OBST Optimal Binary Search Trees Der typische Obstbaum: Hallo Welt für Fortgeschrittene Dynamische Programmierung Jan Spieck 38

39 Optimal Binary Search Trees - Suchmaschine Hello Wir betreiben eine eigene limitierte Suchmaschine, bei der Nutzer nur nach Keywords suchen können: Wir verwalten die Suchanfragen in einem Baum: Auf Grund der letzten Suchanfragen wissen wir wie häufig nach einem Begriff gesucht wurde Knoten enthalten die Suchbegriffe als Key (lexikographische Sortierung) und die zugehörigen Daten (z.b. Text) Für nicht vorhandenen Keywords verwenden wir Dummies als Blätter (#(Dummies) = #(Knoten) + 1) Wie sieht der optimale binäre Suchbaum aus? Hallo Welt für Fortgeschrittene Dynamische Programmierung Jan Spieck 39

40 Optimal Binary Search Trees - Problemstellung Problemstellung Gegeben: Knoten (k i ) enthalten Daten und Keys Blätter sind Dummy-Elemente (d i ) mit eigenen Keys (es wird nach einen lexikographisch kleineren/größeren Wert gesucht) Keys haben gewisse Wahrscheinlichkeit (p i, q i (Dummy)) Bsp.: k 1 d 1 k 2 d 2 d 3 Knoten = {k 1, k 2 } Daten = {he.html, wo.html} Keys = { Hello, World } p i = {0.3, 0.4} q i = {0.05, 0.1, 0.15} Hallo Welt für Fortgeschrittene Dynamische Programmierung Jan Spieck 40

41 Optimal Binary Search Trees - Problemstellung Problemstellung Gesucht: Minimale Kosten eines binären Suchbaumes (c baum ) Kosten eines Knoten (c i ) bestimmt sich durch eine Gewichtungsfunktion g (z.b. Tiefe (T(x)) * Wahrscheinlichkeit) Kosten des Baumes ist die Summe der Kosten der Knoten Bsp.: k 1 g x = Tiefe x + 1 Whrs(x) p i = {0.3, 0.4} q i = {0.05, 0.1, 0.15} d 1 k 2 c baum = c i = p i T k i + q i T(d i ) i i i d 2 d 3 Erfolg Misserfolg Hallo Welt für Fortgeschrittene Dynamische Programmierung Jan Spieck 41

42 Optimal Binary Search Trees Binärer Suchbaum Wiederholung: Binärer Suchbaum: Jeder Knoten hat höchstens zwei Kinder (Teilbäume) Alle Knoten des linken Teilbaumes haben einen kleineren Key als ihr Vaterknoten (gilt rekursiv) Alle Knoten des rechten Teilbaums haben einen größeren Key als ihr Vater (rekursiv) 5 Wurzelknoten Hallo Welt für Fortgeschrittene Dynamische Programmierung Jan Spieck 42

43 Optimal Binary Search Trees Brute Force Naiver Algorithmus (Brute Force): Stelle alle möglichen BSTs auf (Wurzelvariation) Berechne für jeden BST die Kosten mittels der Gewichtungsfunktion z.b. c baum = i p i T k i + i q i T(d i ) Wähle den Baum mit den geringsten Kosten aus Problem: Anzahl an BST steigt mit Knotenzahl exponentiell an. Also exponentieller Aufwand. Hallo Welt für Fortgeschrittene Dynamische Programmierung Jan Spieck 43

44 Hallo Welt für Fortgeschrittene Dynamische Programmierung Jan Spieck 44 Optimal Binary Search Trees Anzahl an BSTs Auswahl an BSTs:

45 Optimal Binary Search Trees Definition Wir definieren also einen Teilbaum BST(i, j): Linker Teilbaum hat Knoten k i,, k r 1 (alle kleineren Keys) Die Wurzel ist k r Rechter Teilbaum hat Knoten k r+1,, k j (alle größeren Keys) Beispiel: BST(2, 6) mit r = 3 ohne Dummies k 3 Wurzelknoten k 2 k 5 Wurzel des rechten Teilbaums k 4 k 6 Hallo Welt für Fortgeschrittene Dynamische Programmierung Jan Spieck 45

46 Optimal Binary Search Trees Wurzelvariation Wir können alle möglichen BST bestimmen, indem wir rekursiv den Wurzelknoten k r aller Teilbäume variieren. Kosten für BST(i, j) mit variablem r: c i, j = c linkerteilbaum + c rechterteilbaum + Gewichtung = c i, r 1 + c r + 1, j + g i, j Beispiel: r = 1 r = 2 r = 3 k 1 rekursiv k rekursiv 3 k 2 k 1 k 2 k 1 k 3 k 3 k 2 Hallo Welt für Fortgeschrittene Dynamische Programmierung Jan Spieck 46

47 Optimal Binary Search Trees Kosten von Teilbäumen Kosten für BST(i, j) mit variablem r: c i, j = c linkerteilbaum + c rechterteilbaum + Gewichtung = c i, r 1 + c r + 1, j + g i, j Mit z.b.: Wir nutzen aus: j g i, j = l=i j p l + l=i 1 g i, i 1 = i 1 i 1 l=i p l + l=i 1 q l = q i 1 q l Rekursive Definition: c i, j = q i 1 min c i, r 1 + c r + 1, j + g i, j, falls j = i 1 i r j, falls i j Hallo Welt für Fortgeschrittene Dynamische Programmierung Jan Spieck 47

48 Optimal Binary Search Trees Kosten von Teilbäumen Rekursive Definition: c i, j = q i 1 min c i, r 1 + c r + 1, j + g i, j, falls j = i 1 i r j, falls i j Algorithmus: ll costbcs(ll i, ll j, ll p[], ll q[]) { } if(j == i-1) return q[i-1]; ll tmp = LLONG_MAX; FOR(r, i, j){ } return tmp; tmp = min (tmp, costbcs(i, r-1, p, q) + costbcs(r+1, j, p, q) + g(i, j, p, q)); Hallo Welt für Fortgeschrittene Dynamische Programmierung Jan Spieck 48

49 Optimal Binary Search Trees Problem Wobei g die Gewichtungsfunktion ist ll g(ll i, ll j, ll p[], ll q[]) { /*Gewichtung*/ }; Problem: Mehrfachberechnung von Teilbäumen Lösung: Top Down DP Memoization von gefundenen Kosten eines optimalen Teilbaums Auf Grund der Baumstruktur, ist der Baum schon optimal, wenn sein linker und rechter Teilbaum optimal sind Hallo Welt für Fortgeschrittene Dynamische Programmierung Jan Spieck 49

50 Optimal Binary Search Trees Top Down ll c[max_n][max_n]; //initialisiert mit LLONG_MAX ll costbcs(ll i, ll j, ll p[], ll q[]) { } if(j == i-1) return q[i-1]; if(c[i][j]!= LLONG_MAX) return c[i][j]; ll gewicht = g(i, j, p, q); //nur 1x berechnen FOR(r, i, j){ } c[i][j] = min (c[i][j], costbcs(i, r-1, p, q) + costbcs(r+1, j, p, q) + gewicht); return c[i][j]; Hallo Welt für Fortgeschrittene Dynamische Programmierung Jan Spieck 50

51 Optimal Binary Search Trees Bottom Up Wir wandeln das Problem nun nach Bottom-Up um. Rekursive Definition: c i [j] = min i r j q i 1 c i [r 1] + c[r + 1][j] + g[i][j], falls j = i 1, falls i j Wir cachen die Funktionsaufrufe, sowie die Gewichtung. Mit: j g i j = l=i j p l + l=i 1 q l = g i j 1 + p j + q j Zudem speichern wir uns in einem Array, die optimalen Wurzeln der Teilbäume um die Lösung rekonstruieren zu können. Hallo Welt für Fortgeschrittene Dynamische Programmierung Jan Spieck 51

52 Optimal Binary Search Trees Bottom Up ll c[max_n+1][max_n]; //initialisiert mit LLONG_MAX ll g[max_n+1][max_n]; //initialisiert mit 0 ll root[max_n][max_n]; //initialisiert mit 0 void costbcs(ll n, ll p[], ll q[]) { FOR(i, 1, n+1){c[i][i-1]=q[i-1]; g[i][i-1]=q[i-1];} FOR(size, 1, n){ //Sequenzgröße FOR(i, 1, n - size + 1){ //Startpunkt ll j = i + size - 1; g[i][j] = g[i][j-1] + q[j] + p[j]; FOR(r, i, j){ //Wurzel ll tmp = c[i][r-1]+c[r+1][j]+g[i][j]; if(tmp < c[i][j]){ c[i][j] = tmp; root[i][j] = r; } } } } } Hallo Welt für Fortgeschrittene Dynamische Programmierung Jan Spieck 52

53 Optimal Binary Search Trees Bottom Up Komplexität: O(n 3 ) Rekonstruktion der Lösung: Wurzeln aller optimalen Teilbäume im Array root root[i][j] enthält Index r Mit k r als Wurzel des optimalen Suchbaums Für die Keys k i,, k j Im Folgenden noch ein abschließendes Beispiel, an dem der Bottom-Up Algorithmus erläutert wird. Hallo Welt für Fortgeschrittene Dynamische Programmierung Jan Spieck 53

54 Optimal Binary Search Trees Beispiel Wir haben folgende Tabelle gegeben: i p i q i Der Algorithmus liefert folgende Pyramide für die Kosten: 5 1 j i Bsp.: c 1 1 = c c g 1 1 = = 0.45 Hallo Welt für Fortgeschrittene Dynamische Programmierung Jan Spieck 54 q i

55 Optimal Binary Search Trees Beispiel i p i q i Der Algorithmus liefert folgende Pyramide für die Gewichtung: g i j = g i j 1 + p i + q i g i i 1 = q i j 2 5 für i j i 5 g 1 1 = g p 1 + q 1 = = q i Hallo Welt für Fortgeschrittene Dynamische Programmierung Jan Spieck 55

56 Optimal Binary Search Trees Beispiel i p i q i Der Algorithmus liefert folgende Pyramide für die Wurzel: 1 j i 5 Wir wissen, dass die oberste Wurzel r[1][5] lautet, da diese die Schlüssel k 1,, k 5 umfasst. r[1][5] = 2. k 2 Hallo Welt für Fortgeschrittene Dynamische Programmierung Jan Spieck 56

57 Optimal Binary Search Trees Beispiel Der Algorithmus liefert folgende Pyramide für die Wurzel: 1 j Der linke Teilbaum umfasst die Knoten k 1,, k 1 (also nur k 1 ): r 1 1 = 1 Der rechte Teilbaum umfasst die Knoten k 3,, k 5 : r 3 5 = i 5 k 2 k 1 k 5 Hallo Welt für Fortgeschrittene Dynamische Programmierung Jan Spieck 57

58 Optimal Binary Search Trees Beispiel Der Algorithmus liefert folgende Pyramide für die Wurzel: 1 j i 5 k 2 k 1 k 5 k 4 k 3 Der linke Teilbaum von k 5 umfasst die Knoten k 3,, k 4 r 3 4 = 4 Der linke Teilbaum von k 4 umfasst die Knoten k 3,, k 3 : r 3 3 = 3 Jetzt sollte auch klar sein, dass r[i][i] = i Hallo Welt für Fortgeschrittene Dynamische Programmierung Jan Spieck 58

59 Wo sind wir? Einführung Definition und Abgrenzung Top-Down und Bottom-Up Anwendungsbeispiele Longest Common Subsequence Optimal Binary Search Trees Komplexität und Optimierung Literatur & Anhang Hallo Welt für Fortgeschrittene Dynamische Programmierung Jan Spieck 59

60 Komplexität des Speicheraufwandes Grundsätzlich kann man die dynamische Programmierung als geschicktes Cachen von Teilergebnissen verstehen. Die Komplexität des Speicheraufwandes lässt sich durch die zu cachenden Parameter der Funktion abschätzen: fib n lcs n, m g(x, y, z) 1D Array 2D Array 3D Array Allgemein: Sei p die Anzahl der (gleich großen) Parameter n, dann beträgt der Speicheraufwand O(n p ) Hallo Welt für Fortgeschrittene Dynamische Programmierung Jan Spieck 60

61 Optimierung der dynamischen Programmierung Ziel: Optimierung der Zeit- und Speicherkomplexität von Problemen der dynamischen Programmierung Möglichkeit 1: Voraussetzung: Anwendung: Verschmelzen äquivalenter Zustände Existenz vieler gleichwertiger, redundanter Zustände ohne Priorität Einführung von Superzuständen, die eine Äquivalenzklasse von Zuständen entsprechen Diese Methode empfiehlt sich bei Problemen, in denen die Reihenfolge von Zuständen egal ist. Beispiel: (1, 2, 3, 4) ist gleichwertig zu (1, 3, 2, 4) Zustände zu einer Menge verschmelzen {1, 2, 3, 4} Hallo Welt für Fortgeschrittene Dynamische Programmierung Jan Spieck 61

62 Optimierung der dynamischen Programmierung Möglichkeit 2: Voraussetzung: Anwendung: Eliminieren unnötiger Zustände Existenz derselben Überspringen der Zustände Unnötige Zustände tragen keinen Gewinn für Optimierungsprobleme bei (haben z.b. den Wert 0). Möglichkeit 3: Voraussetzung: Anwendung: Vorberechnung Mehrere Zustände benötigen dieselbe einmalige Berechnung Berechnung vor dem Start der DP Das kann z.b. die Berechnung einer komplizierten mathematischen Konstante sein. Hallo Welt für Fortgeschrittene Dynamische Programmierung Jan Spieck 62

63 Optimierung der dynamischen Programmierung Es gibt noch weitere Optimierungsmethoden, welche die Performanz einer DP-Lösung noch weiter verbessern können. Beispiele: Nutzen von Matrix-Multiplikation (Fast Exponentiation) Nutzen komplexer Datenstrukturen Segment Trees Binäre Suchbäume Grundsätzlich gilt aber die Bauernregel: Erst den besten Algorithmus selektieren, bevor du anfängst zu optimieren Hallo Welt für Fortgeschrittene Dynamische Programmierung Jan Spieck 63

64 Prominente DP-Algorithmen Sind unter anderem: Bellman-Ford CYK Traveling Salesperson Problem (TSP) Matrixketten-Multiplikation Longest {Common, Increasing} Subsequence Levenshtein-Distanz Rucksackproblem Hallo Welt für Fortgeschrittene Dynamische Programmierung Jan Spieck 64

65 Fazit Dynamische Programmierung: Lösen von speziellen Optimierungsproblemen Optimale Teillösungen bilden optimalen Gesamtlösung Überlappende Teilprobleme nur einmal gelöst (Memoization) Ungeeignet für: Sehr große Probleme, d.h. zu große Rekursionstiefe, zu großer Speicheraufwand, zu komplizierte Vorausberechnung Reelle Zahlen als Parameter Probleme mit effizienteren Algorithmen (z.b. Greedy) DP ist ein Austausch von Platz gegen Zeit! Hallo Welt für Fortgeschrittene Dynamische Programmierung Jan Spieck 65

66 Vielen Dank für eure dankenswerte Aufmerksamkeit! Gibt es noch Fragen? Hallo Welt für Fortgeschrittene Dynamische Programmierung Jan Spieck 66

67 Wo sind wir? Einführung Definition und Abgrenzung Top-Down und Bottom-Up Anwendungsbeispiele Longest Common Subsequence Optimal Binary Search Trees Komplexität und Optimierung Literatur & Anhang Hallo Welt für Fortgeschrittene Dynamische Programmierung Jan Spieck 67

68 Literatur Verwendete Materialien: T. Cormen, et al.: Introductions to Algorithms, 3rd edition Julian Brost: Dynamische Programmierung (Hallo Welt, 2013) Moritz Knaut: Dynamische Programmierung (Hallo Welt, 2014) Felix Lugauer: Dynamische Programmierung (Hallo Welt, 2009) Ludwig Höcker: Dynamische Programmierung (Hallo Welt, 2012) Tobias Werth: Dynamic Programming (2004) =697925&start=0&mc= Hallo Welt für Fortgeschrittene Dynamische Programmierung Jan Spieck 68

69 Literatur Verwendete Materialien: Hallo Welt für Fortgeschrittene Dynamische Programmierung Jan Spieck 69

70 Literatur Verwendete Materialien: / Hallo Welt für Fortgeschrittene Dynamische Programmierung Jan Spieck 70

71 Anhang LCS Beispiel Wir bestimmen die Länge der LCS c n, m : Beispiel: X = APO Y = AOT (n = 3, m = 3) Alle LCS mit leeren Worten sind 0: c 1 n, 0 = c 0,1 m = 0 Vergleichen wir X und Y beginnend bei x 1 : x 1 = A = y 1 c 1,1 = 1 + c 0,0 = 1 x 1 = A y 2 = O c 1,2 = max c 0,2, c 1,1 = 1 x 1 = A y 3 = T c 1,3 = max c 0,3, c 1,2 = 1 Hallo Welt für Fortgeschrittene Dynamische Programmierung Jan Spieck 71

72 Anhang LCS Beispiel Beispiel: X = APO Y = AOT Wir wissen: c 1,0 = c 2,0 = c 3,0 = c 0,1 = c 0,2 = c[0,3] = 0 c 1,1 = c 1,2 = c 1,3 = 1 Vergleichen wir X und Y beginnend bei x 2 : x 2 = P y 1 = A c 2,1 = max c 1,1, c 2,0 = 1 x 2 = P y 2 = O c 2,2 = max c 1,2, c 2,1 = 1 x 2 = P y 3 = T c 2,3 = max c 1,3, c 2,1 = 1 Hallo Welt für Fortgeschrittene Dynamische Programmierung Jan Spieck 72

73 Anhang LCS Beispiel Beispiel: X = APO Y = AOT Wir wissen: c 1,0 = c 2,0 = c 3,0 = c 0,1 = c 0,2 = c[0,3] = 0 c 1,1 = c 1,2 = c 1,3 = 1 c 2,1 = c 2,2 = c 2,3 = 1 Vergleichen wir X und Y beginnend bei x 3 : x 3 = O y 1 = A c 3,1 = max c 2,1, c 3,0 = 1 x 3 = O = y 2 c 3,2 = c 2,1 + 1 = 2 x 3 = O y 3 = T c 3,3 = max c 2,3, c 3,2 = 2 LCD hat die Länge 2 (c 3,3 = 2) Hallo Welt für Fortgeschrittene Dynamische Programmierung Jan Spieck 73

Hallo Welt für Fortgeschrittene

Hallo Welt für Fortgeschrittene Hallo Welt für Fortgeschrittene Dynamische Programmierung Thomas Karmann 4. Juni 2010 1 / 36 Übersicht Einführung Definition Anwendung Funktionsweise Grundlagen Memoisation Top-Down Bottom-Up Grenzen Anwendungsbeispiele

Mehr

Dynamische Programmierung

Dynamische Programmierung Dynamische Programmierung Ludwig Höcker 13.06.2012 Ludwig Höcker Dynamische Programmierung 13.06.2012 1 / 61 Gliederung Dynamic Programming Bsp.: FAU-Kabel Naiv Top-Down Bottom-Up Longest Increasing Subsequence

Mehr

Dynamische Programmierung

Dynamische Programmierung Dynamische Programmierung Claudia Gerhold 9.5.6 Claudia Gerhold Dynamische Programmierung 9.5.6 / 4 Agenda Einführung Dynamische Programmierung Top-Down Ansatz mit Memoization Bottom-Up Ansatz 3 Anwendungsbeispiele

Mehr

Datenstrukturen & Algorithmen

Datenstrukturen & Algorithmen Datenstrukturen & Algorithmen Matthias Zwicker Universität Bern Frühling 2010 Übersicht Dynamische Programmierung Einführung Ablaufkoordination von Montagebändern Längste gemeinsame Teilsequenz Optimale

Mehr

Dynamische Programmierung

Dynamische Programmierung Dynamische Programmierung Julian Brost 11. Juni 2013 Julian Brost Dynamische Programmierung 11. Juni 2013 1 / 39 Gliederung 1 Was ist dynamische Programmierung? Top-Down-DP Bottom-Up-DP 2 Matrix-Kettenmultiplikation

Mehr

Algorithmen und Komplexität

Algorithmen und Komplexität Algorithmen und Komplexität Dynamische Programmierung Markus Ullrich Norbert Baum Fachbereich Informatik - IIb07 Hochschule Zittau/Görlitz 28. Mai 2009 1 / 29 Wie sieht es mit langen Ketten aus? A 1 A

Mehr

Dynamische Programmierung

Dynamische Programmierung Dynamische Programmierung Manuel Grandeit Hallo Welt -Seminar 28.06.2011 Manuel Grandeit 1 / 40 Inhaltsübersicht Einführung Münzwechsel Was ist ein Zustand? Konstruktion einer DP-Lösung Top-Down-DP Bottom-Up-DP

Mehr

19. Dynamic Programming I

19. Dynamic Programming I 495 19. Dynamic Programming I Fibonacci, Längste aufsteigende Teilfolge, längste gemeinsame Teilfolge, Editierdistanz, Matrixkettenmultiplikation, Matrixmultiplikation nach Strassen [Ottman/Widmayer, Kap.

Mehr

19. Dynamic Programming I

19. Dynamic Programming I 495 19. Dynamic Programming I Fibonacci, Längste aufsteigende Teilfolge, längste gemeinsame Teilfolge, Editierdistanz, Matrixkettenmultiplikation, Matrixmultiplikation nach Strassen [Ottman/Widmayer, Kap.

Mehr

Dynamische Programmierung

Dynamische Programmierung Dynamische Programmierung Hannes Schwarz - WS-06/07 Hannes.Schwarz@uni-konstanz.de Getting Ready for the ACM Programming Contest Übersicht Übersicht Was ist dynamische Programmierung? Entwicklung eines

Mehr

6. Algorithmen auf Zeichenketten

6. Algorithmen auf Zeichenketten 6. Algorithmen auf Zeichenketten Motivation Wir lernen nun Algorithmen zur Lösung verschiedener elementarer Probleme auf Zeichenketten zu lösen Zeichenketten spielen eine wichtige Rolle in diversen Gebieten

Mehr

Dynamische Programmierung. Problemlösungsstrategie der Informatik

Dynamische Programmierung. Problemlösungsstrategie der Informatik als Problemlösungsstrategie der Informatik und ihre Anwedung in der Diskreten Mathematik und Graphentheorie Fabian Cordt Enisa Metovic Wissenschaftliche Arbeiten und Präsentationen, WS 2010/2011 Gliederung

Mehr

Algorithmen und Datenstrukturen (für ET/IT)

Algorithmen und Datenstrukturen (für ET/IT) Algorithmen und Datenstrukturen (für ET/IT) Sommersemester 05 Dr. Tobias Lasser Computer Aided Medical Procedures Technische Universität München Programm heute Einführung Grundlagen von Algorithmen Grundlagen

Mehr

Übung zu Algorithmen und Datenstrukturen (für ET/IT)

Übung zu Algorithmen und Datenstrukturen (für ET/IT) Übung zu Algorithmen und Datenstrukturen (für ET/IT) Sommersemester 2017 Rüdiger Göbl, Mai Bui Computer Aided Medical Procedures Technische Universität München Fibonacci Zahlen Fibonacci Folge Die Fibonacci

Mehr

11. Übung Algorithmen I

11. Übung Algorithmen I Timo Bingmann, Christian Schulz INSTITUT FÜR THEORETISCHE INFORMATIK, PROF. SANDERS KIT Timo Universität Bingmann, des LandesChristian Baden-Württemberg Schulz und nationales Forschungszentrum in der Helmholtz-Gemeinschaft

Mehr

Wiederholung. Divide & Conquer Strategie

Wiederholung. Divide & Conquer Strategie Wiederholung Divide & Conquer Strategie Binäre Suche O(log n) Rekursives Suchen im linken oder rechten Teilintervall Insertion-Sort O(n 2 ) Rekursives Sortieren von a[1..n-1], a[n] Einfügen von a[n] in

Mehr

Übersicht. Aktivitäten-Auswahl-Problem. Greedy Algorithmen. Aktivitäten-Auswahl-Problem. Aktivitäten-Auswahl-Problem. Datenstrukturen & Algorithmen

Übersicht. Aktivitäten-Auswahl-Problem. Greedy Algorithmen. Aktivitäten-Auswahl-Problem. Aktivitäten-Auswahl-Problem. Datenstrukturen & Algorithmen Datenstrukturen & Algorithmen Übersicht Greedy Algorithmen Einführung Aktivitäten-Auswahl-Problem Huffman Codierung Matthias Zwicker Universität Bern Frühling 2009 2 Greedy Algorithmen Entwurfsstrategie

Mehr

Algorithmen und Komplexität Lösungsvorschlag zu Übungsblatt 8

Algorithmen und Komplexität Lösungsvorschlag zu Übungsblatt 8 ETH Zürich Institut für Theoretische Informatik Prof. Dr. Angelika Steger Florian Meier, Ralph Keusch HS 2017 Algorithmen und Komplexität Lösungsvorschlag zu Übungsblatt 8 Lösungsvorschlag zu Aufgabe 1

Mehr

Algorithmen und Datenstrukturen (für ET/IT)

Algorithmen und Datenstrukturen (für ET/IT) Algorithmen und Datenstrukturen (für ET/IT) Sommersemester 07 Dr. Stefanie Demirci Computer Aided Medical Procedures Technische Universität München Programm heute Einführung Grundlagen von Algorithmen

Mehr

1 Einführung. 2 Grundlagen von Algorithmen. 3 Grundlagen von Datenstrukturen. 4 Grundlagen der Korrektheit von Algorithmen

1 Einführung. 2 Grundlagen von Algorithmen. 3 Grundlagen von Datenstrukturen. 4 Grundlagen der Korrektheit von Algorithmen Programm heute Algorithmen und Datenstrukturen (für ET/IT) Sommersemester 0 Dr. Stefanie Demirci Computer Aided Medical Procedures Technische Universität München Einführung Grundlagen von Algorithmen Grundlagen

Mehr

Hallo Welt für Fortgeschrittene

Hallo Welt für Fortgeschrittene Hallo Welt für Fortgeschrittene Dynamische Programmierung Felix Lugauer Informatik 2 Programmiersysteme Martensstraße 3 91058 Erlangen Übersicht Motivation Was ist Dynamische Programmierung? Einführendes

Mehr

Datenstrukturen und Algorithmen (SS 2013)

Datenstrukturen und Algorithmen (SS 2013) Datenstrukturen und Algorithmen (SS 2013) Präsenzübung Musterlösung Dienstag, 28.05.2013 Aufgabe 1 (Allgemeine Fragen [20 Punkte]) 1. Tragen Sie in der folgenden Tabelle die Best-, Average- und Worst-Case-

Mehr

Datenstrukturen und Algorithmen. Christian Sohler FG Algorithmen & Komplexität

Datenstrukturen und Algorithmen. Christian Sohler FG Algorithmen & Komplexität Datenstrukturen und Algorithmen Christian Sohler FG Algorithmen & Komplexität 1 Klausur Wichtige Hinweise: 2.7.07, Beginn 9 Uhr Bitte spätestens 8:4 Uhr vor Ort sein Sporthalle + Audimax Informationen

Mehr

9. Rekursion. 1 falls n 1 n (n 1)!, andernfalls. Experiment: Die Türme von Hanoi. Links Mitte Rechts. Mathematische Rekursion

9. Rekursion. 1 falls n 1 n (n 1)!, andernfalls. Experiment: Die Türme von Hanoi. Links Mitte Rechts. Mathematische Rekursion Experiment: Die Türme von Hanoi. Rekursion Mathematische Rekursion, Terminierung, der Aufrufstapel, Beispiele, Rekursion vs. Iteration Links Mitte Rechts Mathematische Rekursion Viele mathematische Funktionen

Mehr

Datenstrukturen und Algorithmen

Datenstrukturen und Algorithmen Datenstrukturen und Algorithmen VO 708.031 robert.legenstein@igi.tugraz.at 1 Kapitel 2 Algorithmische robert.legenstein@igi.tugraz.at 2 2. Algorithmische 1) Iterative Algorithmen 2) Rekursive Algorithmen

Mehr

Top-down Bottom-up Divide & Conquer Dynamisches Programmieren Caching (Memoization) Branch-and-Bound Greedy

Top-down Bottom-up Divide & Conquer Dynamisches Programmieren Caching (Memoization) Branch-and-Bound Greedy 2.2 Entwurfsparadigmen Top-down Bottom-up Divide & Conquer Dynamisches Programmieren Caching (Memoization) Branch-and-Bound Greedy 1 Top-Down Zerlege das gegebene Problem in Teilschritte Zerlege Teilschritte

Mehr

19. Dynamic Programming I

19. Dynamic Programming I Fibonacci Zahlen 9. Dynamic Programming I Fibonacci, Längste aufsteigende Teilfolge, längste gemeinsame Teilfolge, Editierdistanz, Matrixettenmultipliation, Matrixmultipliation nach Strassen [Ottman/Widmayer,

Mehr

Übung Algorithmen und Datenstrukturen

Übung Algorithmen und Datenstrukturen Übung Algorithmen und Datenstrukturen Sommersemester 017 Marc Bux, Humboldt-Universität zu Berlin Agenda 1. Vorrechnen von Aufgabenblatt 1. Wohlgeformte Klammerausdrücke 3. Teile und Herrsche Agenda 1.

Mehr

Algorithmen I - Tutorium 28 Nr. 12

Algorithmen I - Tutorium 28 Nr. 12 Algorithmen I - Tutorium 28 Nr. 12 20.07.2017: Spaß mit Dynamischer und Linearer Programmierung Marc Leinweber marc.leinweber@student.kit.edu INSTITUT FÜR THEORETISCHE INFORMATIK (ITI), PROF. DR. JÖRN

Mehr

Algorithmen auf Sequenzen

Algorithmen auf Sequenzen Algorithmen auf Sequenzen Fehlertolerante Mustersuche: Distanz- und Ähnlichkeitsmaße Sven Rahmann Genominformatik Universitätsklinikum Essen Universität Duisburg-Essen Universitätsallianz Ruhr Einführung

Mehr

Programm heute. Algorithmen und Datenstrukturen (für ET/IT) Suchen. Lineare Suche. Such-Algorithmen. Sommersemester Dr.

Programm heute. Algorithmen und Datenstrukturen (für ET/IT) Suchen. Lineare Suche. Such-Algorithmen. Sommersemester Dr. Programm heute Algorithmen und Datenstrukturen (für ET/IT) Sommersemester 0 Dr. Tobias Lasser Computer Aided Medical Procedures Technische Universität München Fortgeschrittene Datenstrukturen Such-Algorithmen

Mehr

Datenstrukturen & Algorithmen

Datenstrukturen & Algorithmen Datenstrukturen & Algorithmen Matthias Zwicker Universität Bern Frühling 2010 Übersicht Sortieralgorithmen Einleitung Heapsort Quicksort 2 Motivation Sortieren ist Voraussetzung für viele Anwendungen Nach

Mehr

3.2. Divide-and-Conquer-Methoden

3.2. Divide-and-Conquer-Methoden LUDWIG- MAXIMILIANS- UNIVERSITY MUNICH DEPARTMENT INSTITUTE FOR INFORMATICS DATABASE 3.2. Divide-and-Conquer-Methoden Divide-and-Conquer-Methoden Einfache Sortieralgorithmen reduzieren die Größe des noch

Mehr

Übersicht. Datenstrukturen und Algorithmen. Übersicht. Heaps. Vorlesung 8: Heapsort (K6) Joost-Pieter Katoen. 7. Mai 2015

Übersicht. Datenstrukturen und Algorithmen. Übersicht. Heaps. Vorlesung 8: Heapsort (K6) Joost-Pieter Katoen. 7. Mai 2015 Datenstrukturen und Algorithmen Vorlesung 8: (K6) 1 Joost-Pieter Katoen Lehrstuhl für Informatik Software Modeling and Verification Group http://moves.rwth-aachen.de/teaching/ss-15/dsal/ 7. Mai 015 3 Joost-Pieter

Mehr

Theoretische Informatik. Exkurs: Komplexität von Optimierungsproblemen. Optimierungsprobleme. Optimierungsprobleme. Exkurs Optimierungsprobleme

Theoretische Informatik. Exkurs: Komplexität von Optimierungsproblemen. Optimierungsprobleme. Optimierungsprobleme. Exkurs Optimierungsprobleme Theoretische Informatik Exkurs Rainer Schrader Exkurs: Komplexität von n Institut für Informatik 13. Mai 2009 1 / 34 2 / 34 Gliederung Entscheidungs- und Approximationen und Gütegarantien zwei Greedy-Strategien

Mehr

21. Greedy Algorithmen. Aktivitätenauswahl, Fractional Knapsack Problem, Huffman Coding Cormen et al, Kap. 16.1, 16.3

21. Greedy Algorithmen. Aktivitätenauswahl, Fractional Knapsack Problem, Huffman Coding Cormen et al, Kap. 16.1, 16.3 581 21. Greedy Algorithmen Aktivitätenauswahl, Fractional Knapsack Problem, Huffman Coding Cormen et al, Kap. 16.1, 16.3 Aktivitäten Auswahl 582 Koordination von Aktivitäten, die gemeinsame Resource exklusiv

Mehr

Kapitel 5: Dynamisches Programmieren Gliederung

Kapitel 5: Dynamisches Programmieren Gliederung Gliederung 1. Grundlagen 2. Zahlentheoretische Algorithmen 3. Sortierverfahren 4. Ausgewählte Datenstrukturen 5. Dynamisches Programmieren 6. Graphalgorithmen 7. String-Matching 8. Kombinatorische Algorithmen

Mehr

VL-04: Rekursionsgleichungen. (Datenstrukturen und Algorithmen, SS 2017) Gerhard Woeginger

VL-04: Rekursionsgleichungen. (Datenstrukturen und Algorithmen, SS 2017) Gerhard Woeginger VL-04: Rekursionsgleichungen (Datenstrukturen und Algorithmen, SS 2017) Gerhard Woeginger SS 2017, RWTH DSAL/SS 2017 VL-04: Rekursionsgleichungen 1/37 Organisatorisches Vorlesung: Gerhard Woeginger (Zimmer

Mehr

Algorithmen und Datenstrukturen 2. Dynamische Datenstrukturen

Algorithmen und Datenstrukturen 2. Dynamische Datenstrukturen Algorithmen und Datenstrukturen 2 Dynamische Datenstrukturen Algorithmen für dynamische Datenstrukturen Zugriff auf Variable und Felder durch einen Ausdruck: Namen durch feste Adressen referenziert Anzahl

Mehr

Programmieren 1 C Überblick

Programmieren 1 C Überblick Programmieren 1 C Überblick 1. Einleitung 2. Graphische Darstellung von Algorithmen 3. Syntax und Semantik 4. Einstieg in C: Einfache Sprachkonstrukte und allgemeiner Programmaufbau 5. Skalare Standarddatentypen

Mehr

Zeichenketten Benedikt Straßner. Programming Systems Group Martensstr Erlangen Germany

Zeichenketten Benedikt Straßner. Programming Systems Group Martensstr Erlangen Germany Zeichenketten 16.04.2018 Benedikt Straßner Programming Systems Group Martensstr. 3 91058 Erlangen Germany Übersicht String Matching Algorithmen Naive Stringsuche Knuth Morris Pratt (KMP) Algorithmus Boyer-Moore

Mehr

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen Algorithmen und Datenstrukturen Wintersemester 2012/13 25. Vorlesung Dynamisches Programmieren Prof. Dr. Alexander Wolff Lehrstuhl für Informatik I Klausurvorbereitung Tipp: Schreiben Sie sich alle Fragen

Mehr

Algorithmen und Datenstrukturen. Bäume. M. Herpers, Y. Jung, P. Klingebiel

Algorithmen und Datenstrukturen. Bäume. M. Herpers, Y. Jung, P. Klingebiel Algorithmen und Datenstrukturen Bäume M. Herpers, Y. Jung, P. Klingebiel 1 Lernziele Baumstrukturen und Ihre Verwendung kennen Grundbegriffe zu Bäumen anwenden können Baumstruktur in C anlegen können Suchbäume

Mehr

Grundlagen der Algorithmen und Datenstrukturen Kapitel 12

Grundlagen der Algorithmen und Datenstrukturen Kapitel 12 Grundlagen der Algorithmen und Datenstrukturen Kapitel 12 Christian Scheideler + Helmut Seidl SS 2009 28.06.09 Kapitel 12 1 Generische Optimierungsverfahren Techniken: Systematische Suche lass nichts aus

Mehr

Zeichenketten. Michael Fularczyk Michael Fularczyk Zeichenketten / 41

Zeichenketten. Michael Fularczyk Michael Fularczyk Zeichenketten / 41 Zeichenketten Michael Fularczyk 17.05.2011 Michael Fularczyk Zeichenketten 17.05.2011 1 / 41 Inhalt Zeichenketten Zeichensätze Darstellung Suchverfahren naive Stringsuche Knuth-Morris-Pratt Boyer-Moore

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 20 Einstieg in die Informatik mit Java Rekursion Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 20 1 Überblick 2 Rekursion 3 Rekursive Sortieralgorithmen 4 Backtracking

Mehr

Vorlesung Datenstrukturen

Vorlesung Datenstrukturen Vorlesung Datenstrukturen Heaps Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 469 Prioritätswarteschlange Problem Häufig ist das Prinzip einer einfachen Warteschlangen-Datenstruktur

Mehr

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen Technische Universität München SoSe 2017 Fakultät für Informatik, I-16 Lösungsblatt 4 Dr. Stefanie Demirci 31. Mai 2017 Rüdiger Göbl, Mai Bui Algorithmen und Datenstrukturen Aufgabe 1 Komplexität Berechnung

Mehr

Kapitel 5: Paradigmen des Algorithmenentwurfs. Gliederung

Kapitel 5: Paradigmen des Algorithmenentwurfs. Gliederung Gliederung 1. Grundlagen 2. Analyse der Laufzeit von Algorithmen 3. Untere Schranken für algorithmische Probleme 4. Sortier- und Selektionsverfahren 5. Paradigmen des Algorithmenentwurfs 6. Ausgewählte

Mehr

Kapitel 3: Sortierverfahren Gliederung

Kapitel 3: Sortierverfahren Gliederung Gliederung 1. Grundlagen 2. Zahlentheoretische Algorithmen 3. Sortierverfahren 4. Ausgewählte Datenstrukturen 5. Dynamisches Programmieren 6. Graphalgorithmen 7. String-Matching 8. Kombinatorische Algorithmen

Mehr

Sortieren II / HeapSort Heaps

Sortieren II / HeapSort Heaps Organisatorisches VL-07: Sortieren II: HeapSort (Datenstrukturen und Algorithmen, SS 2017) Vorlesung: Gerhard Woeginger (Zimmer 4024 im E1) Email: dsal-i1@algo.rwth-aachen.de Webseite: http://algo.rwth-aachen.de/lehre/ss17/dsa.php

Mehr

ADS: Algorithmen und Datenstrukturen 2

ADS: Algorithmen und Datenstrukturen 2 ADS: Algorithmen und Datenstrukturen 2 Teil 9 Prof. Dr. Gerhard Heyer Institut für Informatik Abteilung Automatische Sprachverarbeitung Universität Leipzig 06. Juni 2018 [Letzte Aktualisierung: 06/07/2018,

Mehr

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny Grundlagen der Informatik Prof. Dr. Stefan Enderle NTA Isny 2 Datenstrukturen 2.1 Einführung Syntax: Definition einer formalen Grammatik, um Regeln einer formalen Sprache (Programmiersprache) festzulegen.

Mehr

Hallo Welt für Fortgeschrittene

Hallo Welt für Fortgeschrittene Hallo Welt für Fortgeschrittene Gierige Algorithmen Michael Baer Informatik 2 Programmiersysteme Martensstraße 3 91058 Erlangen Gliederung Einführung Definition Verwendung und Grenzen Abgrenzung zur DP

Mehr

Informatik II, SS 2018

Informatik II, SS 2018 Informatik II - SS 2018 (Algorithmen & Datenstrukturen) Vorlesung 21 (11.7.2018) String Matching (Textsuche) II Greedy Algorithmen I Algorithmen und Komplexität Textsuche / String Matching Gegeben: Zwei

Mehr

Programm heute. Algorithmen und Datenstrukturen (für ET/IT) Entartete Suchbäume. Beispiel: Balancieren von Suchbaum. Wintersemester 2012/13

Programm heute. Algorithmen und Datenstrukturen (für ET/IT) Entartete Suchbäume. Beispiel: Balancieren von Suchbaum. Wintersemester 2012/13 Programm heute Algorithmen und Datenstrukturen (für ET/IT) Wintersemester / Fortgeschrittene Datenstrukturen Dr. Tobias Lasser Computer Aided Medical Procedures Technische Universität München 8 Such-Algorithmen

Mehr

Informatik II Bäume zum effizienten Information Retrieval

Informatik II Bäume zum effizienten Information Retrieval lausthal Informatik II Bäume zum effizienten Information Retrieval. Zachmann lausthal University, ermany zach@in.tu-clausthal.de Binäre Suchbäume (binary search tree, BST) Speichere wieder Daten als "Schlüssel

Mehr

B6.1 Introduction. Algorithmen und Datenstrukturen. Algorithmen und Datenstrukturen. B6.1 Introduction. B6.3 Analyse. B6.4 Ordnungsbasierte Methoden

B6.1 Introduction. Algorithmen und Datenstrukturen. Algorithmen und Datenstrukturen. B6.1 Introduction. B6.3 Analyse. B6.4 Ordnungsbasierte Methoden Algorithmen und Datenstrukturen 11. April 2018 B6. Binäre Suchbäume a Algorithmen und Datenstrukturen B6. Binäre Suchbäume 1 Marcel Lüthi and Gabriele Röger Universität Basel 11. April 2018 a Folien basieren

Mehr

5 BINÄRE ENTSCHEIDUNGS- DIAGRAMME (BDDS)

5 BINÄRE ENTSCHEIDUNGS- DIAGRAMME (BDDS) 5 BINÄRE ENTSCHEIDUNGS- DIAGRAMME (BDDS) Sommersemester 2009 Dr. Carsten Sinz, Universität Karlsruhe Datenstruktur BDD 2 1986 von R. Bryant vorgeschlagen zur Darstellung von aussagenlogischen Formeln (genauer:

Mehr

Datenstrukturen und Algorithmen. 7. Suchen in linearen Feldern

Datenstrukturen und Algorithmen. 7. Suchen in linearen Feldern Datenstrukturen und Algorithmen 7. Suchen in linearen Feldern VO 708.031 Suchen in linearen Feldern robert.legenstein@igi.tugraz.at 1 Inhalt der Vorlesung 1. Motivation, Einführung, Grundlagen 2. Algorithmische

Mehr

1. Motivation / Grundlagen 2. Sortierverfahren 3. Elementare Datenstrukturen / Anwendungen 4. Bäume / Graphen 5. Hashing 6. Algorithmische Geometrie

1. Motivation / Grundlagen 2. Sortierverfahren 3. Elementare Datenstrukturen / Anwendungen 4. Bäume / Graphen 5. Hashing 6. Algorithmische Geometrie Gliederung 1. Motivation / Grundlagen 2. Sortierverfahren 3. Elementare Datenstrukturen / Anwendungen 4. Bäume / Graphen 5. Hashing 6. Algorithmische Geometrie 4/3, Folie 1 2010 Prof. Steffen Lange - HDa/FbI

Mehr

Programm heute. Algorithmen und Datenstrukturen (für ET/IT) Übersicht: Graphen. Definition: Ungerichteter Graph. Definition: Ungerichteter Graph

Programm heute. Algorithmen und Datenstrukturen (für ET/IT) Übersicht: Graphen. Definition: Ungerichteter Graph. Definition: Ungerichteter Graph Programm heute Algorithmen und Datenstrukturen (für ET/IT) Sommersemester 07 Dr. Stefanie Demirci Computer Aided Medical Procedures Technische Universität München 7 Fortgeschrittene Datenstrukturen Graphen

Mehr

Datenstrukturen & Algorithmen

Datenstrukturen & Algorithmen Datenstrukturen & Algorithmen Matthias Zwicker Universität Bern Frühling 2010 Übersicht Binäre Suchbäume Einführung und Begriffe Binäre Suchbäume 2 Binäre Suchbäume Datenstruktur für dynamische Mengen

Mehr

Objektorientierte Programmierung (ZQ1u2B)

Objektorientierte Programmierung (ZQ1u2B) Objektorientierte Programmierung (ZQ1u2B) Woche 4 Rekursion Christopher Scho lzel Technische Hochschule Mittelhessen 4. November 2015 Inhalt Rekursion Lineare Rekursion Verzweigte Rekursion Verschränkte

Mehr

Methoden für den Entwurf von Algorithmen

Methoden für den Entwurf von Algorithmen Methoden für den Entwurf von Algorithmen Greedy Algorithmen: - Löse ein einfaches Optimierungsproblem durch eine Folge vernünftiger Entscheidungen. - Eine getroffene Entscheidung wird nie zurückgenommen.

Mehr

Algorithmen und Datenstrukturen 2 VU 3.0 Nachtragstest SS Oktober 2016

Algorithmen und Datenstrukturen 2 VU 3.0 Nachtragstest SS Oktober 2016 Technische Universität Wien Institut für Computergraphik und Algorithmen Algorithms and Complexity Group 186.815 Algorithmen und Datenstrukturen 2 VU 3.0 Nachtragstest SS 2016 5. Oktober 2016 Machen Sie

Mehr

Übersicht. Datenstrukturen und Algorithmen Vorlesung 5: Rekursionsgleichungen (K4) Übersicht. Binäre Suche. Joost-Pieter Katoen. 20.

Übersicht. Datenstrukturen und Algorithmen Vorlesung 5: Rekursionsgleichungen (K4) Übersicht. Binäre Suche. Joost-Pieter Katoen. 20. Übersicht Datenstrukturen und Algorithmen Vorlesung 5: (K4) Joost-Pieter Katoen Lehrstuhl für Informatik 2 Software Modeling and Verification Group http://www-i2.informatik.rwth-aachen.de/i2/dsal12/ 20.

Mehr

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen Algorithmen und Datenstrukturen Prof. Martin Lercher Institut für Informatik Heinrich-Heine-Universität Düsseldorf Teil 4 Suchen in Texten Version vom: 15. November 2016 1 / 39 Vorlesung 8 15. November

Mehr

Algorithmen und Datenstrukturen 1 Kapitel 3

Algorithmen und Datenstrukturen 1 Kapitel 3 Algorithmen und Datenstrukturen 1 Kapitel 3 Technische Fakultät robert@techfak.uni-bielefeld.de Vorlesung, U. Bielefeld, Winter 2005/2006 3.6 Dynamische Programmierung Die rekursive Problemzerlegung kann

Mehr

Sortieren und Suchen. Jens Wächtler Hallo Welt! -Seminar LS 2

Sortieren und Suchen. Jens Wächtler Hallo Welt! -Seminar LS 2 Sortieren und Suchen Jens Wächtler 17.05.2017 Hallo Welt! -Seminar LS 2 Überblick Sortieren kurze Wiederholung Binäre & Ternäre Suche Binäre Suche in einer Liste Bisektionsverfahren (Nullstellensuche)

Mehr

Algorithmen I. Tutorium Sitzung. Dennis Felsing

Algorithmen I. Tutorium Sitzung. Dennis Felsing Algorithmen I Tutorium 1-12. Sitzung Dennis Felsing dennis.felsing@student.kit.edu www.stud.uni-karlsruhe.de/~ubcqr/algo 2011-07-04 Überblick 1 Dynamische Programmierung Idee Längste gemeinsame Teilfolge

Mehr

Ein Dieb raubt einen Laden aus; um möglichst flexibel zu sein, hat er für die Beute nur einen Rucksack dabei

Ein Dieb raubt einen Laden aus; um möglichst flexibel zu sein, hat er für die Beute nur einen Rucksack dabei 7/7/ Das Rucksack-Problem Englisch: Knapsack Problem Das Problem: "Die Qual der Wahl" Ein Dieb raubt einen Laden aus; um möglichst flexibel zu sein, hat er für die Beute nur einen Rucksack dabei Im Ladens

Mehr

lim log 2n n = > 0 Da es einen Limes gibt, gibt es auch einen Limes inferior, der gleich diesem Limes ist.

lim log 2n n = > 0 Da es einen Limes gibt, gibt es auch einen Limes inferior, der gleich diesem Limes ist. Prof. aa Dr. Ir. Joost-Pieter Katoen Christian Dehnert, Jonathan Heinen, Thomas Ströder, Sabrina von Styp Aufgabe 1 (O-Notation): Beweisen oder widerlegen Sie die folgenden Aussagen: (3 + 3 + 4 = 10 Punkte)

Mehr

C++ Teil 4. Sven Groß. 30. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 16

C++ Teil 4. Sven Groß. 30. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 16 C++ Teil 4 Sven Groß IGPM, RWTH Aachen 30. Apr 2015 Sven Groß (IGPM, RWTH Aachen) C++ Teil 4 30. Apr 2015 1 / 16 Themen der letzten Vorlesung Funktionen: Definition und Aufruf Wert- und Referenzparameter,

Mehr

Informatik II: Algorithmen & Datenstrukturen. Blättern Sie nicht um bevor Sie dazu aufgefordert werden!

Informatik II: Algorithmen & Datenstrukturen. Blättern Sie nicht um bevor Sie dazu aufgefordert werden! Albert-Ludwigs-Universität Institut für Informatik Prof. Dr. F. Kuhn Informatik II: Algorithmen & Datenstrukturen Montag, 29. August, 2014, 14:00 17:00 Name:...........................................................

Mehr

Algorithmen & Programmierung. Rekursive Funktionen (1)

Algorithmen & Programmierung. Rekursive Funktionen (1) Algorithmen & Programmierung Rekursive Funktionen (1) Berechnung der Fakultät Fakultät Die Fakultät N! einer nichtnegativen ganzen Zahl N kann folgendermaßen definiert werden: d.h. zur Berechnung werden

Mehr

Dynamisches Programmieren - Problemstruktur

Dynamisches Programmieren - Problemstruktur Dynamisches Programmieren - Problemstruktur Optimale Substruktur: Optimale Lösung enthält optimale Lösungen von Teilproblemen. Bsp.: Kürzester Weg im Graphen, LCS (s. etwa Folie 42 der letzten Vorlesung)

Mehr

8. A & D - Heapsort. Werden sehen, wie wir durch geschicktes Organsieren von Daten effiziente Algorithmen entwerfen können.

8. A & D - Heapsort. Werden sehen, wie wir durch geschicktes Organsieren von Daten effiziente Algorithmen entwerfen können. 8. A & D - Heapsort Werden sehen, wie wir durch geschicktes Organsieren von Daten effiziente Algorithmen entwerfen können. Genauer werden wir immer wieder benötigte Operationen durch Datenstrukturen unterstützen.

Mehr

Algorithmen und Datenstrukturen 12

Algorithmen und Datenstrukturen 12 12. Juli 2012 1 Besprechung Blatt 11 Fragen 2 Binary Search Binäre Suche in Arrays Binäre Suchbäume (Binary Search Tree) 3 Sortierverfahren Allgemein Heapsort Bubblesort Insertionsort Mergesort Quicksort

Mehr

Entscheidungsbäume. Definition Entscheidungsbaum. Frage: Gibt es einen Sortieralgorithmus mit o(n log n) Vergleichen?

Entscheidungsbäume. Definition Entscheidungsbaum. Frage: Gibt es einen Sortieralgorithmus mit o(n log n) Vergleichen? Entscheidungsbäume Frage: Gibt es einen Sortieralgorithmus mit o(n log n) Vergleichen? Definition Entscheidungsbaum Sei T ein Binärbaum und A = {a 1,..., a n } eine zu sortierenden Menge. T ist ein Entscheidungsbaum

Mehr

Natürliche Bäume. (Algorithmen und Datenstrukturen I) Prof. Dr. Oliver Braun. Letzte Änderung: :16. Natürliche Bäume 1/16

Natürliche Bäume. (Algorithmen und Datenstrukturen I) Prof. Dr. Oliver Braun. Letzte Änderung: :16. Natürliche Bäume 1/16 Natürliche Bäume (Algorithmen und Datenstrukturen I) Prof. Dr. Oliver Braun Letzte Änderung: 18.03.2018 18:16 Natürliche Bäume 1/16 Bäume Begriffe (1/2) Bäume sind verallgemeinerte Listenstrukturen ein

Mehr

21. Dynamic Programming III

21. Dynamic Programming III Approximation 21. Dynamic Programming III FPTAS [Ottman/Widmayer, Kap. 7.2, 7.3, Cormen et al, Kap. 15,35.5] Sei ein ε (, 1) gegeben. Sei I eine bestmögliche Auswahl. Suchen eine gültige Auswahl I mit

Mehr

Vorkurs Informatik WiSe 17/18

Vorkurs Informatik WiSe 17/18 Java Rekursion Dr. Werner Struckmann / Stephan Mielke, Nicole Naczk, 10.10.2017 Technische Universität Braunschweig, IPS Überblick Einleitung Türme von Hanoi Rekursion Beispiele 10.10.2017 Dr. Werner Struckmann

Mehr

Einleitung Grundlagen spez. Zahlenfolgen Zusammenfassung Kombinatorik. im Rahmen Hallo Welt für Fortgeschrittene. Johannes Simon

Einleitung Grundlagen spez. Zahlenfolgen Zusammenfassung Kombinatorik. im Rahmen Hallo Welt für Fortgeschrittene. Johannes Simon Kombinatorik im Rahmen Hallo Welt für Fortgeschrittene Johannes Simon - 27.06.2008 TODO 1 / 41 Kombinatorik ist ein Teilgebiet der Mathematik, das sich mit der Bestimmung der Zahl möglicher Anordnungen

Mehr

Tutorium Algorithmen & Datenstrukturen

Tutorium Algorithmen & Datenstrukturen June 16, 2010 Binärer Baum Binärer Baum enthält keine Knoten (NIL) besteht aus drei disjunkten Knotenmengen: einem Wurzelknoten, einem binären Baum als linken Unterbaum und einem binären Baum als rechten

Mehr

ADS: Algorithmen und Datenstrukturen 2

ADS: Algorithmen und Datenstrukturen 2 .. ADS: Algorithmen und Datenstrukturen 2 8. Vorlesung Uwe Quasthoff Abteilung Automatische Sprachverarbeitung Institut für Informatik Universität Leipzig 6. Juni 2012 1 / 25 Editier-Distanz Beobachtungen:

Mehr

Abschnitt 19: Sortierverfahren

Abschnitt 19: Sortierverfahren Abschnitt 19: Sortierverfahren 19. Sortierverfahren 19.1 Allgemeines 19.2 Einfache Sortierverfahren 19.3 Effizientes Sortieren: Quicksort 19.4 Zusammenfassung 19 Sortierverfahren Informatik 2 (SS 07) 758

Mehr

(a, b)-bäume / 1. Datenmenge ist so groß, dass sie auf der Festplatte abgespeichert werden muss.

(a, b)-bäume / 1. Datenmenge ist so groß, dass sie auf der Festplatte abgespeichert werden muss. (a, b)-bäume / 1. Szenario: Datenmenge ist so groß, dass sie auf der Festplatte abgespeichert werden muss. Konsequenz: Kommunikation zwischen Hauptspeicher und Festplatte - geschieht nicht Byte für Byte,

Mehr

Kapitel 7: Rekursion. Inhalt. Rekursion: Technik Rekursion vs. Iteration

Kapitel 7: Rekursion. Inhalt. Rekursion: Technik Rekursion vs. Iteration Wintersemester 2007/08 Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Inhalt Rekursion: Technik Prof. Dr. Günter Rudolph Fakultät

Mehr

Informatik II, SS 2016

Informatik II, SS 2016 Informatik II - SS 2016 (Algorithmen & Datenstrukturen) Vorlesung 22 (20.7.2016) Greedy Algorithmen - Datenkompression Algorithmen und Komplexität Greedy Algorithmen Greedy Algorithmen sind eine Algorithmenmethode,

Mehr

Kapitel 12: Induktive

Kapitel 12: Induktive Kapitel 12: Induktive Datenstrukturen Felix Freiling Lehrstuhl für Praktische Informatik 1 Universität Mannheim Vorlesung Praktische Informatik I im Herbstsemester 2009 Folien nach einer Vorlage von H.-Peter

Mehr

Stand der Vorlesung Komplexität von Algorithmen (Kapitel 3)

Stand der Vorlesung Komplexität von Algorithmen (Kapitel 3) Stand der Vorlesung Komplexität von Algorithmen (Kapitel 3) Technische Universität München Motivation: IT gestützte Steuerung, Überwachung, Fertigung, Produktion,. : erfordert effiziente Berechnungsvorschriften

Mehr

18. Natürliche Suchbäume

18. Natürliche Suchbäume Wörterbuchimplementationen 1. Natürliche Suchbäume [Ottman/Widmayer, Kap..1, Cormen et al, Kap. 12.1-12.] Hashing: Implementierung von Wörterbüchern mit erwartet sehr schnellen Zugriffszeiten. Nachteile

Mehr

Algorithmen und Datenstrukturen in der Bioinformatik Erstes Übungsblatt WS 05/06 Musterlösung

Algorithmen und Datenstrukturen in der Bioinformatik Erstes Übungsblatt WS 05/06 Musterlösung Konstantin Clemens Johanna Ploog Freie Universität Berlin Institut für Mathematik II Arbeitsgruppe für Mathematik in den Lebenswissenschaften Algorithmen und Datenstrukturen in der Bioinformatik Erstes

Mehr

Rotation. y T 3. Abbildung 3.10: Rotation nach rechts (analog links) Doppelrotation y

Rotation. y T 3. Abbildung 3.10: Rotation nach rechts (analog links) Doppelrotation y Die AVL-Eigenschaft soll bei Einfügungen und Streichungen erhalten bleiben. Dafür gibt es zwei mögliche Operationen: -1-2 Rotation Abbildung 3.1: Rotation nach rechts (analog links) -2 +1 z ±1 T 4 Doppelrotation

Mehr

Suchen in Texten. Naives Suchen Verfahren von Knuth-Morris-Pratt Verfahren von Boyer-Moore Ähnlichkeitssuchen Editierdistanz

Suchen in Texten. Naives Suchen Verfahren von Knuth-Morris-Pratt Verfahren von Boyer-Moore Ähnlichkeitssuchen Editierdistanz Suchen in Texten Naives Suchen Verfahren von Knuth-Morris-Pratt Verfahren von Boyer-Moore Ähnlichkeitssuchen Editierdistanz Textsuche Gegeben ist ein Zeichensatz (Alphabet) Σ. Für einen Text T Σ n und

Mehr

9. Natürliche Suchbäume

9. Natürliche Suchbäume Bäume Bäume sind. Natürliche Suchbäume [Ottman/Widmayer, Kap..1, Cormen et al, Kap. 12.1-12.] Verallgemeinerte Listen: Knoten können mehrere Nachfolger haben Spezielle Graphen: Graphen bestehen aus Knoten

Mehr

C++ Teil 5. Sven Groß. 12. Nov IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Nov / 16

C++ Teil 5. Sven Groß. 12. Nov IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Nov / 16 C++ Teil 5 Sven Groß IGPM, RWTH Aachen 12. Nov 2014 Sven Groß (IGPM, RWTH Aachen) C++ Teil 5 12. Nov 2014 1 / 16 Themen der letzten Vorlesung Eingabestrom, Verhalten von cin Namensräume Live Programming

Mehr