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 Thomas Karmann 4. Juni / 36

2 Übersicht Einführung Definition Anwendung Funktionsweise Grundlagen Memoisation Top-Down Bottom-Up Grenzen Anwendungsbeispiele Allgemeine Vorgehensweise Das Rucksackproblem Longest Common Subsequence Zusammenfassung Literatur 2 / 36

3 Was ist dynamische Programmierung? Definition Dynamische Programmierung ist ein Verfahren zum Lösen komplexer Probleme durch Zerlegung in gleichartige kleinere Teilprobleme. Begriff eingeführt von amerikanischem Mathematiker Richard Bellmann ( ) Grundlage:,,Optimalitätsprinzip von Bellmann 3 / 36

4 Vorraussetzungen Optimale Teilstruktur Überlappende Teilprobleme 4 / 36

5 Vorraussetzung: Optimale Teilstruktur Das Problem lässt sich in gleichartigen kleinere Teilprobleme zerlegen. Optimale Lösung eines Problems lässt sich aus optimalen Lösungen seiner Teilprobleme zusammensetzen. 5 / 36

6 Vorraussetzung: Überlappende Teilprobleme Ein rekursiver Algorithmus muss zur Lösung eines Problems dessen Teilprobleme öfters lösen. 6 / 36

7 Wie funktioniert dynamische Programmierung? Direkte Berechnung der optimalen Lösungen der Teilprobleme. Zusammensetzen der Lösungen zur Lösung des nächstgrößeren Teilproblems. Berechnete Teilergebnisse werden in einer Tabelle gespeichert und müssen dadurch nicht erneut berechnet werden. 7 / 36

8 Memoisation Definition Die Speicherung der Zwischenergebnisse in einer Tabelle nennt man Memoisation. Das grundlegende Verfahren der Funktion wird jedoch beibehalten. 8 / 36

9 Memoisation Definition Die Speicherung der Zwischenergebnisse in einer Tabelle nennt man Memoisation. Das grundlegende Verfahren der Funktion wird jedoch beibehalten. Achtung: Die Funktion muss für gleiche Parameter auch gleiche Ergebnisse liefern! (,,referenzielle Transparenz ) 8 / 36

10 Memoisation: Umsetzung Ablegen der Werte in ein- oder mehrdimensionalen Arrays. Initialisierung des Arrays mit einem,,unset -Wert außerhalb des Lösungsraumes Eventuell Basisfälle gleich in Array speichern. Am Anfang der Funktion zuerst in der Tabelle nachschauen: vielleicht wurde das Ergebniss schon mal berechnet? Ja: Wert auslesen und zurückgeben. Nein: Wert berechnen, in Array speichern und zurückgeben. 9 / 36

11 Der Top-Down Ansatz Kombination aus folgenden Konzepten: Problem wird rekursiv gelöst Optimale Teilstruktur und überlappende Teilprobleme Aufwandsminimierung durch Memoisation 10 / 36

12 Top-Down: Beispiel Definition Die n-te Fibonacci-Zahl ist die Summe ihrer beiden Vorgänger: fib(0) = 0 fib(1) = 1 fib(n) = fib(n 2) + fib(n 1), n > 2 11 / 36

13 Top-Down: Beispiel Definition Die n-te Fibonacci-Zahl ist die Summe ihrer beiden Vorgänger: fib(0) = 0 fib(1) = 1 fib(n) = fib(n 2) + fib(n 1), n > 2 1, 1, 2, 3, 5, 8, 13, 21, 34, / 36

14 Top-Down: Beispiel Naheliegende rekursive Implementierung: int F(int i) { if(i < 1) return 0; if(i == 1) return 1; return F(i - 1) + F(i - 2); } Vorteil: Kompakt und einfach! Nachteil: Exponentieller Aufwand (O(2 n )) durch unnötige Neuberechnungen! 12 / 36

15 Top-Down: Beispiel Rekursive Implementierung mit,,gedächtnis int table[maxval]; 13 / 36

16 Top-Down: Beispiel Rekursive Implementierung mit,,gedächtnis int table[maxval]; #define UNSET -1 memset(table, UNSET, MAXVAL * sizeof(int)); 13 / 36

17 Top-Down: Beispiel Rekursive Implementierung mit,,gedächtnis int table[maxval]; #define UNSET -1 memset(table, UNSET, MAXVAL * sizeof(int)); table[0] = 0; table[1] = 1; int F(int i) { 13 / 36

18 Top-Down: Beispiel Rekursive Implementierung mit,,gedächtnis int table[maxval]; #define UNSET -1 memset(table, UNSET, MAXVAL * sizeof(int)); table[0] = 0; table[1] = 1; int F(int i) { if(table[i]!= 0) return table[i]; 13 / 36

19 Top-Down: Beispiel Rekursive Implementierung mit,,gedächtnis int table[maxval]; #define UNSET -1 memset(table, UNSET, MAXVAL * sizeof(int)); table[0] = 0; table[1] = 1; int F(int i) { if(table[i]!= 0) return table[i]; table[n] = fib(n - 1) + fib(n - 2); return table[n]; } Aufwand nur noch O(n)! 13 / 36

20 Top-Down: Probleme Rekursionstiefe (Stack Overflow) Viele Funktionsaufrufe. 14 / 36

21 Der Bottom-Up Ansatz... funktioniert entgegengesetzt: Zuerst werden die kleineren Teilprobleme gelöst Mithilfe ihrer Ergebnisse errechnet man die Lösungen größerer Teilprobleme. Sukzessives Ausfüllen der Tabelle 15 / 36

