Dynamische Programmierung

Größe: px
Ab Seite anzeigen:

Download "Dynamische Programmierung"

Transkript

1 Dynamische Programmierung Julian Brost 11. Juni 2013 Julian Brost Dynamische Programmierung 11. Juni / 39

2 Gliederung 1 Was ist dynamische Programmierung? Top-Down-DP Bottom-Up-DP 2 Matrix-Kettenmultiplikation 3 Longest Common Subsequence 4 Longest Increasing Subsequence 5 Zusammenfassung Julian Brost Dynamische Programmierung 11. Juni / 39

3 Fibonacci-Folge F 0 = 0 F 1 = 1 F n = F n 1 + F n 2 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144,... Julian Brost Dynamische Programmierung 11. Juni / 39

4 Fibonacci-Folge F 6 F 4 F 5 F 2 F 3 F 3 F 4 F 0 F 1 F 1 F 2 F 1 F F 0 F 1 F 0 F 1 Julian Brost Dynamische Programmierung 11. Juni / 39

5 Fibonacci (naiv) O(2 n ) long long fib_naiv(int n) { if (n == 0) return 0; if (n == 1) return 1; return fib_naiv(n-1) + fib_naiv(n-2); Julian Brost Dynamische Programmierung 11. Juni / 39

6 Das geht besser! Dynamische Programmierung: Verfahren zur Lösung von (Optimierungs-)Problemen Berechnung der Gesamtlösung unter effizienter Verwendung überlappender Teillösungen Eingeführt durch Richard Bellman Julian Brost Dynamische Programmierung 11. Juni / 39

7 Top-Down-DP Idee: Rekursive Implementierung merkt sich bereits berechnete Teilergebnisse in einem Array (Memoization) Bei Aufruf der Funktion: Überprüfen, ob der Wert bereits berechnet wurde Falls ja: Keine erneute Berechnung sondern direktes Zurückgeben des bekannten Werts Ansonsten: Berechnen, Speichern und Zurückgeben des Werts Julian Brost Dynamische Programmierung 11. Juni / 39

8 Fibonacci (Top-Down) O(n) #define UNKNOWN 0 long long table[max_n] = {; // initialisiert // auf UNKNOWN long long fib_top_down(int n) { if (n == 0) return 0; if (n == 1) return 1; if (table[n] == UNKNOWN) // noch nicht berechnet table[n] = fib_top_down(n-1) + fib_top_down(n-2); return table[n]; Julian Brost Dynamische Programmierung 11. Juni / 39

9 Bottom-Up-DP Idee: Teilprobleme sortieren und iterativ lösen Bei jedem Schritt: Lösen des aktuellen Problems durch Zugriff auf bereits berechnete Teillösungen (direkter Arrayzugriff statt rekursiver Aufruf) Julian Brost Dynamische Programmierung 11. Juni / 39

10 Fibonacci (Bottom-Up) O(n) long long fib_bottom_up(int n) { long long table[n+2]; table[0] = 0; table[1] = 1; for (int i = 2; i <= n; i++) { table[i] = table[i-1] + table[i-2]; return table[n]; Julian Brost Dynamische Programmierung 11. Juni / 39

11 Fibonacci: Ausführungszeit Naiv fib naiv(50) 1m s Top-Down fib top down(50) 0.003s Bottom-Up fib bottom up(50) 0.003s Julian Brost Dynamische Programmierung 11. Juni / 39

12 Top-Down vs. Bottom-Up Top-Down Pro Einfachere Implementierung Nur tatsächlich benötigte Teillösungen werden berechnet Contra Overhead durch Rekursion Beschränkte Rekursionstiefe beim ICPC (Stacklimit) Julian Brost Dynamische Programmierung 11. Juni / 39

13 Top-Down vs. Bottom-Up Bottom-Up Pro Kein Overhead durch Rekursion Gleiche asymptotische Laufzeit, aber geringerer konstanter Faktor Contra Komplizierter zu Implementieren Evtl. Berechnung nicht benötigter Teillösungen Julian Brost Dynamische Programmierung 11. Juni / 39

14 Matrix-Kettenmultiplikation Julian Brost Dynamische Programmierung 11. Juni / 39

15 Matrix-Kettenmultiplikation Matrizen A 1, A 2, A 3,..., A n gegeben Wir wollen A 1 A 2 A 3... A n möglichst effizient, d.h. mit möglichst wenigen skalaren Multiplikationen berechnen Matrizenmultiplikation ist assoziativ, Optimierung über Klammerung möglich Julian Brost Dynamische Programmierung 11. Juni / 39

16 Matrix-Kettenmultiplikation Wir definieren die Kosten für die Multiplikation zweier Matrizen A und B als Anzahl der notwendigen Skalaren Multiplikationen: cost(a, B) = A.rows A.cols B.cols Julian Brost Dynamische Programmierung 11. Juni / 39

17 Matrix-Kettenmultiplikation Ein Beispiel: A R B R C R 5 50 ((AB)C) cost(a, B) + cost(ab, C) = 7500 (A(BC)) cost(b, C) + cost(a, BC) = Julian Brost Dynamische Programmierung 11. Juni / 39

18 Matrix-Kettenmultiplikation A i..j := A i A i+1... A j, i j Falls i = j: trivial, keine Multiplikationen notwendig, also keine Kosten Sonst: Wir teilen das Produkt an einer Stelle k (i k < j): A i..k = A i..k A k+1..j Kosten ergeben sich durch die Kosten für die Berechnung von A i..k, A k+1..j sowie den Kosten für die Multiplikation dieser Beiden Matrizen Wir suchen in jedem Schritt ein k, sodass diese Kosten minimal werden Julian Brost Dynamische Programmierung 11. Juni / 39

19 Matrix-Kettenmultiplikation Sei m[i, j] die Anzahl der notwendigen skalaren Multiplikationen Wir suchen dann (insgesamt) m[1, n] { 0 falls i = j m[i, j] = min i..k, A k+1..j ) i k<j falls i < j Julian Brost Dynamische Programmierung 11. Juni / 39

20 Matrix-Kettenmultiplikation O(N 3 ) Matrix matrices[max_n] = { /*... */ ; int m[max_n][max_n]; int matrix_chain(int N) { for (int i = 0; i < N; i++) { m[i][i] = 0; for (int l = 2; l <= N; l++) { for (int i = 0; i <= N - l; i++) { int j = i + l - 1; m[i][j] = INT_MAX; for (int k = i; k < j; k++) { int q = m[i][k] + m[k+1][j] + matrices[i].rows * matrices[k].cols * matrices[j].cols; if (q < m[i][j]) { m[i][j] = q; return m[0][n-1]; Julian Brost Dynamische Programmierung 11. Juni / 39

21 Matrix-Kettenmultiplikation Um eine optimale Klammerung zu rekonstruieren: Zusätzliches Array s[i, j] speichert jeweils den Parameter k, für den die Teilung von A i..j optimal war. Mit diesen Informationen kann eine Funktion dann rekursiv jeweils eine optimale Klammerung für A i..k und A k+1..j ausgeben. Julian Brost Dynamische Programmierung 11. Juni / 39

22 Matrix-Kettenmultiplikation int s[max_n][max_n]; // (+) int matrix_chain(int N) { for (int i = 0; i < N; i++) { m[i][i] = 0; for (int l = 2; l <= N; l++) { for (int i = 0; i <= N - l; i++) { int j = i + l - 1; m[i][j] = INT_MAX; for (int k = i; k < j; k++) { int q = m[i][k] + m[k+1][j] + matrices[i].rows * matrices[k].cols * matrices[j].cols; if (q < m[i][j]) { m[i][j] = q; s[i][j] = k; // (+) return m[0][n-1]; Julian Brost Dynamische Programmierung 11. Juni / 39

23 Matrix-Kettenmultiplikation void print_optimal_parens(int i, int j) { if (i == j) { cout << " " << i << " "; else { cout << "("; int k = s[i][j]; print_optimal_parens(i, k); print_optimal_parens(k+1, j); cout << ")"; Aufruf: print optimal parens(0, N-1); Julian Brost Dynamische Programmierung 11. Juni / 39

24 Longest Common Subsequence Julian Brost Dynamische Programmierung 11. Juni / 39

25 Longest Common Subsequence Seien X = {x 1, x 2,..., x m und Y = {y 1, y 2,..., y n Folgen, sowie Z = {z 1, z 2,..., z k eine LCS von X und Y. 1 Wenn x m = y n, dann z k = x m = y n und Z k 1 ist LCS von X m 1 und Y n 1. 2 Wenn x m y n, dann impliziert z k x m, dass Z eine LCS von X m 1 und Y ist. 3 Wenn x m y n, dann impliziert z k y n, dass Z eine LCS von X und Y n 1 ist. Julian Brost Dynamische Programmierung 11. Juni / 39

26 Longest Common Subsequence Sei c[i, j] die Länge einer LCS von X i und Y j Wir suchen dann (insgesamt) c[m, n] 0 falls i = 0 oder j = 0 c[i, j] = c[i 1, j 1] + 1 falls i, j > 0 und x i = y j max(c[i, j 1], c[i 1, j]) falls i, j > 0 und x i y j Julian Brost Dynamische Programmierung 11. Juni / 39

27 LCS O(MN) string X = /*... */, Y = /*... */ ; int lcs[max_m+1][max_n+1]; int LCS() { int m = X.size(); int n = Y.size(); for (int i = 1; i <= m; i++) { for (int j = 1; j <= n; j++) { if (X[i-1] == Y[j-1]) { lcs[i][j] = lcs[i-1][j-1] + 1; else { lcs[i][j] = max(lcs[i-1][j], lcs[i][j-1]); return lcs[m][n]; Julian Brost Dynamische Programmierung 11. Juni / 39

28 Longest Common Subsequence Um eine LCS zu rekonstruieren: Keine Speicherung von weiteren Informationen notwendig, da sich die Entscheidung in O(1) aus X[i-1], Y[j-1], lcs[i-1][j] und lcs[i][j-1] rekonstruieren lässt (alternativ aber trotzdem möglich). Julian Brost Dynamische Programmierung 11. Juni / 39

29 Longest Common Subsequence void print_lcs(int i, int j) { if (i == 0 j == 0) { return; if (X[i-1] == Y[j-1]) { print_lcs(i-1, j-1); cout << X[i-1]; else if (lcs[i-1][j] >= lcs[i][j-1]) { print_lcs(i-1, j); else { print_lcs(i, j-1); Aufruf: print LCS(m, n); 1 1 m = X.size(), n = Y.size() Julian Brost Dynamische Programmierung 11. Juni / 39

30 Longest Increasing Subsequence Julian Brost Dynamische Programmierung 11. Juni / 39

31 Longest Increasing Subsequence Vorgehensweise: Wir fügen alle Folgenglieder der Reihe nach sortiert in ein Array (hier: minval) ein, d.h. 1 wir suchen den ersten Wert im Array, der größer oder gleich dem aktuellen Folgenglied ist und ersetzen ihn durch dieses 2 falls kein solcher Wert im Array existiert (d.h. alle Werte kleiner sind), fügen wir den Wert am Ende an Im Fall (2) haben wir eine längere LIS gefunden und erhöhen die Variable maxlen Julian Brost Dynamische Programmierung 11. Juni / 39

32 LIS O(N log N) int seq[max_n] = { /*... */ ; // Zu betrachtende Folge int minval[max_n]; int LIS(int N) { int maxlen = 0; for (int i = 0; i < N; i++) { int lis = lower_bound(minval, minval + maxlen, seq[i]) - minval + 1; if (lis > maxlen) { maxlen = lis; minval[lis-1] = seq[i]; else if (seq[i] < minval[lis-1]) { minval[lis-1] = seq[i]; return maxlen; Julian Brost Dynamische Programmierung 11. Juni / 39

33 Longest Increasing Subsequence Um eine LIS zu rekonstruieren: Speichern des Index in minval statt des Werts Zusätzliches Array, um jeweils den Vorgänger zu speichern Dieses lässt sich dann von hinten durchgehen, um eine LIS zu rekonstruieren Julian Brost Dynamische Programmierung 11. Juni / 39

34 Longest Increasing Subsequence int previd[maxn]; int maxid = -1; int LIS(int N) { int maxlen = 0; for (int i = 0; i < N; i++) { int lis = lower_bound(minval, minval + maxlen, i, // (*) [](int x, int y){ return seq[x] < seq[y]; ) - minval + 1; // (*) if (lis == 1) previd[i] = -1; // (+) else previd[i] = minval[lis-2]; // (+) if (lis > maxlen) { maxlen = lis; minval[lis-1] = i; maxid = i; // (+) else if (seq[i] < seq[minval[lis-1]]) { minval[lis-1] = i; return maxlen; Julian Brost Dynamische Programmierung 11. Juni / 39

35 Longest Increasing Subsequence void print_lis(int i) { if (i < 0) return; print_lis(previd[i]); cout << seq[i] << " "; Aufruf: print LIS(maxid); Julian Brost Dynamische Programmierung 11. Juni / 39

36 Zusammenfassung Julian Brost Dynamische Programmierung 11. Juni / 39

37 Wann verwende ich DP? Optimierungsprobleme mit Optimaler Substruktur Das Problem lässt sich in kleinere Teilprobleme zerlegen Eine optimale Gesamtlösung lässt sich aus optimalen Teillösungen zusammensetzen Überlappende Teilprobleme Ein einfacher rekursiver Algorithmus würde die gleichen Teilprobleme immer wieder lösen Durch Speichern der Teilergebnisse wird die Laufzeit massiv verbessert Julian Brost Dynamische Programmierung 11. Juni / 39

38 Wie verwende ich DP? 1 Überprüfen, ob DP anwendbar ist (siehe vorherige Folie) 2 Rekursive Lösung finden 3 Umsetzung mit DP (bottom-up oder top-down) 4 Rekonstruieren einer Lösung (falls erforderlich) Julian Brost Dynamische Programmierung 11. Juni / 39

39 Quellen Thomas H. Cormen, et al.: Introductions to Algorithms, Third Edition, MIT Press Tobias Werth: Dynamische Programmierung (Hallo Welt, 2004) Ludwig Höcker: Dynamische Programmierung (Hallo Welt, 2012) Longest_Increasing_Subsequence increasing_subsequence Hallo Welt Wiki Julian Brost Dynamische Programmierung 11. Juni / 39

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

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

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

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

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

Algorithmen und Datenstrukturen 2

Algorithmen und Datenstrukturen 2 Algorithmen und Datenstrukturen Lerneinheit : Dynamisches Programmieren Prof. Dr. Christoph Karg Studiengang Informatik Hochschule Aalen Sommersemester.. Einleitung Diese Lerneinheit widmet sich einer

Mehr

Optimierung. Algorithmik III Algorithmen und Modelle für kontinuierliche Datenstrukturen. Vorgehen: Dynamische Programmierung

Optimierung. Algorithmik III Algorithmen und Modelle für kontinuierliche Datenstrukturen. Vorgehen: Dynamische Programmierung Optimierung Algorithmik III Algorithmen und Modelle für kontinuierliche Datenstrukturen Optimierung I Dynamisches Programmieren Günther Greiner Lehrstuhl für Graphische Datenverarbeitung Sommersemester

Mehr

19. Dynamic Programming I

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

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

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

Formulierung mittels Dynamischer Programmierung

Formulierung mittels Dynamischer Programmierung Formulierung mittels Dynamischer Programmierung Beobachtung: die Anzahl der Teilprobleme A i j n mit i j n ist nur Folgerung: der naïve rekursive Algo berechnet viele Teilprobleme mehrfach! Idee: Bottom-up-Berechnung

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

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

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

0 i = n w n > k v n. V (i +1,k), max v i + V (i +1,k w i )

0 i = n w n > k v n. V (i +1,k), max v i + V (i +1,k w i ) Sei V(i,k) der maximal mögliche Wert für die egenstände i, i+1,, n bei gegebener max. Kapazität k V(i,k) kann dann für i n geschrieben werden als i = n w n > k v n V (i, k) = V (i +1,k) V (i +1,k), max

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

Hallo Welt für Fortgeschrittene

Hallo Welt für Fortgeschrittene Hallo Welt für Fortgeschrittene Dynamische Programmierung Jan Spieck Programming Systems Group Martensstr. 3 91058 Erlangen Germany Gliederung Einführung Definition und Abgrenzung Top-Down und Bottom-Up

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

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

Einführung in die Objektorientierte Programmierung Vorlesung 17: Dynamische Programmierung. Sebastian Küpper

Einführung in die Objektorientierte Programmierung Vorlesung 17: Dynamische Programmierung. Sebastian Küpper Einführung in die Objektorientierte Programmierung Vorlesung 17: Dynamische Programmierung Sebastian Küpper Redundanz Rekursiver Lösungen Rekursion kann elegante Bescheibungen zur Problemlösung ergeben

Mehr

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen Algorithmen und Datenstrukturen Wintersemester 2012/13 26. Vorlesung Greedy- und Approximationsalgorithmen Prof. Dr. Alexander Wolff Lehrstuhl für Informatik I Operations Research Optimierung für Wirtschaftsabläufe:

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

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

Dynamische Programmierung II

Dynamische Programmierung II Vorlesungstermin 10: Dynamische Programmierung II Markus Püschel David Steurer talks2.dsteurer.org/dp2.pdf Algorithmen und Datenstrukturen, Herbstsemester 2018, ETH Zürich Plan für heute Dynamische Programmierung

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

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

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

Datenstrukturen. Mariano Zelke. Sommersemester 2012

Datenstrukturen. Mariano Zelke. Sommersemester 2012 Datenstrukturen Mariano Zelke Sommersemester 2012 Mariano Zelke Datenstrukturen 2/19 Das Teilfolgenproblem: Algorithmus A 3 A 3 (i, j bestimmt den Wert einer maximalen Teilfolge für a i,..., a j. (1 Wenn

Mehr

Algorithmik Übung 3 Prof. Dr. Heiner Klocke. Sortierfolge nach Werten: 7 8 9 10 Bube Dame König As nach Farben: Karo ( ) Herz ( ) Piek ( ) Kreuz ( )

Algorithmik Übung 3 Prof. Dr. Heiner Klocke. Sortierfolge nach Werten: 7 8 9 10 Bube Dame König As nach Farben: Karo ( ) Herz ( ) Piek ( ) Kreuz ( ) Algorithmi Übung 3 Prof. Dr. Heiner Kloce Winter 11/12 16.10.2011 Divide&Conquer- Algorithmen lassen sich gut als reursive Algorithmen darstellen. Das Prinzip eines reursiven Algorithmus beruht darauf,

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

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

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

5.4 Das Rucksackproblem

5.4 Das Rucksackproblem Problemstellung: 5.4 Das Rucksackproblem Eingabe: Ganzzahlige Volumina a 1,..., a n > 0, Nutzenwerte c 1,..., c n > 0, ganzzahlige Volumenschranke b. Aufgabe: Packe die Objekte in einen Rucksack von Volumen

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

Ü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

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

Effiziente Algorithmen und Datenstrukturen I. Kapitel 10: Lineare Algebra

Effiziente Algorithmen und Datenstrukturen I. Kapitel 10: Lineare Algebra Effiziente Algorithmen und Datenstrukturen I Kapitel 10: Lineare Algebra Christian Scheideler WS 2008 19.02.2009 Kapitel 10 1 Überblick Notation Arithmetik auf großen Zahlen (Addition und Multiplikation)

Mehr

Proseminar Effiziente Algorithmen

Proseminar Effiziente Algorithmen Proseminar Effiziente Algorithmen Kapitel 9: Divide & Conquer und Prof. Dr. Christian Scheideler WS 218 Generische Optimierungsverfahren: Systematische Suche lass nichts aus Divide and Conquer löse das

Mehr

Satz 90 Sei A = (Q, Σ, δ, q 0, F ) ein DFA. Der Zeitaufwand des obigen Minimalisierungsalgorithmus ist O( Q 2 Σ ).

Satz 90 Sei A = (Q, Σ, δ, q 0, F ) ein DFA. Der Zeitaufwand des obigen Minimalisierungsalgorithmus ist O( Q 2 Σ ). Satz 90 Sei A = (Q, Σ, δ, q 0, F ) ein DFA. Der Zeitaufwand des obigen Minimalisierungsalgorithmus ist O( Q 2 Σ ). Beweis: Für jedes a Σ muss jede Position in der Tabelle nur konstant oft besucht werden.

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

Informatik II Dynamische Programmierung

Informatik II Dynamische Programmierung /9/ lausthal Informatik II Dynamische Programmierung. Zachmann lausthal University, ermany zach@in.tu-clausthal.de Zweite Technik für den Algorithmenentwurf Zur Herkunft des Begriffes: " Programmierung"

Mehr

Schulmethode zur Multiplikation von n-stelligen Binärzahlen a und b: (evtl. fallen Zeilen weg, wenn das zugehörige Bit des Multiplikators 0 ist).

Schulmethode zur Multiplikation von n-stelligen Binärzahlen a und b: (evtl. fallen Zeilen weg, wenn das zugehörige Bit des Multiplikators 0 ist). 4-1 4. Algorithmen auf Zahlen Themen: Multiplikation von binären Zahlen Matrixmultiplikation 4.1 Multiplikation ganzer Zahlen Schulmethode zur Multiplikation von n-stelligen Binärzahlen a und b: n=8: aaaaaaaa

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

11 Dynamisches Programmieren

11 Dynamisches Programmieren Algorithmen und Datenstrukturen 279 11 Dynamisches Programmieren Gegenstand dieses und des nächsten Kapitels sind noch einmal Algorithmen. Zunächst beschreiben wir das sog. dynamische Programmieren. kein

Mehr

Schriftlicher Test zu C (90 Minuten) VU Einführung ins Programmieren für TM. 1. Oktober 2012

Schriftlicher Test zu C (90 Minuten) VU Einführung ins Programmieren für TM. 1. Oktober 2012 Familienname: Vorname: Matrikelnummer: Aufgabe 1 (2 Punkte): Aufgabe 2 (3 Punkte): Aufgabe 3 (2 Punkte): Aufgabe 4 (3 Punkte): Aufgabe 5 (2 Punkte): Aufgabe 6 (1 Punkte): Aufgabe 7 (2 Punkte): Aufgabe

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

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

Projekt Systementwicklung

Projekt Systementwicklung Projekt Systementwicklung Effiziente Codierung: Laufzeitoptimierung Prof. Dr. Nikolaus Wulff Effiziente Codierung Der Wunsch effizienten Code zu schreiben entstammt mehreren Quellen: Zielplattformen mit

Mehr

G. Zachmann Clausthal University, Germany Die wichtigsten Entwurfsverfahren für Algorithmen:

G. Zachmann Clausthal University, Germany Die wichtigsten Entwurfsverfahren für Algorithmen: lausthal Informatik II Divide & onquer. Zachmann lausthal University, ermany zach@in.tu-clausthal.de Algorithmen-Design-Techniken Die wichtigsten Entwurfsverfahren für Algorithmen: 1. Divide and onquer

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

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

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

Arithmetik und Algebra

Arithmetik und Algebra Willkommen Gliederung "Hallo Welt!" für Fortgeschrittene Friedrich-Alexander-Universität Erlangen-Nürnberg Institut für Informatik Lehrstuhl 2 7. Juni 2005 Willkommen Gliederung Gliederung 1 Repräsentation

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 & Komplexität

Algorithmen & Komplexität Algorithmen & Komplexität Angelika Steger Institut für Theoretische Informatik steger@inf.ethz.ch Kürzeste Pfade Problem Gegeben Netzwerk: Graph G = (V, E), Gewichtsfunktion w: E N Zwei Knoten: s, t Kantenzug/Weg

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

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

Institut fu r Informatik

Institut fu r Informatik Technische Universita t Mu nchen Institut fu r Informatik Lehrstuhl fu r Bioinformatik Einfu hrung in die Programmierung fu r Bioinformatiker Prof. B. Rost, L. Richter WS 2013/14 Aufgabenblatt 5 2. Dezember

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

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

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

Wenn wir zudem a ii = 1 für 1 i n setzen, dann gilt für A k (boolesches Produkt, A 0 = I) 0 falls es im Graphen keinen Pfad von v i nach v j,

Wenn wir zudem a ii = 1 für 1 i n setzen, dann gilt für A k (boolesches Produkt, A 0 = I) 0 falls es im Graphen keinen Pfad von v i nach v j, 6.2 Boolesche Matrixmultiplikation und Transitive Hülle Wir ersetzen nun im vorhergehenden Abschnitt die Distanzmatrix durch die (boolesche) Adjazenzmatrix und (min, +) durch (, ), d.h.: n C = A B; c ij

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 Geometrisches Problem: Problem: Nächstes Paar Eingabe: n Punkte in der Ebene Ausgabe: Das Paar q,r mit geringstem Abstand

Mehr

Klausur Informatik 1 SS 08. Aufgabe 1 2 3 4 Max. Punkte 30 40 40 10 Punkte. Gesamtpunkte:

Klausur Informatik 1 SS 08. Aufgabe 1 2 3 4 Max. Punkte 30 40 40 10 Punkte. Gesamtpunkte: Klausur Informatik 1 SS 08 Aufgabe 1 2 3 4 Max. Punkte 30 40 40 10 Punkte Gesamtpunkte: Note: Bearbeitungszeit 120 Minuten Keine Hilfsmittel Tragen Sie als erstes Ihren vollständigen Namen und Ihre Matrikelnummer

Mehr

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

C++ Teil 5. Sven Groß. 16. Nov Sven Groß (IGPM, RWTH Aachen) C++ Teil Nov / 16 C++ Teil 5 Sven Groß 16. Nov 2015 Sven Groß (IGPM, RWTH Aachen) C++ Teil 5 16. Nov 2015 1 / 16 Themen der letzten Vorlesung Namensräume Live Programming zu A2 Gleitkommazahlen Rundungsfehler Auswirkung

Mehr

Divide & Conquer. Problem in Teilprobleme aufteilen Teilprobleme rekursiv lösen Lösung aus Teillösungen zusammensetzen

Divide & Conquer. Problem in Teilprobleme aufteilen Teilprobleme rekursiv lösen Lösung aus Teillösungen zusammensetzen Teile & Herrsche: Divide & Conquer Problem in Teilprobleme aufteilen Teilprobleme rekursiv lösen Lösung aus Teillösungen zusammensetzen Probleme: Wie setzt man zusammen? [erfordert algorithmisches Geschick

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

Geometrie 2. Julian Fischer Julian Fischer Geometrie / 30

Geometrie 2. Julian Fischer Julian Fischer Geometrie / 30 Geometrie 2 Julian Fischer 6.7.2009 Julian Fischer Geometrie 2 6.7.2009 1 / 30 Themen 1 Bereichssuche und kd-bäume 1 Bereichssuche 2 kd-bäume 2 Divide and Conquer 1 Closest pair 2 Beispiel: Points (IOI

Mehr

Knuth Morris Pratt Algorithmus

Knuth Morris Pratt Algorithmus Knuth Morris Pratt Algorithmus PS: Stringmatching Algorithmen in C Dozent: Max Hadersbeck Referentinnen: Joanna Rymarska, Alfina Druzhkova Datum: 5.07.2006 Folien: www.cip.ifi.lmu.de/~droujkov Agenda Historisches

Mehr

Informatik II, SS 2018

Informatik II, SS 2018 Informatik II - SS 2018 (Algorithmen & Datenstrukturen) Vorlesung 18 (25.6.2018) Dynamische Programmierung II Algorithmen und Komplexität Fibonacci Zahlen Definition der Fibonacci Zahlen F 0, F 1, F 2,

Mehr

Technische Universität München SoSe 2015 Institut für Informatik I Mai 2015 Dr. Tobias Lasser. Aufgabe 1 Rechnen mit Landau-Symbolen

Technische Universität München SoSe 2015 Institut für Informatik I Mai 2015 Dr. Tobias Lasser. Aufgabe 1 Rechnen mit Landau-Symbolen Technische Universität München SoSe 2015 Institut für Informatik I-16 27. Mai 2015 Dr. Tobias Lasser Lösungsvorschläge zur Musterklausur zu Algorithmen und Datenstrukturen Aufgabe 1 Rechnen mit Landau-Symbolen

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

3.3 Optimale binäre Suchbäume

3.3 Optimale binäre Suchbäume 3.3 Optimale binäre Suchbäume Problem 3.3.1. Sei S eine Menge von Schlüsseln aus einem endlichen, linear geordneten Universum U, S = {a 1,,...,a n } U und S = n N. Wir wollen S in einem binären Suchbaum

Mehr

Informatik II, SS 2018

Informatik II, SS 2018 Informatik II - SS 2018 (Algorithmen & Datenstrukturen) Vorlesung 19 (27.6.2018) Dynamische Programmierung III Algorithmen und Komplexität Dynamische Programmierung DP Rekursion + Memoization Memoize:

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

Datenstrukturen und Algorithmen

Datenstrukturen und Algorithmen Datenstrukturen und Algorithmen VO 708.031 27.10.2011 stefan.klampfl@tugraz.at 1 Wiederholung Wir vergleichen Algorithmen anhand des ordnungsmäßigen Wachstums von T(n), S(n), Asymptotische Schranken: O-Notation:

Mehr

Algorithmen und Datenstrukturen (für ET/IT)

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

Mehr

Dynamische Programmierung Matrixkettenprodukt

Dynamische Programmierung Matrixkettenprodukt Dyamische Programmierug Matrixketteprodukt Das Optimalitätsprizip Typische Awedug für dyamisches Programmiere: Optimierugsprobleme Eie optimale Lösug für das Ausgagsproblem setzt sich aus optimale Lösuge

Mehr

Informatik II. Woche 15, Giuseppe Accaputo

Informatik II. Woche 15, Giuseppe Accaputo Informatik II Woche 15, 13.04.2017 Giuseppe Accaputo g@accaputo.ch 1 Themenübersicht Repetition: Pass by Value & Referenzen allgemein Repetition: Asymptotische Komplexität Live-Programmierung Aufgabe 7.1

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

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

Algebraische und arithmetische Algorithmen

Algebraische und arithmetische Algorithmen Kapitel 1 Algebraische und arithmetische Algorithmen 1.1 Das algebraische Berechnungsmodell Struktur: Körper (oder Ring) mit den Operationen +,,, (/) Eingabe: endliche Folge von Zahlen Ausgabe: endliche

Mehr

16. All Pairs Shortest Path (ASPS)

16. All Pairs Shortest Path (ASPS) . All Pairs Shortest Path (ASPS) All Pairs Shortest Path (APSP): Eingabe: Gewichteter Graph G=(V,E) Ausgabe: Für jedes Paar von Knoten u,v V die Distanz von u nach v sowie einen kürzesten Weg a b c d e

Mehr

II.3.1 Rekursive Algorithmen - 1 -

II.3.1 Rekursive Algorithmen - 1 - 1. Grundelemente der Programmierung 2. Objekte, Klassen und Methoden 3. Rekursion und dynamische Datenstrukturen 4. Erweiterung von Klassen und fortgeschrittene Konzepte II.3.1 Rekursive Algorithmen -

Mehr

Algebraische und arithmetische Algorithmen

Algebraische und arithmetische Algorithmen Kapitel 1 Algebraische und arithmetische Algorithmen 1.1 Das algebraische Berechnungsmodell Struktur: Körper (oder Ring) mit den Operationen +,,, (/) Eingabe: endliche Folge von Zahlen Ausgabe: endliche

Mehr

Rekursive Funktionen und ihre programmtechnische Umsetzung

Rekursive Funktionen und ihre programmtechnische Umsetzung Rekursive Funktionen und ihre programmtechnische Umsetzung Klaus Kusche, Juli 2012 Inhalt Die Idee und ihre Programmierung Die Abarbeitung zur Laufzeit Die Speicherung der Daten Praktisches & Theoretisches

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

Beispiel: Quicksort. Theoretische Informatik III (Winter 2018/19) Prof. Dr. Ulrich Hertrampf. quicksort(a 1,...,a n ): IF n 2 THEN

Beispiel: Quicksort. Theoretische Informatik III (Winter 2018/19) Prof. Dr. Ulrich Hertrampf. quicksort(a 1,...,a n ): IF n 2 THEN Als zweites Beispiel betrachten wir ein weiteres Sortierverfahren, das unter dem Namen quicksort bekannt ist. Eingabe ist wieder ein Array a 1,...,a n AUFGABE: Sortiere a 1,...,a n nach vorgegebenem Schlüssel!

Mehr

UE Algorithmen und Datenstrukturen 1 UE Praktische Informatik 1. Übung 5. Asymptotische Laufzeitkomplexität Definition Regeln Beispiele

UE Algorithmen und Datenstrukturen 1 UE Praktische Informatik 1. Übung 5. Asymptotische Laufzeitkomplexität Definition Regeln Beispiele UE Algorithmen und Datenstrukturen 1 UE Praktische Informatik 1 Übung 5 Asymptotische Laufzeitkomplexität Definition Regeln Beispiele Institut für Pervasive Computing Johannes Kepler Universität Linz Altenberger

Mehr

Komplexität von Algorithmen

Komplexität von Algorithmen Komplexität von Algorithmen Prof. Dr. Christian Böhm WS 07/08 in Zusammenarbeit mit Gefei Zhang http://www.dbs.informatik.uni-muenchen.de/lehre/nfinfosw Ressourcenbedarf - Größenordnungen Prozesse verbrauchen

Mehr

Universität München, Hans-Peter Kriegel und Thomas Seidl Informatik II a[0] a[1] a[2] a[3] a[n 1]

Universität München, Hans-Peter Kriegel und Thomas Seidl Informatik II a[0] a[1] a[2] a[3] a[n 1] Universität München, Hans-Peter Kriegel und Thomas Seidl Informatik II -108 Kapitel 5: Arrays Einführung Ein Array ist eine Reihung gleichartiger Objekte. a: a[0] a[1] a[2] a[3] a[n 1] Bezeichner a steht

Mehr

Fallstudie: Online-Statistik

Fallstudie: Online-Statistik Fallstudie: Online-Statistik Ziel: Klasse / Objekt, welches Daten konsumiert und zu jeder Zeit Statistiken, z.b. Mittelwert, Varianz, Median (etc.) ausgeben kann Statistics s = new Statistics(maxSize);...

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

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

Programmieren in C. Rekursive Strukturen. Prof. Dr. Nikolaus Wulff

Programmieren in C. Rekursive Strukturen. Prof. Dr. Nikolaus Wulff Programmieren in C Rekursive Strukturen Prof. Dr. Nikolaus Wulff Rekursive Strukturen Häufig müssen effizient Mengen von Daten oder Objekten im Speicher verwaltet werden. Meist werden für diese Mengen

Mehr