Dynamische Programmierung
|
|
- Benedikt Brinkerhoff
- vor 7 Jahren
- Abrufe
Transkript
1 Dynamische Programmierung Hannes Schwarz - WS-06/07 Hannes.Schwarz@uni-konstanz.de Getting Ready for the ACM Programming Contest
2 Übersicht Übersicht Was ist dynamische Programmierung? Entwicklung eines Algorithmus Beispiel: Fibonacci-Folge Implementierung Memoization & Teilprobleme
3 Übersicht Rucksackproblem Implementierung Top-down vs. Bottom-up Binomialkoeffizienten Fazit Quellen
4 Was ist dynamische Programmierung? Definition: Algorithmen der dynamischen Programmierung kommen bei Optimierungsproblemen zur Anwendung, bei denen das Endergebnis aus einer unbekannten Kombination von vielen, nicht notwendigerweise unabhängigen Teilergebnissen berechnet werden kann. Quelle: http: //dynamische_programmierung.know-library.net
5 Was ist dynamische Programmierung? Einsatzgebiet: Optimierungsprobleme Endergebnis ist Kombination aus Teilergebnissen Teilergebnisse nicht zwingend unabhängig Kombination unbekannt
6 Woher kommt dynamische Programmierung? Teile & Herrsche ist Grundlage Geschickt implementierte Rekursion Zwischenergebnisse in Tabelle speichern Typischer Einsatz: Suche nach minimaler oder maximaler Kombination
7 Woher kommt dynamische Programmierung? Begriff in den 1940er Jahren von Richard Bellman geprägt Mathematisches Verfahren Programmierung bezieht sich auf das Ausfüllen der Tabelle
8 Entwicklung eines Algorithmus mit dynamischer Programmierung Voraussetzung: Die optimale Lösung setzt sich aus optimalen Teillösungen zusammen. 1. Charakterisierung der Struktur 2. Rekursive Definition des Wertes einer optimalen Lösung 3. Berechnung des Wertes einer optimalen Lösung (rekursiv) 4. Konstruktion der optimalen Lösung aus berechneter Information
9 Fibonacci-Folge Definition: f(1) = f(2) = 1 f(n) = f(n 2) + f(n 1) n > 2 Rekursiv definiert rekursive Implementierung?
10 Fibonacci-Folge - rekursive Implementierung static int knownf[] = new int[1000]; int fib(int n) { if( knownf[n]!= 0) { return knownf[n];} if( n == 1 n == 2) { return 1; } int newfib = fib(n-2) + fib(n-1); return newfib; }
11 Fibonacci-Folge - rekursive Implementierung Rekursionsbaum für f(7) exponentieller Aufwand O(2 n )
12 Fibonacci-Folge - rekursive Implementierung mit Köpfchen static int knownf[] = new int[1000]; int fib(int n) { if( knownf[n]!= 0) { return knownf[n];} if( n == 1 n == 2) { return 1; } int newfib = fib(n-2) + fib(n-1); return newfib; }
13 Fibonacci-Folge - rekursive Implementierung mit Köpfchen static int knownf[] = new int[1000]; int fib(int n) { if( knownf[n]!= 0) { return knownf[n];} if( n < 2) { return 1; } int newfib = fib(n-2) + fib(n-1); return newfib; }
14 Fibonacci-Folge - rekursive Implementierung mit Köpfchen static int knownf[] = new int[1000]; int fib(int n) { if( knownf[n]!= 0) { return knownf[n];} if( n < 2) { return 1; } int newfib = fib(n-2) + fib(n-1); return knownf[n] = newfib; }
15 Fibonacci-Folge - rekursive Implementierung mit Köpfchen Weiterhin Rekursion Rekursionsbaum für f(7) Ergebnisse werden gespeichert Zuerst lookup in Tabelle linearer Aufwand O(n)
16 Fibonacci-Folge Laufzeiten für fib(50) = Algorithmus Zeit rekursiv 13 min. 12.sek. iterativ sek. rek. + Köpfchen sek.
17 Optimale Teilprobleme Zerlegung wie bei Teile&Herrsche ABER: Teilprobleme müssen nicht unabhängig sein Zerlegung liefert Rekursionsgleichung für das Problem Teilprobleme sind optimal Basisfälle aufstellen (n=1)
18 Überlappende Teilprobleme Rekursion löst immer gleiche Teilprobleme überlappende Teilprobleme Teile&Herrsche : unterschiedliche Teilprobleme Einsatz von Memoization Dynamische Programmierung ist nichts weiter als das Lösen von Teilproblemen, wobei die Mehrfachberechnung von Teilproblemen aufgrund von Überschneidungen durch Memoization erschlagen wird.
19 Memoization Idee: ineffiziente Rekursion wird durch Füllen der Tabelle effizient Tabelle ein- oder mehrdimensionales Array Programm sieht wie folgt aus: Wert schon berechnet? zurückliefern Wert noch nicht berechnet? berechnen, speichern, zurückliefern
20 Rucksackproblem? 17 kg
21 Rucksackproblem Rucksack der Größe c N Typen von Gegenständen Jeder Typ n hat einen Wert vn sowie einen Platzbedarf von sn Jetzt packen wird den Rucksack: Die Kapazität c nicht überschritten wird Der Gesamtwert maximal ist
22 Rucksackproblem - Entwurf der optimalen Lösung Liste von k Gegenstandstypen n: L c = (n 1, n 2,..., n k ) Maximaler Wert des Rucksack ist die Summe aller Werte seiner Gegenstände w c = k i=1 v i
23 Rucksackproblem - Aufstellen der Rekursionsgleichung Lc ist für die Kapazität c eine optimale Lösung Wenn wir ein Element aus Lc entfernen ist die Restliste eine optimale Lösung für die Kapazität c - snk Bei jedem Schritt ist eine Auswahl zu treffen: füge weiteres Element hinzu, so dass Die Kapazität nach wie vor unter der Gesamtkapazität liegt Der erhöhte Gesamtwert maximal ist
24 Rucksackproblem - rekursive Lösung Geg.: static class Item{int size; int val;} Item items[]; static int knap(int cap) { int i, space, max, t; for(i=0, max=0; i<items.length;i++) if((space = cap-items[i].size) >=0) if((t=knap(space) + items[i].val)>max) max=t; return max; }
25 Rucksackproblem - rekursive Lösung Geg.: static class Item{int size; int val;} Item items[]; FINGER WEG!!!! static int knap(int cap) { int i, space, max, t; for(i=0, max=0; i<items.length;i++) if((space = cap-items[i].size) >=0) if((t=knap(space) + items[i].val)>max) max=t; return max; }
26 Rucksackproblem - rekursive Lösung mit Memoization static int knap(int cap) { int i, space, max, t; if(maxknown[cap]!= unknown) return maxknown[cap]; for(i=0, max=0; i<items.length;i++) if((space = cap-items[i].size) >=0) if((t=knap(space) + items[i].cal)>max) max=t; return max; }
27 Rucksackproblem - rekursive Lösung mit Memoization static int knap(int cap) { int i, space, max, t; if(maxknown[cap]!= unknown) return manknown[cap]; for(i=0, max=0; i<items.length;i++) if((space = cap-items[i].size) >=0) if((t=knap(space) + items[i].val)>max) max=t; maxknown[cap] = max; return max; }
28 Rucksackproblem - rekursive Lösung mit Memoization Laufzeit ohne Memoziation c Zeit sec sec 135 4min 28sec min 48sec Laufzeit mit Memoziation c Zeit ms ms ms ms von exponentieller zu linearer Laufzeit
29 Rucksackproblem - Rekonstruktion des Lösungswegs Bisheriges Ergebnis: Wert unseres maximal gepackten Rucksacks Welche Gegenstände sind eigentlich im Rucksack?
30 Rucksackproblem - Rekonstruktion des Lösungswegs In jedem Schritt Gegenstand merken - weiterer Array Für jeden Kapazitätswert einen eindeutigen Gegenstand Dieser Gegenstand ist für die Größe optimal und daher fest
31 Rucksackproblem - Rekonstruktion des Lösungswegs Rekonstruktion beginnt bei der Gesamtkapazität c Der Index des ersten Gegenstands befindet sich in itemknown[c] Wurde der Gegenstand aufgenommen c = c -itemknown[c].size Nächster Index also itemknown[c -itemknown[c].size] usw.
32 Rucksackproblem - die endgültige Lösung static int knap(int cap) { int i, space, max, maxi, t; if(maxknown[cap]!= unknown) return manknown[cap]; for(i=0, max=0; i<n;i++) if((space = cap-items[i].size) >=0) if((t=knap(space) + items[i].val)>max) max=t; maxi = i; maxknown[cap] = max; itemknown[cap] = items[maxi]; return max; }
33 Top-down Rekursive Berechnung ist ein Top-down -Ansatz Bisher Effizienzgewinn durch Memoization Probleme durch: Hohe Rekursionstiefen (Stack Overflow) Overhead durch Funktionsaufrufe
34 Bottom-up Zuerst Tabelle mit Teillösungen füllen Lösung schliesslich aus Tabelle auslesen Performanter als Top-down -Ansatz Bottom-up -Ansatz schwerer zu finden
35 Bottom-up vs. Top-down Bottom-up -Ansatz Zuerst wird eine Optimallösung von Teilproblemen bestimmt Danach Auswahl der optimalen Teillösungen zu Konstruktion einer Lösung des ursprünglichen Problems Top-down -Ansatz Zuerst Auswahl einer vielversprechenden Alternative Danach Lösung der resultierenden Teilprobleme
36 Binomialkoeffizienten Problem: Anzahl Möglichkeiten k (numerierte) Studenten aus einem Seminarraum mit n Personen zu wählen und zum World Final zu schicken Lösung: ( ) n k = n! (n k)!k!
37 Binomialkoeffizienten Rekursionsgleichung ( ) n k = ( ) n 1 k 1 + ( ) n 1 k Das Pascalsche Dreieck n = 0 1 n = n = n = n = n = n =
38 Binomialkoeffizienten - Die Bottom-up -Lösung Zur Lösung Pascalsche Dreieck Array[n][n+1] Die Ränder [0] [0] bis [0] [n] und [0] [0] bis [n] [n] werden mit Einsen gefüllt Zur Berechnung wird auf vorherige Ergebnisse zurückgegriffen An Position [n] [m] steht der gesuchte Wert
39 Binomialkoeffizienten - Die Bottom-up -Lösung static void bin() { int dreieck [][] = new int [7][]; for ( int i = 0; i < dreieck.length; i++ ) { dreieck[i] = new int[i+1]; for ( int j = 0; j <= i; j++ ) { if ( (j == 0) (j == i) ) dreieck[i][j] = 1; else dreieck[i][j]=dreieck[i-1][j-1]+dreieck[i-1][j]; System.out.print( dreieck [i][j] + " " ); } System.out.println(); } }
40 Binomialkoeffizienten - Die Bottom-up -Lösung Kein Overhead durch Funtionsaufrufe Aber: zuviele Werte berechnet Für den Wert xi,j sind xi-1,j-1 und xi-1,j Werte relevant Zur Berechnung von benötigt ( ) n m werden also keine xi,j mit j > m Ausfüllen der Tabelle in jeder Zeile zum m-ten Wert ausreichend
41 Fibonacci-Folge - rekursive Implementierung mit Memoization static int knownf[] = new int[1000]; int fib(int n) { if( knownf[n]!= 0) { return knownf[n];} if( n < 2) { return 1; } int newfib = fib(n-2) + fib(n-1); return knownf[n] = newfib; }
42 Fibonacci-Folge - iterative Implementierung (Bottom-up) static int iterativ(int n) { int[] ita = new int[n+1]; ita[1] = 1; ita[2] = 1; for(int i = 3; i < ita.length; i++ ) { ita[i] = ita[i-2] + ita [i-1]; } return ita[n]; }
43 Fazit Suche nach Optimum Optimales Ergebnis lässt sich in optimale Teilergebnisse aufteilen Jeder Schritt zum Ziel benötigt eine Auswahl Überlappungen können auftreten
44 Fazit Nicht immer möglich die Lösung kleinerer Probleme so zu kombinieren, dass das große Problem gelöst ist Teilprobleme können unvertretbar groß sein Nicht genau angegeben welche Probleme DP effizient löst
45 Weitere Einsatzgebiete von dynamischer Programmierung Bioinformatik Sequenzierung von Genen und Proteinen Ähnliche Problemstellungen wie bei Stringvergleichen Linguistik CYK -Algorithmus
46 Literaturempfehlungen R. Sedgewick; Algorithmen in Java; Pearson, 2003 S. Skiena; The Algorithm Design Manual; Springer, 1998 V. Heun; Grundlegende Alhorithmen; Vieweg, 2003
47 Internetquellen dynamische_programmierung.pdf?language=en dyn_programming.beamer.pdf?language=de
48 Vielen Dank für die Aufmerksamkeit!
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
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
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
MehrEinfü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
MehrAlgorithmen und Datenstrukturen 2
Algorithmen und Datenstrukturen Lerneinheit : Dynamisches Programmieren Prof. Dr. Christoph Karg Studiengang Informatik Hochschule Aalen Sommersemester.. Einleitung Diese Lerneinheit widmet sich einer
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 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
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
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
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
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
MehrKlausur zur Lehrveranstaltung. Technische Informatik für Ingenieure WS 2008/09
Klausur zur Lehrveranstaltung Technische Informatik für Ingenieure WS 2008/09 23. Februar 2009 Aufgabe 1 2 3 4 5 5 5 Summe mögliche Punkte 10 15 25 20 20 15 15 120 erreichte Punkte Note: Hinweise: Diese
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
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
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
Mehr9. 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
MehrHallo 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
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
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.
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?
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.
MehrFormulierung 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
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
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)
MehrWiederholung. 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
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
MehrHeute. Stoff Abschlussprüfung VO. Testen. Einführung Rekursion IT I - VO 13 1
Heute Stoff Abschlussprüfung VO Testen Einführung Rekursion 23.01.2018 IT I - VO 13 1 Organisatorisches Diese Woche letzte UE (ohne Wissensüberprüfung) Nächste Woche Fragestunde in VO Abschlusstest am
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
MehrDynamische 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
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?
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
MehrEinstieg in die Informatik mit Java
1 / 20 Einstieg in die Informatik mit Java Rekursion Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 20 1 Überblick 2 Rekursion 3 Rekursive Sortieralgorithmen 4 Backtracking
MehrKonzepte der Informatik
Konzepte der Informatik Vorkurs Informatik zum WS 2/212 2.9. - 3.9.2 17.1. - 21.1.2 Dr. Werner Struckmann / Christoph Peltz Stark angelehnt an Kapitel 3 aus "Abenteuer Informatik" von Jens Gallenbacher
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
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
MehrAlgorithmen und Datenstrukturen (ESE) Entwurf, Analyse und Umsetzung von Algorithmen (IEMS) WS 2014 / Vorlesung 9, Donnerstag 18.
Algorithmen und Datenstrukturen (ESE) Entwurf, Analyse und Umsetzung von Algorithmen (IEMS) WS 2014 / 2015 Vorlesung 9, Donnerstag 18. Dezember 2014 (Teile und Herrsche, Mastertheorem) Junior-Prof. Dr.
Mehr6. 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
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:
MehrSchnittstellen, Stack und Queue
Schnittstellen, Stack und Queue Schnittstelle Stack Realisierungen des Stacks Anwendungen von Stacks Schnittstelle Queue Realisierungen der Queue Anwendungen von Queues Hinweise zum Üben Anmerkung: In
Mehr19. 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.
Mehr3.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
MehrRekursive 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
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
Mehr0 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
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
MehrVorkurs Informatik WiSe 16/17
Konzepte der Informatik Dr. Werner Struckmann / Stephan Mielke, Jakob Garbe, 07.10.2016 Technische Universität Braunschweig, IPS Inhaltsverzeichnis Rucksackproblem Dynamische Programmierung 07.10.2016
MehrLösungen von Übungsblatt 12
Lösungen von Übungsblatt 12 Algorithmen (WS 2018, Ulrike von Luxburg) Lösungen zu Aufgabe 1 Eine (kanonische) Möglichkeit, die Branch-Schritte auszuführen ergibt sich wie folgt: Das ursprüngliche Problem
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
Mehr1 Einführung. 2 Grundlagen von Algorithmen. 3 Grundlagen von Datenstrukturen. 4 Grundlagen der Korrektheit von Algorithmen
Programm heute Algorithmen und Datenstrukturen (für ET/IT) Sommersemester 0 Dr. Stefanie Demirci Computer Aided Medical Procedures Technische Universität München Einführung Grundlagen von Algorithmen Grundlagen
MehrErste Java-Programme (Scopes und Rekursion)
Lehrstuhl Bioinformatik Konstantin Pelz Erste Java-Programme (Scopes und Rekursion) Tutorium Bioinformatik (WS 18/19) Konstantin: Konstantin.pelz@campus.lmu.de Homepage: https://bioinformatik-muenchen.com/studium/propaedeutikumprogrammierung-in-der-bioinformatik/
MehrKomplexitä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
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
MehrStand der Vorlesung Komplexität von Algorithmen (Kapitel 3)
Stand der Vorlesung Komplexität von Algorithmen (Kapitel 3) Technische Universität München Motivation: IT gestützte Steuerung, Überwachung, Fertigung, Produktion,. : erfordert effiziente Berechnungsvorschriften
MehrKonzepte der Informatik
Platzhalter für Bild, Bild auf Titelfolie hinter das Logo einsetzen Konzepte der Informatik Vorkurs Informatik zum WS 213/214 1.9. - 27.9.213 Dr. Werner Struckmann / Hendrik Freytag 1. April 21 Referent
MehrVorlesung Informatik 2 Algorithmen und Datenstrukturen
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (03 Verschiedene Algorithmen für dasselbe Problem) Prof. Dr. Susanne Albers Das Maximum-Subarray Problem Das Maximum-Subarray Problem: Gegeben: Folge
MehrAlgorithmen und Datenstrukturen 2
Algorithmen und Datenstrukturen 2 Sommersemester 2007 11. Vorlesung Peter F. Stadler Universität Leipzig Institut für Informatik studla@bioinf.uni-leipzig.de Das Rucksack-Problem Ein Dieb, der einen Safe
MehrVorkurs Informatik WiSe 15/16
Konzepte der Informatik Dr. Werner Struckmann / Stephan Mielke, Jakob Garbe, 15.10.2015 Technische Universität Braunschweig, IPS Inhaltsverzeichnis Das Rucksackproblem 15.10.2015 Dr. Werner Struckmann
MehrAlgorithmen und Datenstrukturen 2
Algorithmen und Datenstrukturen 2 Sommersemester 2009 11. Vorlesung Uwe Quasthoff Universität Leipzig Institut für Informatik quasthoff@informatik.uni-leipzig.de Das Rucksack-Problem Ein Dieb, der einen
MehrVorlesung Programmieren
Vorlesung Programmieren 11 Rekursion Jun.-Prof. Dr.-Ing. Anne Koziolek Version 1.1 ARBEITSGRUPPE ARCHITECTURE-DRIVEN REQUIREMENTS ENGINEERING (ARE) INSTITUT FÜR PROGRAMMSTRUKTUREN UND DATENORGANISATION
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
Mehr21. 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
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 & Datenstrukturen Midterm Test 2
Algorithmen & Datenstrukturen Midterm Test 2 Martin Avanzini Thomas Bauereiß Herbert Jordan René Thiemann
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:
MehrHallo 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
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
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
Mehr( )= c+t(n-1) n>1. Stand der Vorlesung Komplexität von Algorithmen (Kapitel 3)
Stand der Vorlesung Komplexität von Algorithmen (Kapitel 3) Motivation: IT gestützte Steuerung, Überwachung, Fertigung, Produktion,. : erfordert effiziente Berechnungsvorschriften Ziel: Methoden kennen
MehrStud.-Nummer: Datenstrukturen & Algorithmen Seite 1
Stud.-Nummer: Datenstrukturen & Algorithmen Seite 1 Aufgabe 1. / 16 P Instruktionen: 1) In dieser Aufgabe sollen Sie nur die Ergebnisse angeben. Diese können Sie direkt bei den Aufgaben notieren. 2) Sofern
MehrÜbungspaket 22 Rekursive Funktionsaufrufe
Übungspaket 22 Rekursive Funktionsaufrufe Übungsziele: Skript: 1. Technische Voraussetzungen für rekursive Funktionsaufrufe 2. Umsetzung mathematisch definierter Rekursionen in entsprechende C-Programme
MehrTechnische Informatik I - HS 18
Institut für Technische Informatik und Kommunikationsnetze Prof. L. Thiele Technische Informatik I - HS 18 Musterlösung zu Übung 3 Datum : 25.-26. Oktober 2018 Aufgabe 1: Wurzelverfahren nach Heron Das
MehrRekursion. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung
Rekursion Annabelle Klarl Zentralübung zur Vorlesung Einführung in die Informatik: http://www.pst.ifi.lmu.de/lehre/wise-12-13/infoeinf WS12/13 Aufgabe 1: Potenzfunktion Schreiben Sie eine Methode, die
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,
Mehr6 Speicherorganisation
6 Speicherorganisation Der Speicher des Programms ist in verschiedene Speicherbereiche untergliedert Speicherbereiche, die den eigentlichen Programmcode und den Code der Laufzeitbibliothek enthalten; einen
MehrAlgorithmen und Datenstrukturen 2 VU 3.0 Nachtragstest SS Oktober 2016
Technische Universität Wien Institut für Computergraphik und Algorithmen Algorithms and Complexity Group 186.815 Algorithmen und Datenstrukturen 2 VU 3.0 Nachtragstest SS 2016 5. Oktober 2016 Machen Sie
MehrAlgorithmen I - Tutorium 28 Nr. 12
Algorithmen I - Tutorium 28 Nr. 12 20.07.2017: Spaß mit Dynamischer und Linearer Programmierung Marc Leinweber marc.leinweber@student.kit.edu INSTITUT FÜR THEORETISCHE INFORMATIK (ITI), PROF. DR. JÖRN
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.
MehrHeap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen
Heap vs. vs. statisch Der Speicher des Programms ist in verschiedene Speicherbereiche untergliedert Speicherbereiche, die den eigentlichen Programmcode und den Code der Laufzeitbibliothek enthalten; einen
MehrAlgorithmen und Datenstrukturen Weitere Entwurfsmuster
Algorithmen und Datenstrukturen Weitere Entwurfsmuster Matthias Teschner Graphische Datenverarbeitung Institut für Informatik Universität Freiburg SS 12 Lernziele der Vorlesung Algorithmen Sortieren, Suchen,
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
MehrHeap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen
Heap vs. vs. statisch Der Speicher des Programms ist in verschiedene Speicherbereiche untergliedert Speicherbereiche, die den eigentlichen Programmcode und den Code der Laufzeitbibliothek enthalten; einen
MehrEinfache Arrays. Dr. Philipp Wendler. Zentralübung zur Vorlesung Einführung in die Informatik: Programmierung und Softwareentwicklung
Dr. Philipp Wendler Zentralübung zur Vorlesung Einführung in die Informatik: Programmierung und Softwareentwicklung WS18/19 https://www.sosy-lab.org/teaching/2018-ws-infoeinf/ Arrays: Wiederholung Ein
MehrDatenstrukturen & Algorithmen Lösungen zu Blatt 8 FS 16
Eidgenössische Technische Hochschule Zürich Ecole polytechnique fédérale de Zurich Politecnico federale di Zurigo Federal Institute of Technology at Zurich Institut für Theoretische Informatik. April 0
MehrStack. Seniorenseminar Michael Pohlig
Stack Seniorenseminar 21.06.2013 Michael Pohlig (pohlig@kit.edu) Übersicht 1. Axiomatik eins Kellers und seine Software- Realisierung 2. Bedeutung der Rekursion in der Mathematik 3. Rekursive Programmierung.
MehrDatenstrukturen 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:
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
MehrÜ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
Mehr11. Rekursion, Komplexität von Algorithmen
11. Rekursion, Komplexität von Algorithmen Teil 2 Java-Beispiele: Power1.java Hanoi.java K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 Version: 23. Nov. 2015 Anwendung der Rekursion Rekursiv
Mehr2 Programmiermethodik 2.1 1
2 Programmiermethodik 2.1 1 Schlagwörter: strukturiertes Programmieren systematisches Programmieren Techniken und Tricks Programmierstil Benutzung von Bibliotheken etc. etc. 2.1 2 2.1 Schrittweise Verfeinerung
MehrII.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 -
Mehr55 Ring-Queue. size. push. clear. get. Reinhard Schiedermeier / Klaus Köhler, Das Java-Praktikum, dpunkt.verlag, ISBN
D3kjd3Di38lk323nnm 394 55 Ring-Queue In dieser Aufgabe wird eine generische Containerklasse definiert. Ihre Kapazität wird beim Erzeugen festgelegt, im Gegensatz zu den Klassen des Collection- Frameworks.
MehrC++ Teil 5. Sven Groß. 12. Nov IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Nov / 16
C++ Teil 5 Sven Groß IGPM, RWTH Aachen 12. Nov 2014 Sven Groß (IGPM, RWTH Aachen) C++ Teil 5 12. Nov 2014 1 / 16 Themen der letzten Vorlesung Eingabestrom, Verhalten von cin Namensräume Live Programming
MehrÜbersicht. Datenstrukturen und Algorithmen. Divide-and-Conquer. Übersicht. Vorlesung 9: Quicksort (K7)
Datenstrukturen und Algorithmen Vorlesung 9: (K7) Joost-Pieter Katoen Algorithmus Lehrstuhl für Informatik 2 Software Modeling and Verification Group http://moves.rwth-aachen.de/teaching/ss-5/dsal/ 2 7.
Mehr1. Teilklausur Gruppe A. Bitte in Druckschrift leserlich ausfüllen!
Objektorientierte Programmierung & Modellierung WS 2007/8 Universität Koblenz-Landau Institut für Informatik Prof. Dr. Ralf Lämmel Dr. Manfred Jackel 1. Teilklausur 07.12.2007 Gruppe A Bitte in Druckschrift
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
Mehr6 Speicherorganisation
Der Speicher des Programms ist in verschiedene Speicherbereiche untergliedert Speicherbereiche, die den eigentlichen Programmcode und den Code der Laufzeitbibliothek enthalten; einen Speicherbereich für
Mehr7. Verkettete Strukturen: Listen
7. Verkettete Strukturen: Listen Java-Beispiele: IntList.java List.java Stack1.java Version: 4. Jan. 2016 Vergleich: Schwerpunkte Arrays verkettete Listen Listenarten Implementation: - Pascal (C, C++):
MehrSchwerpunkte. Verkettete Listen. Verkettete Listen: 7. Verkettete Strukturen: Listen. Überblick und Grundprinzip. Vergleich: Arrays verkettete Listen
Schwerpunkte 7. Verkettete Strukturen: Listen Java-Beispiele: IntList.java List.java Stack1.java Vergleich: Arrays verkettete Listen Listenarten Implementation: - Pascal (C, C++): über Datenstrukturen
Mehr