22 Bottom-Up: Beispiel int table[maxval]; table[0] = 0; table[1] = 1; int i; for(i = 3; i < MAXVAL; i++) { table[i] = table[i - 2] + table[i - 1]; } int F(int n) { return table[n]; } 16 / 36

23 Bottom-Up Vorteile Nur ein Funktionsaufruf nötig Berechnung erfolgt zu Beginn Nachteile: Umwandlung der Rekursion oftmals nicht so einfach. 17 / 36

24 Grenzen von dynamischer Programmierung Speicherplatz: möglicherweise zu große Funktionswerte Reele Zahlen als Parameter Lösungen mit geringerem Aufwand sind bekannt. 18 / 36

25 Schritte zum DP-Algorithmus 19 / 36

26 Schritte zum DP-Algorithmus 1. Struktur einer optimalen Lösung analysieren: Problem zerlegen, Teilprobleme formulieren. 19 / 36

27 Schritte zum DP-Algorithmus 1. Struktur einer optimalen Lösung analysieren: Problem zerlegen, Teilprobleme formulieren. 2. Rekursionsgleichung für eine optimale Lösung finden 19 / 36

28 Schritte zum DP-Algorithmus 1. Struktur einer optimalen Lösung analysieren: Problem zerlegen, Teilprobleme formulieren. 2. Rekursionsgleichung für eine optimale Lösung finden 3. Implementierung des Top-Down-Ansatzes mithilfe von Memoisation 19 / 36

29 Schritte zum DP-Algorithmus 1. Struktur einer optimalen Lösung analysieren: Problem zerlegen, Teilprobleme formulieren. 2. Rekursionsgleichung für eine optimale Lösung finden 3. Implementierung des Top-Down-Ansatzes mithilfe von Memoisation 4. Wenn möglich: Umwandlung in einen Bottom-Up-Ansatz 19 / 36

30 Schritte zum DP-Algorithmus 1. Struktur einer optimalen Lösung analysieren: Problem zerlegen, Teilprobleme formulieren. 2. Rekursionsgleichung für eine optimale Lösung finden 3. Implementierung des Top-Down-Ansatzes mithilfe von Memoisation 4. Wenn möglich: Umwandlung in einen Bottom-Up-Ansatz 5. Lösungswege aus den Berechnungen konstruieren 19 / 36

31 Das Rucksackproblem Fast schon wieder Semesterferien! Wir fahren in den Urlaub! Unser Auto ist leider sehr klein! Ich glaub wir können nicht alles mitnehmen! Unser Kofferraum besitzt die Kapazität c Wir haben N verschiedene Gepäckstücke zur Verfügung. Jedes unserer Gepäckstücke hat eine Größe s n und einen Wert v n (Die Seife ist z.b. wichtiger als der Bierkasten). Problem: Was sollen wir alles mitnehmen? Der Kofferraum darf nicht überladen werden! Der Gesamtwert seines Inhalts muss maximal sein! 20 / 36

32 Das Rucksackproblem Schritt 1: Struktur einer optimalen Lösung analysieren. Liste von k Gepäckstücken n: L c = (n 1, n 2, n 3,..., n k ) Der Wert des Kofferraums ist die Summe der Werte seiner Gepäckstücke): k w c = i=1 v i 21 / 36

33 Das Rucksackproblem Schritt 2: Rekursionsgleichung für eine optimalen Lösung finden. L c ist für die Kapazität c eine optimale Lösung: wenn wir nun ein beliebiges Gepäckstück aus der Liste entfernen, ist die Restliste eine optimale Lösung für die Kapazität c s ni Vielleicht passt ja noch was anderes rein? Aber Achtung! Die Kapazität c des Kofferrraums darf nicht überschritten werden! Der erhöhte Gesamtwert muss maximal sein! 22 / 36

34 Das Rucksackproblem Schritt 3: Rekursive Implementierung int knapsack(int cap){ int space, max, t; for (int i = 0, max = 0; i < N; i++) if((space = cap - items[i].size) >= 0) if((t = knapsack(space) + items[i].value) > max) max = t; } return max; } 23 / 36

35 Das Rucksackproblem Schritt 3 1/2: Rekursive Implementierung mit Memoisation int knapsack(int cap){ int i, space, max, t; for (i = 0, max = 0; i < N; i++) if ((space = cap - items[i].size) >= 0) if ((t = knapsack(space) + items[i].val) > max){ max = t; } } return max; 24 / 36

36 Das Rucksackproblem Schritt 3 1/2: Rekursive Implementierung mit Memoisation int knapsack(int cap){ int i, space, max, t; if (maxknown[cap]!= UNSET) return maxknown[cap]; for (i = 0, max = 0; i < N; i++) if ((space = cap - items[i].size) >= 0) if ((t = knapsack(space) + items[i].val) > max){ max = t; } } return max; 24 / 36

37 Das Rucksackproblem Schritt 3 1/2: Rekursive Implementierung mit Memoisation int knapsack(int cap){ int i, space, max, t; if (maxknown[cap]!= UNSET) return maxknown[cap]; for (i = 0, max = 0; i < N; i++) if ((space = cap - items[i].size) >= 0) if ((t = knapsack(space) + items[i].val) > max){ max = t; } maxknown[cap] = max; return max; } 24 / 36

38 Das Rucksackproblem Schritt 4: Rekonstruktion des Lösungswegs. Nicht nötig falls uns nur der maximale Wert unseres perfekt gefüllten Kofferraums interessiert Falls wir auch wissen wollen was wir eingepackt haben muss man sich noch zusätzlich die gewählten Gegenstände merken Wir fügen mit jedem Schritt eine neues Stück hinzu welches die verbleibende Kapazität des Kofferraums verkleinert. Dieses Stück bleibt für den Schritt fest und wird nicht mehr geändert. Zu jedem Kapazitätswert des Kofferraums gibt es genau ein eindeutiges Gepäckstück. Wir können uns daher in einem Array die Zuordnung Kapazität Index des Gepäckstücks merken. 25 / 36

