Kapitel 5: Dynamisches Programmieren Gliederung

Ähnliche Dokumente
Kapitel 5: Dynamisches Programmieren Gliederung

Kapitel 2: Analyse der Laufzeit von Algorithmen Gliederung

Kapitel 6: Graphalgorithmen Gliederung

Kapitel 3: Untere Schranken für algorithmische Probleme Gliederung

Kapitel 7: Flüsse in Netzwerken und Anwendungen Gliederung der Vorlesung

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

Kapitel 4: Minimal spannende Bäume Gliederung der Vorlesung

Kapitel 4: Minimale spannende Bäume Gliederung der Vorlesung

Datenstrukturen & Algorithmen

Achtung: Groß O definiert keine totale Ordnungsrelation auf der Menge aller Funktionen! Beweis: Es gibt positive Funktionen f und g so, dass

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

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

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

11. Rekursion, Komplexität von Algorithmen

MB2-ALG, SS15 Seite 1 Hauptklausur, geschrieben am

Welche Informatik-Kenntnisse bringen Sie mit?

Sortieralgorithmen. Inhalt: InsertionSort BubbleSort QuickSort. Marco Block

II.3.1 Rekursive Algorithmen - 1 -

Kapitel 2: Formale Sprachen Gliederung. 0. Grundbegriffe 1. Endliche Automaten 2. Formale Sprachen 3. Berechnungstheorie 4. Komplexitätstheorie

Kapitel 1: Motivation / Grundlagen Gliederung

Übungsblatt 1. f(n) = f(n) = O(g(n)) g(n) = O(f(n)) Zeigen oder widerlegen Sie: 3 n = Θ(2 n ) Aufgabe 1.2 Gegeben sei die folgende Funktion:

Kapitel 9. Komplexität von Algorithmen und Sortieralgorithmen

Komplexität von Algorithmen

Datenstrukturen. Sommersemester Kapitel 1: Motivation / Grundlagen. Steffen Lange

Klausur Informatik B April Teil I: Informatik 3

Algorithmen und Datenstrukturen

Kapitel 9. Komplexität von Algorithmen und Sortieralgorithmen

Dynamisches Programmieren - Problemstruktur

Kapitel 6. Komplexität von Algorithmen. Xiaoyi Jiang Informatik I Grundlagen der Programmierung

12. Rekursion Grundlagen der Programmierung 1 (Java)

Algorithmen II Vorlesung am

Die Komplexitätsklassen P und NP

Binary Decision Diagrams (Einführung)

Algorithmen und Datenstrukturen

Algorithmik - Kompaktkurs

Kapitel 5: Minimale spannende Bäume Gliederung der Vorlesung

Algorithmen und Datenstrukturen

Einführung in die Programmierung

Effiziente Algorithmen und Datenstrukturen I. Kapitel 10: Lineare Algebra

1. Grundlagen Sortieren Vertauschen Selektion Einfügen Quicksort Suchen...

Sortieren durch Einfügen. Prof. Dr. W. Kowalk Sortieren durch Einfügen 1

Dynamische Programmierung. Problemlösungsstrategie der Informatik

Vorlesung Datenstrukturen

14. Rot-Schwarz-Bäume

Typdeklarationen. Es gibt in Haskell bereits primitive Typen:

4 Effizienz und Komplexität 3.1 1

Programmiertechnik II

Babeș-Bolyai Universität Cluj Napoca Fakultät für Mathematik und Informatik Grundlagen der Programmierung MLG5005. Rekursion

Dynamische Programmierung

Algorithmen und Datenstrukturen 1-1. Seminar -

Datenstrukturen und Algorithmen

Einführung in die Informatik für Hörer aller Fakultäten II. Andreas Podelski Stephan Diehl Uwe Waldmann

kontextfreie Grammatiken Theoretische Informatik kontextfreie Grammatiken kontextfreie Grammatiken Rainer Schrader 14. Juli 2009 Gliederung

Domain-independent. independent Duplicate Detection. Vortrag von Marko Pilop & Jens Kleine. SE Data Cleansing

Rekursion. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Grundlagen der Programmierung

1 2 3 Bewege Stapel von links nach rechts. In jedem Zug darf genau ein Ring bewegt werden. Es darf nie ein größerer auf einen kleineren Ring gelegt we

9 Türme von Hanoi Bewege Stapel von links nach rechts. In jedem Zug darf genau ein Ring bewegt werden. Es darf nie ein größerer auf einen kleine

von Zahlenfolgen, die bei Gebietsteilungsproblemen

