Hallo Welt für Fortgeschrittene
|
|
- Gerburg Alexandra Friedrich
- vor 6 Jahren
- Abrufe
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 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
MehrDynamische 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
MehrDynamische 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
Mehr19. 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.
MehrDynamische 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
MehrDynamische 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
MehrTop-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
MehrAlgorithmen 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
MehrDatenstrukturen & 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
MehrDynamische 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
Mehr19. 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,
MehrDynamisches 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)
MehrAlgorithmen & 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
MehrObjektorientierte 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
MehrDatenstrukturen 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
MehrAlgorithmen 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
MehrAlgorithmen 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
MehrProgrammieren 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
MehrLö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
MehrHallo 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
MehrAlgorithmen 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
MehrPrimzahlen 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
MehrRekursive 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
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
MehrProgrammierung 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
MehrAlgorithmen 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
MehrAlgorithmen 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
MehrKapitel 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
MehrAlgorithmen 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
MehrEin 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
MehrADS: 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:
MehrGierige 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
MehrInformatik 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
MehrC++ 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,
MehrAlgorithmen 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:
MehrMethoden 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.
MehrTeil 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
MehrSpeicher und Adressraum
Linearer Speicher (Adressraum) Technische Universität München Speicher und Adressraum Freie Speicherhalde (Heap) Freier Speicherstapel (Stack) Globale Variablen Bibliotheksfunktionen Laufzeitsystem Programmcode
MehrAlgorithmen 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
MehrEinleitung 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
MehrAlgorithmen 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
Mehr3. Ü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
MehrFolgen 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
MehrGierige 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
MehrRekursive 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?
MehrEntscheidungsbä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
MehrKapitel 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
MehrGrundlagen 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
MehrC++ - 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
Mehr4 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
Mehreinlesen 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
MehrAlgorithmen 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
MehrTechnische 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
MehrRekursive 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?
MehrVorsemesterkurs 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.
MehrGrundlagen 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
MehrTechnische 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:
MehrGrundlagen der Informatik
Grundlagen der Informatik Musterklausur 1. Dynamische Datenstrukturen und objektorientierte Programmierung Zur Verwaltung einer digitalen Fotogalerie sollen Techniken der objektorientierten Programmierung
MehrTheoretische 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
MehrAlgorithmen & 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
MehrVorkurs 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
MehrEinfü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
MehrAlgorithms & 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
MehrEINI 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
Mehrpublic 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.
MehrAdvanced 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
MehrPraktikum 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
MehrMathematische 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
MehrEINFÜ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/
MehrProgrammierkurs 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
MehrSelbststudium 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
Mehr13 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
MehrEinfü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 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
MehrInformatik 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:
MehrAlgorithmen 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
MehrEffiziente 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
Mehr20. 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
MehrAbschnitt 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
Mehr20. 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
MehrGI 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
Mehr12. 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
MehrAuD: 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)
MehrProgrammierung 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
MehrAlgorithmische 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
MehrAlgorithmen 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
MehrPrä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:
MehrAlgorithmen 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
MehrInformatik 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)
Mehr5 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:
MehrZeichenketten. 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
MehrAlgorithmen 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
MehrNumerische 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)
MehrEinfü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
MehrGrundlegende 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
MehrEinfü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
MehrInhalt 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
MehrProgrammierung 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
MehrDynamische 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