39 Das Rucksackproblem Vollständige Lösung des Rucksackproblems mit dynamischer Programmierung: int knapsack (int cap) { int i, space, max, t; if (maxknown[cap]!= UNSET) return maxknown[cap]; for (i = 0, max = 0; i < N; i++) if ((space = cap - items[i].size) >= 0) if ((t = knapsack(space) + items[i].val) > max) { max = t; } maxknown[cap] = max; return max; } 26 / 36

40 Das Rucksackproblem Vollständige Lösung des Rucksackproblems mit dynamischer Programmierung: int knapsack (int cap) { int i, space, max, max_i,t; if (maxknown[cap]!= UNSET) return maxknown[cap]; for (i = 0, max = 0; i < N; i++) if ((space = cap - items[i].size) >= 0) if ((t = knapsack(space) + items[i].val) > max) { max = t; max_i = i; } maxknown[cap] = max; return max; } 26 / 36

41 Das Rucksackproblem Vollständige Lösung des Rucksackproblems mit dynamischer Programmierung: int knapsack (int cap) { int i, space, max, max_i,t; if (maxknown[cap]!= UNSET) return maxknown[cap]; for (i = 0, max = 0; i < N; i++) if ((space = cap - items[i].size) >= 0) if ((t = knapsack(space) + items[i].val) > max) { max = t; max_i = i; } maxknown[cap] = max; itemknown[cap] = items[max_i]; return max; } 26 / 36

42 Ein weiteres Beispiel: Longest Common Subsequence Problembeschreibung: Wir haben zwei Strings A und B. Ziel der Algorithmus ist die Ermittlung der Ähnlichkeit der beiden Strings. Diese ist definiert als die Länge des Strings C, der alle Zeichen enthält die sowohl in A als auch in B vorkommen. Die Zeichen müssen in der selben Reihenfolge, nicht aber zwingenderweise direkt aufeinanderfolgend auftreten. beispiel eisig 4 eisi erlangen langsam 4 lang Anwendungen: diff-tool, Molekularbiologie (ACGT...) 27 / 36

43 Ein weiteres Beispiel: Longest Common Subsequence Problembeschreibung: Wir haben zwei Strings A und B. Ziel der Algorithmus ist die Ermittlung der Ähnlichkeit der beiden Strings. Diese ist definiert als die Länge des Strings C, der alle Zeichen enthält die sowohl in A als auch in B vorkommen. Die Zeichen müssen in der selben Reihenfolge, nicht aber zwingenderweise direkt aufeinanderfolgend auftreten. beispiel eisig 4 eisi erlangen langsam 4 lang Anwendungen: diff-tool, Molekularbiologie (ACGT...) 27 / 36

44 Ein weiteres Beispiel: Longest Common Subsequence Problembeschreibung: Wir haben zwei Strings A und B. Ziel der Algorithmus ist die Ermittlung der Ähnlichkeit der beiden Strings. Diese ist definiert als die Länge des Strings C, der alle Zeichen enthält die sowohl in A als auch in B vorkommen. Die Zeichen müssen in der selben Reihenfolge, nicht aber zwingenderweise direkt aufeinanderfolgend auftreten. beispiel eisig 4 eisi erlangen langsam 4 lang Anwendungen: diff-tool, Molekularbiologie (ACGT...) 27 / 36

45 Longest Common Subsequence Schritt 1: Struktur analysieren. Angenommen wir haben C, die LCS von A und B und es gilt A = n, B = m, C = k Zwei Fälle: 1. Die letzten beiden Zeichen von A und B sind gleich C k 1 ist LCS von A n 1 und B m 1 2. Die letzten beiden Zeichen von A und B sind nicht gleich C k 1 ist max(lcs(a n 1, B m), LCS(A n, B m 1 )) 28 / 36

46 Longest Common Subsequence Schritt 1: Struktur analysieren. Angenommen wir haben C, die LCS von A und B und es gilt A = n, B = m, C = k Zwei Fälle: 1. Die letzten beiden Zeichen von A und B sind gleich C k 1 ist LCS von A n 1 und B m 1 2. Die letzten beiden Zeichen von A und B sind nicht gleich C k 1 ist max(lcs(a n 1, B m), LCS(A n, B m 1 )) Hinweis auf überlappende Teilprobleme! 28 / 36

47 Longest Common Subsequence Schritt 2: Rekursionsgleichung finden. 0 i, k = 0 c[i][k] = c[i 1][k 1] + 1 i, k > 0 A[i] = B[k] max(c[i][k 1], c[i 1][k]) i, k > 0 A[i] B[k] 29 / 36

48 Longest Common Subsequence Schritt 3: Bottom-Up Implementierung int c[maxlen][maxlen]; int lcs(char *s1, int n, char *s2, int m) { int i, j; for (i = 0; i <= n; i++) c[i][0] = 0; for (i = 0; i <= m; i++) c[0][i] = 0; } for (i = 1; i <= n; i++) { for (j = 1; j <= m; j++) { if (s1[i - 1] == s2[j - 1]) { c[i][j] = c[i - 1][j - 1] + 1; } else if (c[i - 1][j] > c[i][j - 1]) { c[i][j] = c[i - 1][j]; else { c[i][j] = c[i][j - 1]; } } } } return c[n][m]; 30 / 36