Abschnitt: Algorithmendesign und Laufzeitanalyse

Grundlagen der Programmierung

= 7 (In Binärdarstellung: = 0111; Unterlauf) = -8 (In Binärdarstellung: = 1000; Überlauf)

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

5.4 Das Rucksackproblem

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

Prof. Dr. Margarita Esponda

Informatik II - Übung 11

Kapitel 2: Formale Sprachen Kontextfreie Sprachen. reguläre Grammatiken/Sprachen. kontextfreie Grammatiken/Sprachen

Rechnerische Komplexität

Algorithmen & Programmierung. Rekursive Funktionen (1)

Einstieg in die Informatik mit Java

Der linke Teilbaum von v enthält nur Schlüssel < key(v) und der rechte Teilbaum enthält nur Schlüssel > key(v)

Datenstrukturen und Algorithmen

Probeklausur: Programmierung WS04/05

Reihungen. Martin Wirsing. in Zusammenarbeit mit Matthias Hölzl und Nora Koch 11/03

Asymptotische Laufzeitanalyse: Beispiel

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

Überblick. 1 Vorbemerkungen. 2 Algorithmen. 3 Eigenschaften von Algorithmen. 4 Historischer Überblick. Einführung

Kapitel 3: Berechnungstheorie Gliederung

Algorithmen und Datenstrukturen 1 Kapitel 3

Technische Universität Wien Institut für Computergraphik und Algorithmen Arbeitsbereich für Algorithmen und Datenstrukturen

VBA-Programmierung: Zusammenfassung

Suche in Spielbäumen Spielbäume Minimax Algorithmus Alpha-Beta Suche. Suche in Spielbäumen. KI SS2011: Suche in Spielbäumen 1/20

Übersicht. Datenstrukturen und Algorithmen. Übersicht. Divide-and-Conquer. Vorlesung 9: Quicksort (K7)

Präzedenz von Operatoren

Programmieren, Algorithmen und Datenstrukturen II 8. Allgemeine Lösungsverfahren

11.1 Grundlagen - Denitionen

Kombinatorische Optimierung

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

Klausur Datenstrukturen und Algorithmen SoSe 2012

Customization (Zuschneiden)

Randomisierte Algorithmen 2. Erste Beispiele

Funktionale Programmierung. Funktionale Programmierung: Vorlesungsüberblick. Eigenschaften rein funktionaler Programmierung

Name:... Vorname:... Matrikel-Nr.:... Unterschrift:...

2. Programmierung in C

Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung)

Es ist für die Lösung der Programmieraufgabe nicht nötig, den mathematischen Hintergrund zu verstehen, es kann aber beim Verständnis helfen.

Algorithmus zum Graphen-Matching. und. Anwendung zur inhaltsbasierten Bildersuche

Datenstrukturen & Algorithmen

Algorithmische Intelligenz. Amortisierung. Stefan Edelkamp

Transkript:

Gliederung 1. Grundlagen 2. Zahlentheoretische Algorithmen 3. Sortierverfahren 4. Ausgewählte Datenstrukturen 5. Dynamisches Programmieren 6. Graphalgorithmen 7. String-Matching 8. Kombinatorische Algorithmen 9. Lineare Programmierung 5/3, Folie 1 2014 Prof. Steffen Lange - HDa/FbI - Effiziente Algorithmen

u Problemstellung Menge A von Artikeln Funktion g(.), die jedem Artikel in A seine Größe zuordnet (/* d.h. g(.) ist bspw. eine Funktion von A nach N */) Funktion w(.), die jedem Artikel in A seinen Wert zuordnet (/* d.h. w(.) ist bspw. eine Funktion von A nach N */) Gesamtgröße G... Beispiel: Klausur A - Menge der Aufgaben g(a) - Zeit zum Lösen von Aufgabe a w(a) - Anzahl der erreichbaren Punkte für Aufgabe a G - die zur Verfügung stehende Gesamtzeit... Ziel: Teilmenge A* von A finden, so daß die Artikel in A* zusammen eine Größe G und einen maximalen Gesamtwert haben 5/3, Folie 2 2014 Prof. Steffen Lange - HDa/FbI - Effiziente Algorithmen