49 Longest Common Subsequence Schritt 3: Bottom-Up Implementierung. int c[maxlen][maxlen]; int b[maxlen][maxlen]; int lcs(char *s1, int n, char *s2, int m) { int i, j; for (i = 0; i <= n; i++) c[i][0] = 0; for (i = 0; i <= m; i++) c[0][i] = 0; } for (i = 1; i <= n; i++) { for (j = 1; j <= m; j++) { if (s1[i - 1] == s2[j - 1]) { c[i][j] = c[i - 1][j - 1] + 1; b[i][j] = EQUAL; } else if (c[i - 1][j] > c[i][j - 1]) { c[i][j] = c[i - 1][j]; b[i][j] = UP; else { c[i][j] = c[i][j - 1]; b[i][j] = DOWN; } } } } return c[n][m]; 31 / 36

50 Longest Common Subsequence Schritt 4: Rekonstruktion des Lösungsweges. Welche Zeichen bilden die LCS? 1. Wir beginnen bei b[m][n] 2. Wenn b[i][k] == EQUAL 2.1 Rekursion über b[i-1][k-1] starten 2.2 A[i] ausgeben 3. Wenn b[i][k] == UP, Rekursion über b[i][k-1] starten 4. Wenn b[i][k] == LEFT, Rekursion über b[i-1][k] starten 5. Wenn i == 0 oder k == 0, abbrechen 32 / 36