u Rekursive Lösung es seien A = { a 1,...,a n }, g(.), w(.) und G gegeben der Aufruf erfolgt mit x = n und y = G int wert ( int x, int y ) { int result = 0; if ( x == 0 ) return(result); if ( g(a x ) > y ) result = wert(x-1,y); else { result = max(w(a x )+wert(x-1,y-g(a x )),wert(x-1,y)); return(result); } }... falls g(a x ) zu groß ist, so kann a x nicht benutzt werden... andernfalls, vergleiche den Wert der besten Teilmenge A mit a x A und einer Größe y - g(a x ) und den Wert der besten Teilmenge A mit a x A und einer Größe y 5/3, Folie 3 2014 Prof. Steffen Lange - HDa/FbI - Effiziente Algorithmen

u Anmerkungen zur rekursiven Lösung korrekt, da das Bellmannsche Optimalitätskriterium erfüllt ist (/* für eine beste Teilmenge A A mit a x A und der Größe G gilt, daß A = A \ { a x } eine beste Teilmenge von A \ { a x } der Größe G - g(a x ) ist */) offenbar finden im worst case exponentiell viele Funktionsaufrufe statt (/* exponentiell in A ; genau 2 A viele */)... aber es gibt insgesamt höchstens A *G viele verschiedene Funktionsaufrufe... Idee: die Ergebnisse der verschiedenen Funktionsaufrufe systematisch berechnen und in einer Tabelle speichern 5/3, Folie 4 2014 Prof. Steffen Lange - HDa/FbI - Effiziente Algorithmen

u Beispiel (/* Dynamische Programmierung */) A = { a 1,a 2,a 3,a 4,a 5 } w(a 1 ) = 4; w(a 2 ) = 3; w(a 3 ) = 3; w(a 4 ) = 3; w(a 5 ) = 8 G = 10... wir verwenden eine Tabelle t der Größe 6 11 (/* zusätzliche Zeile und Spalte für eine einfache Initialisierung */)... t[x][y] = wert(x,y), d.h. bester Wert für A { a 1,...,a x ) einer Größe y... t[x][y] = 0, falls x = 0 oder y = 0... t[x][y] = t[x-1][y], falls x 0, y 0 und y - g(a x ) < 0... t[x][y] = max { w(a x ) + t[x-1][y-g(a x )], t[x-1][y] }, sonst 5/3, Folie 5 2014 Prof. Steffen Lange - HDa/FbI - Effiziente Algorithmen

u Beispiel (/* Dynamische Programmierung */) w(a 1 ) = 3; w(a 2 ) = 4; w(a 3 ) = 3; w(a 4 ) = 3; w(a 5 ) = 8 0 1 2 3 4 5 6 7 8 9 10 0 0 0 0 0 0 0 0 0 0 0 { a 1 } 0 { a 1,a 2 } 0 { a 1,...,a 3 } 0 { a 1,...,a 4 } 0 { a 1,...,a 5 } 0 5/3, Folie 6 2014 Prof. Steffen Lange - HDa/FbI - Effiziente Algorithmen

u Beispiel (/* Dynamische Programmierung, Ausfüllen */) w(a 1 ) = 3; w(a 2 ) = 4; w(a 3 ) = 3; w(a 4 ) = 3; w(a 5 ) = 8 0 1 2 3 4 5 6 7 8 9 10 0 0 0 0 0 0 0 0 0 0 0 { a 1 } 0 0 3 3 3 3 3 3 3 3 3 { a 1,a 2 } 0 { a 1,...,a 3 } 0 { a 1,...,a 4 } 0 { a 1,...,a 5 } 0 max { w(a 1 ) + t[0][0], t[0][2] } 5/3, Folie 7 2014 Prof. Steffen Lange - HDa/FbI - Effiziente Algorithmen

u Beispiel (/* Dynamische Programmierung, Ausfüllen */) w(a 1 ) = 3; w(a 2 ) = 4; w(a 3 ) = 3; w(a 4 ) = 3; w(a 5 ) = 8 0 1 2 3 4 5 6 7 8 9 10 0 0 0 0 0 0 0 0 0 0 0 { a 1 } 0 0 3 3 3 3 3 3 3 3 3 { a 1,a 2 } 0 0 4 4 7 7 7 7 7 7 7 { a 1,...,a 3 } 0 { a 1,...,a 4 } 0 { a 1,...,a 5 } 0 max { w(a 2 ) + t[1][0], t[1][2] } max { w(a 2 ) + t[1][2], t[1][4] } 5/3, Folie 8 2014 Prof. Steffen Lange - HDa/FbI - Effiziente Algorithmen

u Beispiel (/* Dynamische Programmierung, Ausfüllen */) w(a 1 ) = 3; w(a 2 ) = 4; w(a 3 ) = 3; w(a 4 ) = 3; w(a 5 ) = 8 0 1 2 3 4 5 6 7 8 9 10 0 0 0 0 0 0 0 0 0 0 0 { a 1 } 0 0 3 3 3 3 3 3 3 3 3 { a 1,a 2 } 0 0 4 4 7 7 7 7 7 7 7 { a 1,...,a 3 } 0 0 4 4 7 7 7 10 10 10 10 { a 1,...,a 4 } 0 { a 1,...,a 5 } 0 max { w(a 3 ) + t[2][4], t[2][7] } 5/3, Folie 9 2014 Prof. Steffen Lange - HDa/FbI - Effiziente Algorithmen

u Beispiel (/* Dynamische Programmierung, Ausfüllen */) w(a 1 ) = 3; w(a 2 ) = 4; w(a 3 ) = 3; w(a 4 ) = 3; w(a 5 ) = 8 0 1 2 3 4 5 6 7 8 9 10 0 0 0 0 0 0 0 0 0 0 0 { a 1 } 0 0 3 3 3 3 3 3 3 3 3 { a 1,a 2 } 0 0 4 4 7 7 7 7 7 7 7 { a 1,...,a 3 } 0 0 4 4 7 7 7 10 10 10 10 { a 1,...,a 4 } 0 0 4 4 7 7 7 10 10 10 10 { a 1,...,a 5 } 0 5/3, Folie 10 2014 Prof. Steffen Lange - HDa/FbI - Effiziente Algorithmen

u Beispiel (/* Dynamische Programmierung, Ausfüllen */) w(a 1 ) = 3; w(a 2 ) = 4; w(a 3 ) = 3; w(a 4 ) = 3; w(a 5 ) = 8 0 1 2 3 4 5 6 7 8 9 10 0 0 0 0 0 0 0 0 0 0 0 { a 1 } 0 0 3 3 3 3 3 3 3 3 3 { a 1,a 2 } 0 0 4 4 7 7 7 7 7 7 7 { a 1,...,a 3 } 0 0 4 4 7 7 7 10 10 10 10 { a 1,...,a 4 } 0 0 4 4 7 7 7 10 10 10 10 { a 1,...,a 5 } 0 0 4 4 7 7 7 10 10 12 12 max { w(a 5 ) + t[4][4], t[4][9] } 5/3, Folie 11 2014 Prof. Steffen Lange - HDa/FbI - Effiziente Algorithmen

u Beispiel (/* Dynamische Programmierung, Lösung ablesen */) w(a 1 ) = 3; w(a 2 ) = 4; w(a 3 ) = 3; w(a 4 ) = 3; w(a 5 ) = 8 0 1 2 3 4 5 6 7 8 9 10 0 0 0 0 0 0 0 0 0 0 0 { a 1 } 0 0 3 3 3 3 3 3 3 3 3 { a 1,a 2 } 0 0 4 4 7 7 7 7 7 7 7 { a 1,...,a 3 } 0 0 4 4 7 7 7 10 10 10 10 { a 1,...,a 4 } 0 0 4 4 7 7 7 10 10 10 10 { a 1,...,a 5 } 0 0 4 4 7 7 7 10 10 12 12 max { w(a 2 ) + t[1][1], t[1][3] } a 2 A* max { w(a 5 ) + t[4][3], t[4][10] } a 5 A* 5/3, Folie 12 2014 Prof. Steffen Lange - HDa/FbI - Effiziente Algorithmen

u Komplexitätsanalyse es seien A, g(.), w(.) und G gegeben... Größe der Tabelle: O( A *G)... je Eintrag wird konstante Zeit benötigt... insgesamt wird die Zeit O( A *G) benötigt 5/3, Folie 13 2014 Prof. Steffen Lange - HDa/FbI - Effiziente Algorithmen

u Anmerkung (/* das ist NP-vollständig */) es seien A, g(.), w(.) und G gegeben falls bei der Beschreibung der Problemgröße n die Länge der Binärdarstellung bin(g) von G berücksichtigt wird (/* d.h. es kann etwa n O( bin(g) ) gelten */), so erhält man ein qualitativ anderes Ergebnis... Größe der Tabelle: O(n*2 n )... je Eintrag wird die Zeit O(n) benötigt... insgesamt wird die Zeit O(n 2 *2 n ) benötigt (/* also ist der vorgestellte Algorithmus einer mit exponentieller Laufzeit */) 5/3, Folie 14 2014 Prof. Steffen Lange - HDa/FbI - Effiziente Algorithmen

u... 5/3, Folie 15 2014 Prof. Steffen Lange - HDa/FbI - Effiziente Algorithmen