51 Longest Common Subsequence void backtrace(i, k) { if (i == 0) (k == 0) return; else if (b[j][k] == EQUAL) { backtrace(i - 1, k - 1); puts[s1[i]]; } else { if (b[i][k] == UP) backtrace(i, k - 1); else backtrace(i - 1, k); } 33 / 36

52 Typische DP-Algorithmen Longest Increasing Subsequence, Longest Common Substring, Levenshtein-Distanz CYK Bellman-Ford Traveling Salesperson Problem Matrix-Multiplikation Auswahlwerkzeuge in Bildbearbeitungssoftware 34 / 36

53 Zusammenfassung: Was muss ich mir merken? Dynamische Programmierung ergibt Sinn, wenn / 36

54 Zusammenfassung: Was muss ich mir merken? Dynamische Programmierung ergibt Sinn, wenn... du dein Problem rekursiv formulieren kannst. 35 / 36

55 Zusammenfassung: Was muss ich mir merken? Dynamische Programmierung ergibt Sinn, wenn... du dein Problem rekursiv formulieren kannst. du dein Problem in Teilprobleme zerstückeln kannst die sich oft wiederholen. 35 / 36

56 Zusammenfassung: Was muss ich mir merken? Dynamische Programmierung ergibt Sinn, wenn... du dein Problem rekursiv formulieren kannst. du dein Problem in Teilprobleme zerstückeln kannst die sich oft wiederholen. du genügen Speicherplatz zur Zwischenspeicherung (Top-Down) oder Vorberechnung (Bottom-Up) hast. 35 / 36

57 Zusammenfassung: Was muss ich mir merken? Dynamische Programmierung ergibt Sinn, wenn... du dein Problem rekursiv formulieren kannst. du dein Problem in Teilprobleme zerstückeln kannst die sich oft wiederholen. du genügen Speicherplatz zur Zwischenspeicherung (Top-Down) oder Vorberechnung (Bottom-Up) hast. deine Funktionsparameter ganzzahlig sind. 35 / 36

58 Zusammenfassung: Was muss ich mir merken? Dynamische Programmierung ergibt Sinn, wenn... du dein Problem rekursiv formulieren kannst. du dein Problem in Teilprobleme zerstückeln kannst die sich oft wiederholen. du genügen Speicherplatz zur Zwischenspeicherung (Top-Down) oder Vorberechnung (Bottom-Up) hast. deine Funktionsparameter ganzzahlig sind. du keine bessere Idee hast. 35 / 36

59 Literatur T. Cormen u. A. Introduction To Algorithms MIT Press, 2001 R. Sedgewick Algorithmen in C++ Pearsons Studium, 2002 Tobias Werth Dynamische Programmierung Hallo Welt für Fortgeschrittene, 2004 Rainer Müller Dynamische Programmierung Hallo Welt für Fortgeschrittene, 2008 Wikipedia Dynamic Programming programming 36 / 36

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

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

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

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 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

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

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

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. 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

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

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

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

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

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

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

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

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

Lösungsvorschlag Serie 2 Rekursion

Lösungsvorschlag Serie 2 Rekursion (/) Lösungsvorschlag Serie Rekursion. Algorithmen-Paradigmen Es gibt verschiedene Algorithmen-Paradigmen, also grundsätzliche Arten, wie man einen Algorithmus formulieren kann. Im funktionalen Paradigma

Mehr

Hallo Welt für Fortgeschrittene

Hallo Welt für Fortgeschrittene Hallo Welt für Fortgeschrittene Zahlentheorie, Arithmetik und Algebra II Benjamin Fischer Informatik 2 Programmiersysteme Martensstraße 3 91058 Erlangen Gliederung Lineare Rekursion BigInteger Chinesischer

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

Primzahlen und Programmieren

Primzahlen und Programmieren Primzahlen Wir wollen heute gemeinsam einen (sehr grundlegenden) Zusammenhang zwischen Programmieren und Mathematik herstellen. Die Zeiten in denen Mathematiker nur mit Zettel und Stift (oder Tafel und

Mehr

Rekursive Funktionen (1)

Rekursive Funktionen (1) Rekursive Funktionen (1) Rekursive Algorithmen Wenn Gesamtlösung durch Lösen gleichartiger Teilprobleme erzielbar: Rekursion möglich Beispiel: Fakultät einer ganzen Zahl n: n i n! = i=1 für n > 0 1 für

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

Programmierung 2. Dynamische Programmierung. Sebastian Hack. Klaas Boesche. Sommersemester 2012. hack@cs.uni-saarland.de. boesche@cs.uni-saarland.

Programmierung 2. Dynamische Programmierung. Sebastian Hack. Klaas Boesche. Sommersemester 2012. hack@cs.uni-saarland.de. boesche@cs.uni-saarland. 1 Programmierung 2 Dynamische Programmierung Sebastian Hack hack@cs.uni-saarland.de Klaas Boesche boesche@cs.uni-saarland.de Sommersemester 2012 2 Übersicht Stammt aus den Zeiten als mit Programmierung

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

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

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

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

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

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

Gierige Algorithmen. Seminar Hallo Welt! für Fortgeschrittene. Daniel Ziegler Daniel Ziegler Gierige Algorithmen

Gierige Algorithmen. Seminar Hallo Welt! für Fortgeschrittene. Daniel Ziegler Daniel Ziegler Gierige Algorithmen Gierige Algorithmen Seminar Hallo Welt! für Fortgeschrittene Daniel Ziegler 23.05.2016 Daniel Ziegler Gierige Algorithmen 23.05.2016 1 / 48 Inhalt 1 Einführung Allgemeines Wichtige Eigenschaften Gierige-Strategie

Mehr

Informatik für Schüler, Foliensatz 18 Rekursion

Informatik für Schüler, Foliensatz 18 Rekursion Prof. G. Kemnitz Institut für Informatik, Technische Universität Clausthal 26. März 2009 1/10 Informatik für Schüler, Foliensatz 18 Rekursion Prof. G. Kemnitz Institut für Informatik, Technische Universität

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

Algorithmen und Datenstrukturen Tafelübung 4. Jens Wetzl 15. November 2011

Algorithmen und Datenstrukturen Tafelübung 4. Jens Wetzl 15. November 2011 Algorithmen und Datenstrukturen Tafelübung 4 Jens Wetzl 15. November 2011 Folien Keine Garantie für Vollständigkeit und/oder Richtigkeit Keine offizielle Informationsquelle LS2-Webseite Abrufbar unter:

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

Teil 5: Zeiger, Felder, Zeichenketten Gliederung

Teil 5: Zeiger, Felder, Zeichenketten Gliederung Teil 5: Zeiger, Felder, Zeichenketten Gliederung Zeiger und Adressen Felder (Arrays) Zeichenketten (Strings) Zeigerarithmetik Mehrdimensionale Felder Zeiger und Adressen Felder Zeichenketten Zeigerarithmetik

Mehr

Speicher und Adressraum

Speicher und Adressraum Linearer Speicher (Adressraum) Technische Universität München Speicher und Adressraum Freie Speicherhalde (Heap) Freier Speicherstapel (Stack) Globale Variablen Bibliotheksfunktionen Laufzeitsystem Programmcode

Mehr

Algorithmen und Datenstrukturen"

Algorithmen und Datenstrukturen Lehrstuhl für Medieninformatik Universität Siegen Fakultät IV 9 Rekursion Version: WS 14/15 Fachgruppe Medieninformatik 9.1 9 Rekursion... Motivation: Rekursive Formulierung von Algorithmen führt in vielen

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

Algorithmen und Datenstrukturen"

Algorithmen und Datenstrukturen Lehrstuhl für Medieninformatik Universität Siegen Fakultät IV 9 Rekursion Version: WS 14/15 Fachgruppe Medieninformatik 9.1 9 Rekursion... Motivation: Rekursive Formulierung von Algorithmen führt in vielen

Mehr

3. Übungsblatt zu Algorithmen I im SoSe 2017

3. Übungsblatt zu Algorithmen I im SoSe 2017 Karlsruher Institut für Technologie Prof. Dr. Jörn Müller-Quade Institut für Theoretische Informatik Björn Kaidel, Sebastian Schlag, Sascha Witt 3. Übungsblatt zu Algorithmen I im SoSe 2017 http://crypto.iti.kit.edu/index.php?id=799

Mehr

Folgen und Funktionen in der Mathematik

Folgen und Funktionen in der Mathematik Folgen und Funktionen in der Mathematik Anhand von einigen exemplarischen Beispielen soll die Implementierung von mathematischen Algorithmen in C/C++ gezeigt werden: Reelle Funktionen in C/C++ Diese wird

Mehr

Gierige Algorithmen. Seminar Hallo Welt! für Fortgeschrittene. Jennifer Naumann. 11.Juni 2013

Gierige Algorithmen. Seminar Hallo Welt! für Fortgeschrittene. Jennifer Naumann. 11.Juni 2013 Gierige Algorithmen Seminar Hallo Welt! für Fortgeschrittene Jennifer Naumann 11.Juni 2013 Jennifer Naumann Gierige Algorithmen 11.Juni 2013 1 / 44 Übersicht 1 Einführung Definition Wann darf man gierige

Mehr

Rekursive Funktionen

Rekursive Funktionen Um Rekursion zu verstehen, muss man vor allem Rekursion verstehen. http://www2.norwalk-city.k12.oh.us/wordpress/precalc/files/2009/05/mona-lisa-jmc.jpg Rekursive Funktionen OOPM, Ralf Lämmel Was ist Rekursion?

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

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

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

C++ - Kontrollstrukturen Teil 2

C++ - Kontrollstrukturen Teil 2 C++ - Kontrollstrukturen Teil 2 Reiner Nitsch 8417 r.nitsch@fbi.h-da.de Schleife und Verzweigung kombiniert SV initialisieren while(b1) if(b2) w f V1 V2 SV Richtung Ziel verändern Wichtiger Baustein vieler

Mehr

4 Rekursionen. 4.1 Erstes Beispiel

4 Rekursionen. 4.1 Erstes Beispiel 4 Rekursionen Viele Algorithmen besitzen sowohl eine iterative als auch eine rekursive Lösung. Sie unterscheiden sich darin, dass die iterative Version meist einen etwas längeren Kode besitzt, während

Mehr

einlesen n > 0? Ausgabe Negative Zahl

einlesen n > 0? Ausgabe Negative Zahl 1 Lösungen Kapitel 1 Aufgabe 1.1: Nassi-Shneiderman-Diagramm quadratzahlen Vervollständigen Sie das unten angegebene Nassi-Shneiderman-Diagramm für ein Programm, welches in einer (äußeren) Schleife Integer-Zahlen

Mehr

Algorithmen I. Tutorium 1-3. Sitzung. Dennis Felsing

Algorithmen I. Tutorium 1-3. Sitzung. Dennis Felsing Algorithmen I Tutorium 1-3. Sitzung Dennis Felsing dennis.felsing@student.kit.edu www.stud.uni-karlsruhe.de/~ubcqr/algo 2011-05-02 Überblick 1 Sortieren und Suchen 2 Mastertheorem 3 Datenstrukturen 4 Kreativaufgabe

Mehr

Technische Universität München. Kombinatorik. Christian Fuchs

Technische Universität München. Kombinatorik. Christian Fuchs Kombinatorik Christian Fuchs 1.Definition Kombinatorik 2.Grundlegende Zählmethoden 3.Binomialkoeffizienten 4.Permutationen 5.Stirling-Zahlen 6.Catalan-Zahlen 7.Zahlpartitionen 8.Aufgaben 9.Literatur Technische

Mehr

Rekursive Funktionen

Rekursive Funktionen Um Rekursion zu verstehen, muss man vor allem Rekursion verstehen. http://www2.norwalk-city.k12.oh.us/wordpress/precalc/files/2009/05/mona-lisa-jmc.jpg Rekursive Funktionen OOPM, Ralf Lämmel Was ist Rekursion?

Mehr

Vorsemesterkurs Informatik Übungsaufgaben. Tag 4a - Python

Vorsemesterkurs Informatik Übungsaufgaben. Tag 4a - Python Vorsemesterkurs Informatik Übungsaufgaben Tag 4a - Python Aufgabe 1: Listen Mache dich im Python-Interpreter mit dem Umgang mit Listen vertraut. Kapitel 2.6 im Skript (s.40) enthält nützliche Informationen.

Mehr

Grundlagen der Programmierung WS 15/16 (Vorlesung von Prof. Bothe)

Grundlagen der Programmierung WS 15/16 (Vorlesung von Prof. Bothe) Humboldt-Universität zu Berlin Institut für Informatik Grundlagen der Programmierung WS 15/16 (Vorlesung von Prof. Bothe) Übungsblatt 4: Felder und Rekursion Abgabe: bis 9:00 Uhr am 14.12.2015 über Goya

Mehr

Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme

Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme Programmieren I Dr. Werner Struckmann 6. März 2013 Name: Vorname: Matrikelnummer: Kennnummer: Anrede: Frau Herr Studiengang:

Mehr

Grundlagen der Informatik

Grundlagen der Informatik Grundlagen der Informatik Musterklausur 1. Dynamische Datenstrukturen und objektorientierte Programmierung Zur Verwaltung einer digitalen Fotogalerie sollen Techniken der objektorientierten Programmierung

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

Algorithmen & Programmierung. Rekursive Funktionen (2)

Algorithmen & Programmierung. Rekursive Funktionen (2) Algorithmen & Programmierung Rekursive Funktionen (2) Arten von Rekursion Direkte Rekursion Den Aufruf einer Funktion direkt aus ihrem Funktionskörper heraus bezeichnet man als direkte Rekursion (so haben

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

Einführung in die Informatik I

Einführung in die Informatik I Einführung in die Informatik I Fortgeschrittene Rekursion Prof. Dr. Nikolaus Wulff Problematische Rekursion Mittels Rekursion lassen sich Spezifikationen recht elegant und einfach implementieren. Leider

Mehr

Algorithms & Data Structures 2

Algorithms & Data Structures 2 Algorithms & Data Structures Digital Sorting WS B. Anzengruber-Tanase (Institute for Pervasive Computing, JKU Linz) (Institute for Pervasive Computing, JKU Linz) WIEDERHOLUNG :: UNTERE SCHRANKE FÜR SORTIEREN

Mehr

EINI LogWing/WiMa. Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 17/18

EINI LogWing/WiMa. Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 17/18 EINI LogWing/WiMa Einführung in die Informatik für Naturwissenschaftler und Ingenieure Vorlesung 2 SWS WS 17/18 Dr. Lars Hildebrand Fakultät für Informatik Technische Universität Dortmund lars.hildebrand@tu-dortmund.de

Mehr

public static void main(string[] args) {

public static void main(string[] args) { Lösungen 55 Lösungen Aufgabe 1: Die Variable y enthält den Wert 1.0. Entsprechend den Prioritäten der beteiligten Operatoren / und = wird erst die Division und anschließend die Zuweisung durchgeführt.

Mehr

Advanced Programming in C

Advanced Programming in C Advanced Programming in C Pointer und Listen Institut für Numerische Simulation Rheinische Friedrich-Wilhelms-Universität Bonn Oktober 2013 Überblick 1 Variablen vs. Pointer - Statischer und dynamischer

Mehr

Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2017/18. Vorbereitende Aufgaben

Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2017/18. Vorbereitende Aufgaben Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2017/18 Fakultät für Informatik Lehrstuhl 14 Lars Hildebrand Übungsblatt 7 Besprechung: 4. 8.12.2017 (KW 49) Vorbereitende

Mehr

Mathematische Rekursion

Mathematische Rekursion Rekursion Mathematische Rekursion o Viele mathematische Funktionen sind sehr natürlich rekursiv definierbar, d.h. o die Funktion erscheint in ihrer eigenen Definition. Mathematische Rekursion o Viele mathematische

Mehr

EINFÜHRUNG IN DIE PROGRAMMIERUNG

EINFÜHRUNG IN DIE PROGRAMMIERUNG EINFÜHRUNG IN DIE PROGRAMMIERUNG GRUNDLAGEN Tobias Witt!! 24.03.2014 ORGANISATORISCHES 09:00-10:30! Täglich Übungen zur Vertiefung! Laptop hier nicht erforderlich! Linux, OS X! Freitag: http://hhu-fscs.de/linux-install-party/

Mehr

Programmierkurs Python I

Programmierkurs Python I Programmierkurs Python I Michaela Regneri & Stefan Thater Universität des Saarlandes FR 4.7 Allgemeine Linguistik (Computerlinguistik) Winter 2010/11 Übersicht Kurze Wiederholung: while Sammeltypen (kurz

Mehr

Selbststudium OOP7 & ALG2 Auftrag

Selbststudium OOP7 & ALG2 Auftrag Selbststudium OOP7 & ALG2 Auftrag Kapitel 5.6 1. zu bearbeitende Aufgaben: 5.24 bis 5.30 5.24: Return Method Set entryset() V get(object key) Set keyset() V put(k key, V value) void

Mehr

13 Java 4 - Entwurfsmuster am Beispiel des Rucksackproblems

13 Java 4 - Entwurfsmuster am Beispiel des Rucksackproblems 13 Java 4 - Entwurfsmuster am Beispiel des Rucksackproblems 13.1 Modellierung des Rucksackproblems 13.2 Lösung mit Greedy-Algorithmus 13.3 Lösung mit Backtracking 13.4 Lösung mit Dynamischer Programmierung

Mehr

Einführung in die Programmierung Wintersemester 2010/11

Einführung in die Programmierung Wintersemester 2010/11 Einführung in die Programmierung Wintersemester 2010/11 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund : Rekursion Inhalt Rekursion: Technik Rekursion

Mehr

(Digital) Sorting. October 25, Algorithms & Datastructures 2 Exercises WS 2016

(Digital) Sorting. October 25, Algorithms & Datastructures 2 Exercises WS 2016 (Digital) Sorting October 2, 2016 Algorithms & Datastructures 2 Exercises WS 2016 Dipl.-Ing. University Linz, Institute for Pervasive Computing Altenberger Straße 69, A-4040 Linz kurz@pervasive.jku.at

Mehr

Informatik II Greedy-Algorithmen

Informatik II Greedy-Algorithmen lausthal Informatik II reedy-algorithmen. Zachmann lausthal University, ermany zach@in.tu-clausthal.de Erinnerung: Dynamische Programmierung Zusammenfassung der grundlegenden Idee: Optimale Sub-Struktur:

Mehr

Algorithmen und Datenstrukturen 1 VL Übungstest WS Januar 2011

Algorithmen und Datenstrukturen 1 VL Übungstest WS Januar 2011 Technische Universität Wien Institut für Computergraphik und Algorithmen Arbeitsbereich für Algorithmen und Datenstrukturen 186.172 Algorithmen und Datenstrukturen 1 VL 4.0 2. Übungstest WS 2010 14. Januar

Mehr

Effiziente Algorithmen 2

Effiziente Algorithmen 2 Effiziente Algorithmen 2 Dr. Hanjo Täubig Lehrstuhl für Effiziente Algorithmen (Prof. Dr. Ernst W. Mayr) Institut für Informatik Technische Universität München Sommersemester 2009 Übersicht Algorithmen

Mehr

20. Dynamic Programming II

20. Dynamic Programming II 536 20. Dynamic Programming II Subset Sum Problem, Rucksackproblem, Greedy Algorithmus, Lösungen mit dynamischer Programmierung, FPTAS, Optimaler Suchbaum [Ottman/Widmayer, Kap. 7.2, 7.3, 5.7, Cormen et

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

20. Dynamic Programming II

20. Dynamic Programming II Aufgabe 20. Dynamic Programming II Subset Sum Problem, Rucksackproblem, Greedy Algorithmus, Lösungen mit dynamischer Programmierung, FPTAS, Optimaler Suchbaum [Ottman/Widmayer, Kap. 7.2, 7.3, 5.7, Cormen

Mehr

GI Vektoren

GI Vektoren Vektoren Problem: Beispiel: viele Variablen vom gleichen Typ abspeichern Text ( = viele char-variablen), Ergebnisse einer Meßreihe ( = viele int-variablen) hierfür: Vektoren ( = Arrays = Feld ) = Ansammlung

Mehr

12. Rekursion Grundlagen der Programmierung 1 (Java)

12. Rekursion Grundlagen der Programmierung 1 (Java) 12. Rekursion Grundlagen der Programmierung 1 (Java) Fachhochschule Darmstadt Haardtring 100 D-64295 Darmstadt Prof. Dr. Bernhard Humm FH Darmstadt, 24. Januar 2006 Einordnung im Kontext der Vorlesung

Mehr

AuD: große Übung Christian Scheffer Jan-Marc Reinhardt

AuD: große Übung Christian Scheffer Jan-Marc Reinhardt AuD: große Übung 5.11.2015 Christian Scheffer Jan-Marc Reinhardt 1 Anmeldung bis heute 14:00! 2 Semesterplan: AuD - WS1516 KW VL%&%Nr.% (Di.+Mi.) Gr.%UE% (Do) Kl.%UE% (Mi.+Do.+Fr.) HA%Ausgabe% (Mi.abends)

Mehr

Programmierung für Mathematik (HS13)

Programmierung für Mathematik (HS13) software evolution & architecture lab Programmierung für Mathematik (HS13) Übung 11 1 Aufgabe: Codeverständnis 1.1 Aufgabenstellung Notieren Sie, was der folgende Code ausgeben würde, wenn er so in einer

Mehr

Algorithmische Bioinformatik 1

Algorithmische Bioinformatik 1 Algorithmische Bioinformatik 1 Dr. Hanjo Täubig Lehrstuhl für Effiziente Algorithmen (Prof. Dr. Ernst W. Mayr) Institut für Informatik Technische Universität München Sommersemester 2009 Übersicht Algorithmen

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

Präfix-Summe. Das Schweizer Offiziersmesser der Parallelen Algorithmen. Parallele Rechenmodelle Präfix-Summe Brents Lemma Anwendungen

Präfix-Summe. Das Schweizer Offiziersmesser der Parallelen Algorithmen. Parallele Rechenmodelle Präfix-Summe Brents Lemma Anwendungen Präfix-Summe Das Schweizer Offiziersmesser der Parallelen Algorithmen Parallele Rechenmodelle Präfix-Summe Brents Lemma Anwendungen Parallele Rechenmodelle Beispiel: Summieren von Zahlen Verlauf des Rechenprozesses:

Mehr

Algorithmen und Datenstrukturen (für ET/IT) Wiederholung: Ziele der Vorlesung. Wintersemester 2012/13. Dr. Tobias Lasser

Algorithmen und Datenstrukturen (für ET/IT) Wiederholung: Ziele der Vorlesung. Wintersemester 2012/13. Dr. Tobias Lasser Algorithmen und Datenstrukturen (für ET/IT) Wintersemester 2012/13 Dr. Tobias Lasser Computer Aided Medical Procedures Technische Universität München Wiederholung: Ziele der Vorlesung Wissen: Algorithmische

Mehr

Informatik II, SS 2016

Informatik II, SS 2016 Informatik II - SS 2016 (Algorithmen & Datenstrukturen) Vorlesung 20 (13.7.2016) String Matching (Textsuche) Algorithmen und Komplexität Textsuche / String Matching Gegeben: Zwei Zeichenketten (Strings)

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

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

Algorithmen und Datenstrukturen (für ET/IT)

Algorithmen und Datenstrukturen (für ET/IT) Algorithmen und Datenstrukturen (für ET/IT) Wintersemester 2012/13 Dr. Tobias Lasser Computer Aided Medical Procedures Technische Universität München Wiederholung: Ziele der Vorlesung Wissen: Algorithmische

Mehr

Numerische Verfahren und Grundlagen der Analysis

Numerische Verfahren und Grundlagen der Analysis Numerische Verfahren und Grundlagen der Analysis Rasa Steuding Hochschule RheinMain Wiesbaden Wintersemester 2011/12 R. Steuding (HS-RM) NumAna Wintersemester 2011/12 1 / 26 1. Folgen R. Steuding (HS-RM)

Mehr

Einführung in die Programmierung Wintersemester 2017/18

Einführung in die Programmierung Wintersemester 2017/18 Einführung in die Programmierung Wintersemester 2017/18 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund : Rekursion Inhalt Rekursion: Technik Rekursion

Mehr

Grundlegende Algorithmen mit Java

Grundlegende Algorithmen mit Java Doina Logofätu Grundlegende Algorithmen mit Java Vom Algorithmus zum fertigen Programm Lern- und Arbeitsbuch für Informatiker und Mathematiker Mit 115 Abbildungen '-^~, v :^i yr:,',v.t&i- I " vieweg Inhaltsverzeichnis

Mehr

Einführung - Parser. Was ist ein Parser?

Einführung - Parser. Was ist ein Parser? Gliederung 1. Einleitung 1.1 Was ist ein Parser? 1.2 Was ist ein tabellengesteuerter TD-Parser? 1. Tabellengesteuerter TD-Parser 2.1 Funktionsweise 2.2 Darstellung als Pseudocode 2.3 Konstruktion von prädiktiven

Mehr

Inhalt Kapitel 2: Rekursion

Inhalt Kapitel 2: Rekursion Inhalt Kapitel 2: Rekursion 1 Beispiele und Definition 2 Partialität und Terminierung 3 Formen der Rekursion Endständige Rekursion 4 Einbettung 29 Beispiele und Definition Rekursion 30 Man kann eine Funktion

Mehr

Programmierung und Angewandte Mathematik

Programmierung und Angewandte Mathematik Programmierung und Angewandte Mathematik C++ /Scilab Programmierung und Einführung in das Konzept der objektorientierten Anwendungen zu wissenschaftlichen Rechnens SS 2012 Ablauf Was sind Funktionen/Methoden

Mehr

Dynamische Programmierung

Dynamische Programmierung Dynamische Programmierung Simon Philippi - 53577 HTW Aalen Jasmin Ratajczyk - 57135 HTW Aalen 25. Januar 2017 Khaled Ahmed - 53558 HTW Aalen 1 Inhaltsverzeichnis 1 Einleitung 3 2 Definition 5 2.1 Top-Down...............................

Mehr