Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

Slides:



Advertisements
Ähnliche Präsentationen
Anzahl der ausgefüllten und eingesandten Fragebögen: 211
Advertisements

Christian Schindelhauer
Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Christian Schindelhauer
Vorlesung: 1 Betriebliche Informationssysteme 2003 Prof. Dr. G. Hellberg Studiengang Informatik FHDW Vorlesung: Betriebliche Informationssysteme Teil3.
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Telefonnummer.
1 JIM-Studie 2010 Jugend, Information, (Multi-)Media Landesanstalt für Kommunikation Baden-Württemberg (LFK) Landeszentrale für Medien und Kommunikation.
= = = = 47 = 47 = 48 = =
Statistiken und Tabellen
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (03 – Verschiedene Algorithmen für dasselbe Problem) Prof. Dr. Th. Ottmann.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (03 – Verschiedene Algorithmen für dasselbe Problem) Prof. Dr. Th. Ottmann.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (03 – Verschiedene Algorithmen für dasselbe Problem) Prof. Dr. Th. Ottmann.
Rechneraufbau & Rechnerstrukturen, Folie 2.1 © W. Oberschelp, G. Vossen W. Oberschelp G. Vossen Kapitel 2.
Algorithmen und Komplexität Teil 1: Grundlegende Algorithmen
Vorlesung: 1 Betriebliche Informationssysteme 2003 Prof. Dr. G. Hellberg Studiengang Informatik FHDW Vorlesung: Betriebliche Informationssysteme Teil2.
Differentielles Paar UIN rds gm UIN
Prof. Dr. Bernhard Wasmayr
Studienverlauf im Ausländerstudium
Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Prof. Dr. Bernhard Wasmayr VWL 2. Semester
AWA 2007 Natur und Umwelt Natürlich Leben
Rechneraufbau & Rechnerstrukturen, Folie 12.1 © W. Oberschelp, G. Vossen W. Oberschelp G. Vossen Kapitel 12.
Prof. Dr. Günter Gerhardinger Soziale Arbeit mit Einzelnen und Familien Übersicht über die Lehrveranstaltung Grundlegende Bestimmungsfaktoren der Praxis.
20:00.
Zusatzfolien zu B-Bäumen
Effiziente Algorithmen
WIRTSCHAFTSLAGE NOCH SCHWIERIG
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Eine Einführung in die CD-ROM
Effiziente Algorithmen
GBI Genios Wiso wiso bietet Ihnen das umfassendste Angebot deutsch- und englischsprachiger Literatur für die Wirtschafts- und Sozialwissenschaften. Wir.
Dokumentation der Umfrage
Syntaxanalyse Bottom-Up und LR(0)
Effiziente Algorithmen
Effiziente Algorithmen
Black Box Algorithmen Hartmut Klauck Universität Frankfurt SS
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
Effiziente Algorithmen
Information und Kommunikation Hartmut Klauck Universität Frankfurt SS
Hartmut Klauck Universität Frankfurt WS 06/
Polynome und schnelle Fourier-Transformation
Addieren und Subtrahieren von Dezimalzahlen
Der Ablauf eines Clear Rex Klärzyklus
PROCAM Score Alter (Jahre)
Ertragsteuern, 5. Auflage Christiana Djanani, Gernot Brähler, Christian Lösel, Andreas Krenzin © UVK Verlagsgesellschaft mbH, Konstanz und München 2012.
Geometrische Aufgaben
Symmetrische Blockchiffren DES – der Data Encryption Standard
Retuschen.ppt Die folgende Schau zeigt die Möglichkeiten, mit PhotoDraw Digitalbilder zu retuschieren. Vergleichen Sie jeweils zwei Bildpaare durch fleissiges.
Szenisches Lernen Wie Theaterelemente den Unterricht bereichern
Zahlentheorie und Zahlenspiele Hartmut Menzer, Ingo Althöfer ISBN: © 2014 Oldenbourg Wissenschaftsverlag GmbH Abbildungsübersicht / List.
MINDREADER Ein magisch - interaktives Erlebnis mit ENZO PAOLO

Parkplatz-Orga Diese Version ist vom finale Version!
Kamin- und Kachelöfen in Oberösterreich
Folie Beispiel für eine Einzelauswertung der Gemeindedaten (fiktive Daten)
Unternehmensbewertung Thomas Hering ISBN: © 2014 Oldenbourg Wissenschaftsverlag GmbH Abbildungsübersicht / List of Figures Tabellenübersicht.
Forschungsprojekt Statistik 2013 „Jugend zählt“ – Folie 1 Statistik 2013 „Jugend zählt“: Daten zur Arbeit mit Kindern und Jugendlichen.
Folie Einzelauswertung der Gemeindedaten
Datum:17. Dezember 2014 Thema:IFRS Update zum Jahresende – die Neuerungen im Überblick Referent:Eberhard Grötzner, EMA ® Anlass:12. Arbeitskreis Internationale.
1 Medienpädagogischer Forschungsverbund Südwest KIM-Studie 2014 Landesanstalt für Kommunikation Baden-Württemberg (LFK) Landeszentrale für Medien und Kommunikation.
 Präsentation transkript:

Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

Proseminare WiSe 2010/11 Anmeldefrist Infos und Anmeldung Dienstag 01.06. Bis Donnerstag 10.06. Die Verteilung ist unabhängig von der Reihenfolge der Anmeldungen   Infos und Anmeldung http://www.cs.uni-dortmund.de/proseminar Dort steht alles weitere.

Organisatorisches Testergebnisse In der nächsten Woche Einsicht im Rahmen der Übungen Bestehensquote >70% Inhaltlich: Induktion bei der Laufzeit

Organisatorisches Übungen Änderung: Übungsabgabe bis Montag 12 Uhr möglich Dann allerdings keine Korrektur bis Dienstag Umfang der Übungen: DAP 2 gibt 12 Credits = 360 Arbeitsstunden pro Vorlesung = 24 pro Woche Damit ist ein Umfang von 8 Stunden pro zweiwöchentlichem Übungsblatt angemessen Im Vergleich zum Diplomstudiengang sind die Übungen leichter Diskussion: C in Übungen Webseiten

Dynamische Programmierung Das Rucksackproblem Rucksack mit begrenzter Kapazität Objekte mit unterschiedlichem Wert und unterschiedlicher Größe Wir wollen Objekte von möglichst großem Gesamtwert mitnehmen

Dynamische Programmierung Das Rucksackproblem Rucksack mit begrenzter Kapazität Objekte mit unterschiedlichem Wert und unterschiedlicher Größe Wir wollen Objekte von möglichst großem Gesamtwert mitnehmen Beispiel Rucksackgröße 6 Größe 5 2 1 3 7 4 Wert 11 8 14 9

Dynamische Programmierung Das Rucksackproblem Rucksack mit begrenzter Kapazität Objekte mit unterschiedlichem Wert und unterschiedlicher Größe Wir wollen Objekte von möglichst großem Gesamtwert mitnehmen Beispiel Rucksackgröße 6 Objekt 1 und 3 passen in den Rucksack und haben Gesamtwert 13 Größe 5 2 1 3 7 4 Wert 11 8 14 9

Dynamische Programmierung Das Rucksackproblem Rucksack mit begrenzter Kapazität Objekte mit unterschiedlichem Wert und unterschiedlicher Größe Wir wollen Objekte von möglichst großem Gesamtwert mitnehmen Beispiel Rucksackgröße 6 Objekt 1 und 3 passen in den Rucksack und haben Gesamtwert 13 Objekt 2,3 und 4 passen und haben Gesamtwert 15 Größe 5 2 1 3 7 4 Wert 11 8 14 9

Dynamische Programmierung Das Rucksackproblem Eingabe: Anzahl der Objekte n Für jedes Objekt i seine ganzzahlige Größe g[i] und seinen ganzzahligen Wert v[i] Rucksackgröße W Ausgabe: S{1,…,n}, so dass S g[i] ≤ W und S v[i] maximal ist iS iS

Dynamische Programmierung Lösungsansatz Bestimme zunächst der Wert einer optimalen Lösung Leite dann die Lösung selbst aus der Tabelle des dynamischen Programms her

Dynamische Programmierung Herleiten der Rekursion Sei O{1,..,i} eine optimale Lösung für das Rucksackproblem mit Objekten 1,..,i und Rucksackgröße j Sei Opt(k,j) der Wert einer optimalen Lösung für das Rucksackproblem mit Rucksackgröße j und den Objekten 1 bis k mit Größen g[i] und Werten v[i] Gesucht: Opt(n,W)

Dynamische Programmierung Herleiten der Rekursion Sei O{1,..,i} eine optimale Lösung für das Rucksackproblem mit Objekten 1,..,i und Rucksackgröße j Sei Opt(k,j) der Wert einer optimalen Lösung für das Rucksackproblem mit Rucksackgröße j und den Objekten 1 bis k mit Größen g[i] und Werten v[i] Gesucht: Opt(n,W) Unterscheide, ob Objekt n in O ist: Fall 1(Objekt i nicht in O): Opt(i,j) = Opt(i-1,j)

Dynamische Programmierung Herleiten der Rekursion Sei O{1,..,i} eine optimale Lösung für das Rucksackproblem mit Objekten 1,..,i und Rucksackgröße j Sei Opt(k,j) der Wert einer optimalen Lösung für das Rucksackproblem mit Rucksackgröße j und den Objekten 1 bis k mit Größen g[i] und Werten v[i] Gesucht: Opt(n,W) Unterscheide, ob Objekt n in O ist: Fall 1(Objekt i nicht in O): Opt(i,j) = Opt(i-1,j) Fall 2(Objekt i in O): Opt(i,j) = v[i] + Opt(i-1,j-g[i])

Dynamische Programmierung Wenn Objekt i nicht in den Rucksack, sind in der optimalen Lösung nur Objekte aus {1,..,i-1} Rekursion Wenn j<g[i] dann Opt(i,j) = Opt(i-1,j) Sonst, Opt(i,j) = max{Opt(i-1,j), v[i] + Opt(i-1,j-g[i])} Rekursionsabbruch Opt(0,j)= 0 für 0jW

Dynamische Programmierung Sonst ist entweder i in der optimalen Lösung oder die beste Lösung besteht aus Objekten aus {1,..,i-1} Rekursion Wenn j<g[i] dann Opt(i,j) = Opt(i-1,j) Sonst, Opt(i,j) = max{Opt(i-1,j), v[i] + Opt(i-1,j-g[i])} Rekursionsabbruch Opt(0,j)= 0 für 0jW

Dynamische Programmierung Rekursion Wenn j<g[i] dann Opt(i,j) = Opt(i-1,j) Sonst, Opt(i,j) = max{Opt(i-1,j), v[i] + Opt(i-1,j-g[i])} Rekursionsabbruch Opt(0,j)= 0 für 0jW Gibt es keine Objekte, so kann auch nichts in den Rucksack gepackt werden

Dynamische Programmierung Rucksack(n,g,v,W) new array Opt[0,..,n][0,..,W] for j  0 to W do Opt[0,j]  0 for i  0 to n do Berechne Opt[i,j] nach Rekursion return Opt[n,W]

Dynamische Programmierung Rucksack(n,g,v,W) new array Opt[0,..,n][0,..,W] for j  0 to W do Opt[0,j]  0 for i  0 to n do Berechne Opt[i,j] nach Rekursion return Opt[n,W] Laufzeit O(nW)

Dynamische Programmierung Größe Wert Beispiel g v 5 2 3 4 1 7 n 1 2 1 n 1 W

Dynamische Programmierung Größe Wert Beispiel g v 5 2 3 4 1 7 n 1 2 g[1]>j: Also Opt[i,j] = Opt[i-1,j] 1 n 1 W

Dynamische Programmierung Größe Wert Beispiel g v 5 2 3 4 1 7 n 2 1 2 Opt[i,j] = max{Opt[i-1,j], v[i] + Opt[i-1,j-g[i]]} 1 n 1 W

Dynamische Programmierung Größe Wert Beispiel 2 g v 5 2 3 4 1 7 n 1 2 1 n 1 W

Dynamische Programmierung Größe Wert Beispiel 2 g v 5 2 3 4 1 7 n 1 2 1 n 1 W

Dynamische Programmierung Größe Wert Beispiel 2 g v 5 2 3 4 1 7 n 1 2 1 n 1 W

Dynamische Programmierung Größe Wert Beispiel 2 g v 5 2 3 4 1 7 n 1 2 1 n 1 W

Dynamische Programmierung Größe Wert Beispiel 4 2 g v 5 2 3 4 1 7 n 1 2 1 n 1 W

Dynamische Programmierung Größe Wert Beispiel 4 2 g v 5 2 3 4 1 7 n 1 2 1 n 1 W

Dynamische Programmierung Größe Wert Beispiel 4 6 2 g v 5 2 3 4 1 7 n 1 2 1 n 1 W

Dynamische Programmierung Größe Wert Beispiel 4 6 2 g v 5 2 3 4 1 7 n 1 2 1 n 1 W

Dynamische Programmierung Größe Wert Beispiel 1 4 6 2 g v 5 2 3 4 1 7 n 1 2 1 n 1 W

Dynamische Programmierung Größe Wert Beispiel 1 4 6 2 g v 5 2 3 4 1 7 n 1 2 1 n 1 W

Dynamische Programmierung Größe Wert Beispiel 1 4 5 6 2 g v 5 2 3 4 1 7 n 1 2 1 n 1 W

Dynamische Programmierung Größe Wert Beispiel 1 4 5 6 2 g v 5 2 3 4 1 7 n 1 2 1 n 1 W

Dynamische Programmierung Größe Wert Beispiel 1 3 4 5 7 8 6 2 g v 5 2 3 4 1 7 n 1 2 1 n 1 W

Dynamische Programmierung Größe Wert Beispiel 2 3 5 6 7 9 10 1 4 8 g v 5 2 3 4 1 7 n 1 2 1 n 1 W

Dynamische Programmierung Größe Wert Beispiel 2 3 5 6 7 9 10 1 4 8 g v 5 2 3 4 1 7 n 1 2 1 n 1 W

Dynamische Programmierung Größe Wert Beispiel 2 3 5 7 9 10 12 13 6 1 4 8 g v 5 2 3 4 1 7 n 1 2 1 n 1 W

Dynamische Programmierung Größe Wert Beispiel 2 3 5 7 9 10 12 13 6 1 4 8 g v 5 2 3 4 1 7 n 1 2 1 n 1 W

Dynamische Programmierung Optimaler Lösungswert für W=8 Größe Wert Beispiel g v 5 2 3 4 1 7 n 2 3 5 7 9 10 12 13 6 1 4 8 1 2 1 n 1 W

Dynamische Programmierung Beobachtung: Sei R der Wert einer optimalen Lösung für die Elemente 1,..,i Falls g[i]≤j und Opt[i-1,j-g[i]] +v[i]= R, so ist Objekt i in mindestens einer optimalen Lösung enthalten

Dynamische Programmierung Wie kann man eine optimale Lösung berechnen? Idee: Verwende Tabelle der dynamischen Programmierung Fallunterscheidung + Rekursion: - Falls das i-te Objekt in einer optimalen Lösung für Objekte 1 bis i und Rucksackgröße j ist, so gib es aus und fahre rekursiv mit Objekt i-1 und Rucksackgröße W-g[i] fort - Ansonsten fahre mit Objekt i-1 und Rucksackgröße j fort

Dynamische Programmierung RucksackLösung(Opt,i,j,g,v,K) if i=0 return  else if g[i]>j then return RucksackLösung(Opt,i-1,j,g,v,K) else if K=v[i] + Opt[i-1,j-g[i]] then return {i}  RucksackLösung(Opt,i-1,j-g[i],g,v,K-v[i]) else return RucksackLösung(Opt,i-1,j,g,v,K) Lemma 28 (Beweis später) Hat die optimale Lösung für Objekte 1,..,i und Rucksackgröße j den Wert K, so berechnet Algorithmus Rucksacklösung eine Teilmenge S von {1,..,i}, so dass S g[i] ≤ j und S v[i] = K ist. iS iS

Dynamische Programmierung RucksackLösung(Opt,i,j,g,v,K) if i=0 return  else if g[i]>j then return RucksackLösung(Opt,i-1,j,g,v,K) else if K=v[i] + Opt[i-1,j-g[i]] then return {i}  RucksackLösung(Opt,i-1,j-g[i],g,v,K-v[i]) else return RucksackLösung(Opt,i-1,j,g,v,K) Aufruf Nach der Berechnung der Tabelle Opt von Rucksack wird RucksackLösung mit Opt, i=n, j=W, g, v, und K=Opt[n,W] aufgerufen. Nach dem Lemma wird dann die optimale Lösung konstruiert

Dynamische Programmierung K=13, j=8, i=8: Es gilt K > v[i]+Opt[i-1,j-g[i]] Größe Wert Beispiel g v 5 2 3 4 1 7 n 2 3 5 7 9 10 12 13 6 1 4 8 1 2 1 n 1 W

Dynamische Programmierung K=13, j=8, i=7: Es gilt K = v[i]+Opt[i-1,j-g[i]] Größe Wert Beispiel g v 5 2 3 4 1 7 n 2 3 5 7 9 10 12 13 6 1 4 8 1 2 1 n 1 W

Dynamische Programmierung K=6, j=4, i=6: Es gilt g[i]>j Größe Wert Beispiel g v 5 2 3 4 1 7 n 2 3 5 7 9 10 12 13 6 1 4 8 1 2 1 n 1 W

Dynamische Programmierung K=6, j=4, i=5: Es gilt K = v[i]+Opt[i-1,j-g[i]] Größe Wert Beispiel g v 5 2 3 4 1 7 n 2 3 5 7 9 10 12 13 6 1 4 8 1 2 1 n 1 W

Dynamische Programmierung K=6, j=4, i=5: Es gilt K = v[i]+Opt[i-1,j-g[i]] Größe Wert Beispiel g v 5 2 3 4 1 7 n 2 3 5 7 9 10 12 13 6 1 4 8 1 2 1 n 1 W

Dynamische Programmierung K=4, j=3, i=4: Es gilt K = v[i]+Opt[i-1,j-g[i]] Größe Wert Beispiel g v 5 2 3 4 1 7 n 2 3 5 7 9 10 12 13 6 1 4 8 1 2 1 n 1 W

Dynamische Programmierung K=1, j=1, i=3: Es gilt K = v[i]+Opt[i-1,j-g[i]] Größe Wert Beispiel g v 5 2 3 4 1 7 n 2 3 5 7 9 10 12 13 6 1 4 8 1 2 1 n 1 W

Dynamische Programmierung K=0, j=0, i=1: Es gilt g[i]>j Größe Wert Beispiel g v 5 2 3 4 1 7 n 2 3 5 7 9 10 12 13 6 1 4 8 1 2 1 n 1 W

Dynamische Programmierung K=0, j=0, i=1: Es gilt g[i]>j Größe Wert Beispiel g v 5 2 3 4 1 7 n 2 3 5 7 9 10 12 13 6 1 4 8 1 2 1 n 1 W

Dynamische Programmierung K=0, j=0, i=0: Es gilt i=0 Größe Wert Beispiel g v 5 2 3 4 1 7 n 2 3 5 7 9 10 12 13 6 1 4 8 1 2 1 n 1 W

Dynamische Programmierung Lemma 29 Nach dem k-ten Durchlauf der äußeren for-Schleife von Rucksack(n,g,v,W) gilt für alle 0≤i≤k und 0≤j≤W, dass Feld Opt[i,j] den Wert einer optimalen Lösung für Objekte 1 bis i mit Größen g[i] und Werten v[i] und Rucksackgröße j. Beweis: Wir beweisen die Aussage per Induktion über k.

Dynamische Programmierung Lemma 29 Nach dem k-ten Durchlauf der äußeren for-Schleife von Rucksack(n,g,v,W) gilt für alle 0≤i≤k und 0≤j≤W, dass Feld Opt[i,j] den Wert einer optimalen Lösung für Objekte 1 bis i mit Größen g[i] und Werten v[i] und Rucksackgröße j. Beweis: Wir beweisen die Aussage per Induktion über k. (I.A.) k=0: Vor dem ersten Schleifendurchlauf wurde Opt[0,j] für alle 0≤j≤W mit 0 initialisiert. Da keine Objekte vorhanden sind, können auch keine mitgenommen werden. Daher stimmt die Aussage.

Dynamische Programmierung Lemma 29 Nach dem k-ten Durchlauf der äußeren for-Schleife von Rucksack(n,g,v,W) gilt für alle 0≤i≤k und 0≤j≤W, dass Feld Opt[i,j] den Wert einer optimalen Lösung für Objekte 1 bis i mit Größen g[i] und Werten v[i] und Rucksackgröße j. Beweis: Wir beweisen die Aussage per Induktion über k. (I.A.) k=0: Vor dem ersten Schleifendurchlauf wurde Opt[0,j] für alle 0≤j≤W mit 0 initialisiert. Da keine Objekte vorhanden sind, können auch keine mitgenommen werden. Daher stimmt die Aussage. (I.V.) Die Aussage stimmt für k-1.

Dynamische Programmierung Lemma 29 Nach dem k-ten Durchlauf der äußeren for-Schleife von Rucksack(n,g,v,W) gilt für alle 0≤i≤k und 0≤j≤W, dass Feld Opt[i,j] den Wert einer optimalen Lösung für Objekte 1 bis i mit Größen g[i] und Werten v[i] und Rucksackgröße j. Beweis: Wir beweisen die Aussage per Induktion über k. (I.A.) k=0: Vor dem ersten Schleifendurchlauf wurde Opt[0,j] für alle 0≤j≤W mit 0 initialisiert. Da keine Objekte vorhanden sind, können auch keine mitgenommen werden. Daher stimmt die Aussage. (I.V.) Die Aussage stimmt für k-1.

Dynamische Programmierung Lemma 29 Nach dem k-ten Durchlauf der äußeren for-Schleife von Rucksack(n,g,v,W) gilt für alle 0≤i≤k und 0≤j≤W, dass Feld Opt[i,j] den Wert einer optimalen Lösung für Objekte 1 bis i mit Größen g[i] und Werten v[i] und Rucksackgröße j. Beweis: (I.V.) Die Aussage stimmt für k-1.

Dynamische Programmierung Lemma 29 Nach dem k-ten Durchlauf der äußeren for-Schleife von Rucksack(n,g,v,W) gilt für alle 0≤i≤k und 0≤j≤W, dass Feld Opt[i,j] den Wert einer optimalen Lösung für Objekte 1 bis i mit Größen g[i] und Werten v[i] und Rucksackgröße j. Beweis: (I.V.) Die Aussage stimmt für k-1. (I.S.) Wir müssen zeigen, dass Opt[k,j] genau den Wert einer optimalen Lösung für Objekte 1 bis k bei Rucksackgröße j hat.

Dynamische Programmierung Lemma 29 Nach dem k-ten Durchlauf der äußeren for-Schleife von Rucksack(n,g,v,W) gilt für alle 0≤i≤k und 0≤j≤W, dass Feld Opt[i,j] den Wert einer optimalen Lösung für Objekte 1 bis i mit Größen g[i] und Werten v[i] und Rucksackgröße j. Beweis: (I.V.) Die Aussage stimmt für k-1. (I.S.) Wir müssen zeigen, dass Opt[k,j] genau den Wert einer optimalen Lösung für Objekte 1 bis k bei Rucksackgröße j hat. Sei dazu R der Wert einer optimalen Lösung. Wir zeigen R≤Opt[k,j] und R≥Opt[k,j]. Damit gilt Opt[k,j] = R.

Dynamische Programmierung Lemma 29 Nach dem k-ten Durchlauf der äußeren for-Schleife von Rucksack(n,g,v,W) gilt für alle 0≤i≤k und 0≤j≤W, dass Feld Opt[i,j] den Wert einer optimalen Lösung für Objekte 1 bis i mit Größen g[i] und Werten v[i] und Rucksackgröße j. Beweis: (I.V.) Die Aussage stimmt für k-1. (I.S.) Wir müssen zeigen, dass Opt[k,j] genau den Wert einer optimalen Lösung für Objekte 1 bis k bei Rucksackgröße j hat. Sei dazu R der Wert einer optimalen Lösung. Wir zeigen R≤Opt[k,j] und R≥Opt[k,j]. Damit gilt Opt[k,j] = R. „R≤Opt[k,j]“: Sei O{1,..,k} eine optimale Lösung für Rucksackgröße j.

Dynamische Programmierung Lemma 29 Nach dem k-ten Durchlauf der äußeren for-Schleife von Rucksack(n,g,v,W) gilt für alle 0≤i≤k und 0≤j≤W, dass Feld Opt[i,j] den Wert einer optimalen Lösung für Objekte 1 bis i mit Größen g[i] und Werten v[i] und Rucksackgröße j. Beweis: (I.V.) Die Aussage stimmt für k-1. (I.S.) Wir müssen zeigen, dass Opt[k,j] genau den Wert einer optimalen Lösung für Objekte 1 bis k bei Rucksackgröße j hat. Sei dazu R der Wert einer optimalen Lösung. Wir zeigen R≤Opt[k,j] und R≥Opt[k,j]. Damit gilt Opt[k,j] = R. „R≤Opt[k,j]“: Sei O{1,..,k} eine optimale Lösung für Rucksackgröße j. Ist kO, so ist g[k]≤ j und Opt[k,j] ≥ v[k] + Opt[k-1,j-g[k]] = R nach (I.V.).

Dynamische Programmierung Lemma 29 Nach dem k-ten Durchlauf der äußeren for-Schleife von Rucksack(n,g,v,W) gilt für alle 0≤i≤k und 0≤j≤W, dass Feld Opt[i,j] den Wert einer optimalen Lösung für Objekte 1 bis i mit Größen g[i] und Werten v[i] und Rucksackgröße j. Beweis: (I.V.) Die Aussage stimmt für k-1. (I.S.) Wir müssen zeigen, dass Opt[k,j] genau den Wert einer optimalen Lösung für Objekte 1 bis k bei Rucksackgröße j hat. Sei dazu R der Wert einer optimalen Lösung. Wir zeigen R≤Opt[k,j] und R≥Opt[k,j]. Damit gilt Opt[k,j] = R. „R≤Opt[k,j]“: Sei O{1,..,k} eine optimale Lösung für Rucksackgröße j. Ist kO, so ist g[k]≤ j und Opt[k,j] ≥ v[k] + Opt[k-1,j-g[k]] = R nach (I.V.). Ist k O, so ist Opt[k,j] = Opt[k-1,j] = R.

Dynamische Programmierung Lemma 29 Nach dem k-ten Durchlauf der äußeren for-Schleife von Rucksack(n,g,v,W) gilt für alle 0≤i≤k und 0≤j≤W, dass Feld Opt[i,j] den Wert einer optimalen Lösung für Objekte 1 bis i mit Größen g[i] und Werten v[i] und Rucksackgröße j. Beweis: (I.V.) Die Aussage stimmt für k-1. (I.S.) Wir müssen zeigen, dass Opt[k,j] genau den Wert einer optimalen Lösung für Objekte 1 bis k bei Rucksackgröße j hat. Sei dazu R der Wert einer optimalen Lösung. Wir zeigen R≤Opt[k,j] und R≥Opt[k,j]. Damit gilt Opt[k,j] = R. „R≤Opt[k,j]“: Sei O{1,..,k} eine optimale Lösung für Rucksackgröße j. Ist kO, so ist g[k]≤ j und Opt[k,j] ≥ v[k] + Opt[k-1,j-g[k]] = R nach (I.V.). Ist k O, so ist Opt[k,j] = Opt[k-1,j] = R.

Dynamische Programmierung Lemma 29 Nach dem k-ten Durchlauf der äußeren for-Schleife von Rucksack(n,g,v,W) gilt für alle 0≤i≤k und 0≤j≤W, dass Feld Opt[i,j] den Wert einer optimalen Lösung für Objekte 1 bis i mit Größen g[i] und Werten v[i] und Rucksackgröße j. Beweis: „R≥Opt[k,j]“: Es gilt Opt[k,j]= max{Opt[k-1,j], v[k]+Opt[k-1,j-g[k]] } oder Opt[k,j] = Opt[k-1,j].

Dynamische Programmierung Lemma 29 Nach dem k-ten Durchlauf der äußeren for-Schleife von Rucksack(n,g,v,W) gilt für alle 0≤i≤k und 0≤j≤W, dass Feld Opt[i,j] den Wert einer optimalen Lösung für Objekte 1 bis i mit Größen g[i] und Werten v[i] und Rucksackgröße j. Beweis: „R≥Opt[k,j]“: Es gilt Opt[k,j]= max{Opt[k-1,j], v[k]+Opt[k-1,j-g[k]] } oder Opt[k,j] = Opt[k-1,j]. Wird das Maximum durch Opt[k-1,j] erreicht und im zweiten Fall folgt R≥Opt[k,j]=Opt[k-1,j], weil Opt[k-1,j] nach (I.V.) der Wert einer optimalen Lösung für Objekte 1,..,k-1 ist, es somit also auch eine Teilmenge der Objekte 1,..,k gibt, die den Wert Opt[k,j] hat.

Dynamische Programmierung Lemma 29 Nach dem k-ten Durchlauf der äußeren for-Schleife von Rucksack(n,g,v,W) gilt für alle 0≤i≤k und 0≤j≤W, dass Feld Opt[i,j] den Wert einer optimalen Lösung für Objekte 1 bis i mit Größen g[i] und Werten v[i] und Rucksackgröße j. Beweis: „R≥Opt[k,j]“: Es gilt Opt[k,j]= max{Opt[k-1,j], v[k]+Opt[k-1,j-g[k]] } oder Opt[k,j] = Opt[k-1,j]. Wird das Maximum durch Opt[k-1,j] erreicht und im zweiten Fall folgt R≥Opt[k,j]=Opt[k-1,j], weil Opt[k-1,j] nach (I.V.) der Wert einer optimalen Lösung für Objekte 1,..,k-1 ist, es somit also auch eine Teilmenge der Objekte 1,..,k gibt, die den Wert Opt[k,j] hat. Wird das Maximum durch v[k]+Opt[k-1,j-g[k]] erreicht, so folgt R≥Opt[k,j], da v[k]+Opt[k-1,j-g[k]] den Kosten von {k}X entspricht, wobei X eine optimale Lösung der ersten k-1 Objekte bei Rucksackgröße j-g[k] ist.

Dynamische Programmierung Lemma 29 Nach dem k-ten Durchlauf der äußeren for-Schleife von Rucksack(n,g,v,W) gilt für alle 0≤i≤k und 0≤j≤W, dass Feld Opt[i,j] den Wert einer optimalen Lösung für Objekte 1 bis i mit Größen g[i] und Werten v[i] und Rucksackgröße j. Beweis: „R≥Opt[k,j]“: Es gilt Opt[k,j]= max{Opt[k-1,j], v[k]+Opt[k-1,j-g[k]] } oder Opt[k,j] = Opt[k-1,j]. Wird das Maximum durch Opt[k-1,j] erreicht und im zweiten Fall folgt R≥Opt[k,j]=Opt[k-1,j], weil Opt[k-1,j] nach (I.V.) der Wert einer optimalen Lösung für Objekte 1,..,k-1 ist, es somit also auch eine Teilmenge der Objekte 1,..,k gibt, die den Wert Opt[k,j] hat. Wird das Maximum durch v[k]+Opt[k-1,j-g[k]] erreicht, so folgt R≥Opt[k,j], da v[k]+Opt[k-1,j-g[k]] den Kosten von {k}X entspricht, wobei X eine optimale Lösung der ersten k-1 Objekte bei Rucksackgröße j-g[k] ist. Da es jeweils eine Lösung mit Kosten Opt[k,j] gibt, folgt R≥Opt[k,j].

Dynamische Programmierung Lemma 29 Nach dem k-ten Durchlauf der äußeren for-Schleife von Rucksack(n,g,v,W) gilt für alle 0≤i≤k und 0≤j≤W, dass Feld Opt[i,j] den Wert einer optimalen Lösung für Objekte 1 bis i mit Größen g[i] und Werten v[i] und Rucksackgröße j. Beweis: „R≥Opt[k,j]“: Es gilt Opt[k,j]= max{Opt[k-1,j], v[k]+Opt[k-1,j-g[k]] } oder Opt[k,j] = Opt[k-1,j]. Wird das Maximum durch Opt[k-1,j] erreicht und im zweiten Fall folgt R≥Opt[k,j]=Opt[k-1,j], weil Opt[k-1,j] nach (I.V.) der Wert einer optimalen Lösung für Objekte 1,..,k-1 ist, es somit also auch eine Teilmenge der Objekte 1,..,k gibt, die den Wert Opt[k,j] hat. Wird das Maximum durch v[k]+Opt[k-1,j-g[k]] erreicht, so folgt R≥Opt[k,j], da v[k]+Opt[k-1,j-g[k]] den Kosten von {k}X entspricht, wobei X eine optimale Lösung der ersten k-1 Objekte bei Rucksackgröße j-g[k] ist. Da es jeweils eine Lösung mit Kosten Opt[k,j] gibt, folgt R≥Opt[k,j].

Dynamische Programmierung Lemma 28 Hat die optimale Lösung für Objekte 1,..,i und Rucksackgröße j den Wert K, so berechnet Algorithmus Rucksacklösung eine Teilmenge S von {1,..,i}, so dass S g[i] ≤ j und S v[i] = K ist. Beweis: Beweis per Induktion über i. (I.A.) Ist i=0, so gibt der Algorithmus die leere Menge zurück. Dies ist korrekt, da kein Objekt in den Rucksack gepackt werden kann. iS iS

Dynamische Programmierung Lemma 28 Hat die optimale Lösung für Objekte 1,..,i und Rucksackgröße j den Wert K, so berechnet Algorithmus Rucksacklösung eine Teilmenge S von {1,..,i}, so dass S g[i] ≤ j und S v[i] = K ist. Beweis: Beweis per Induktion über i. (I.A.) Ist i=0, so gibt der Algorithmus die leere Menge zurück. Dies ist korrekt, da kein Objekt in den Rucksack gepackt werden kann. (I.V.) Die Aussage stimmt für i-1. iS iS

Dynamische Programmierung Lemma 28 Hat die optimale Lösung für Objekte 1,..,i und Rucksackgröße j den Wert K, so berechnet Algorithmus Rucksacklösung eine Teilmenge S von {1,..,i}, so dass S g[i] ≤ j und S v[i] = K ist. Beweis: Beweis per Induktion über i. (I.A.) Ist i=0, so gibt der Algorithmus die leere Menge zurück. Dies ist korrekt, da kein Objekt in den Rucksack gepackt werden kann. (I.V.) Die Aussage stimmt für i-1. (I.S.) Ist g[i] > j, so kann Objekt i Teil keiner Lösung sein. Der Algorithmus ruft in diesem Fall RucksackLösung(Opt,i-1,j,g,v,K). Dies ist nach (I.V.) korrekt. iS iS

Dynamische Programmierung Lemma 28 Hat die optimale Lösung für Objekte 1,..,i und Rucksackgröße j den Wert K, so berechnet Algorithmus Rucksacklösung eine Teilmenge S von {1,..,i}, so dass S g[i] ≤ j und S v[i] = K ist. Beweis: Beweis per Induktion über i. (I.A.) Ist i=0, so gibt der Algorithmus die leere Menge zurück. Dies ist korrekt, da kein Objekt in den Rucksack gepackt werden kann. (I.V.) Die Aussage stimmt für i-1. (I.S.) Ist g[i] > j, so kann Objekt i Teil keiner Lösung sein. Der Algorithmus ruft in diesem Fall RucksackLösung(Opt,i-1,j,g,v,K). Dies ist nach (I.V.) korrekt. iS iS

Dynamische Programmierung Lemma 28 Hat die optimale Lösung für Objekte 1,..,i und Rucksackgröße j den Wert K, so berechnet Algorithmus Rucksacklösung eine Teilmenge S von {1,..,i}, so dass S g[i] ≤ j und S v[i] = K ist. Beweis: (I.S.) Ist g[i] > j, so kann Objekt i Teil keiner Lösung sein. Der Algorithmus gibt in diesem Fall RucksackLösung(Opt,i-1,j,g,v,K) zurück. Dies ist nach (I.V.) korrekt. iS iS

Dynamische Programmierung Lemma 28 Hat die optimale Lösung für Objekte 1,..,i und Rucksackgröße j den Wert K, so berechnet Algorithmus Rucksacklösung eine Teilmenge S von {1,..,i}, so dass S g[i] ≤ j und S v[i] = K ist. Beweis: (I.S.) Ist g[i] > j, so kann Objekt i Teil keiner Lösung sein. Der Algorithmus gibt in diesem Fall RucksackLösung(Opt,i-1,j,g,v,K) zurück. Dies ist nach (I.V.) korrekt. Ist g[i] ≤ j und K=v[i] + Opt[i-1,j-g[i]], so gibt es eine optimale Lösung, die Objekt i enthält. iS iS

Dynamische Programmierung Lemma 28 Hat die optimale Lösung für Objekte 1,..,i und Rucksackgröße j den Wert K, so berechnet Algorithmus Rucksacklösung eine Teilmenge S von {1,..,i}, so dass S g[i] ≤ j und S v[i] = K ist. Beweis: (I.S.) Ist g[i] > j, so kann Objekt i Teil keiner Lösung sein. Der Algorithmus gibt in diesem Fall RucksackLösung(Opt,i-1,j,g,v,K) zurück. Dies ist nach (I.V.) korrekt. Ist g[i] ≤ j und K=v[i] + Opt[i-1,j-g[i]], so gibt es eine optimale Lösung, die Objekt i enthält. In diesem Fall gibt der Algorithmus {i}  RucksackLösung(Opt,i-1,j-g[i],g,v,K-v[i]) zurück. iS iS

Dynamische Programmierung Lemma 28 Hat die optimale Lösung für Objekte 1,..,i und Rucksackgröße j den Wert K, so berechnet Algorithmus Rucksacklösung eine Teilmenge S von {1,..,i}, so dass S g[i] ≤ j und S v[i] = K ist. Beweis: (I.S.) Ist g[i] > j, so kann Objekt i Teil keiner Lösung sein. Der Algorithmus gibt in diesem Fall RucksackLösung(Opt,i-1,j,g,v,K) zurück. Dies ist nach (I.V.) korrekt. Ist g[i] ≤ j und K=v[i] + Opt[i-1,j-g[i]], so gibt es eine optimale Lösung, die Objekt i enthält. In diesem Fall gibt der Algorithmus {i}  RucksackLösung(Opt,i-1,j-g[i],g,v,K-v[i]) zurück. Dies ist nach (I.V.) korrekt. Ist g[i] ≤ j und K>v[i] + Opt[i-1,j-g[i]], so kann Objekt i nicht zu einer optimalen Lösung gehören iS iS

Dynamische Programmierung Lemma 28 Hat die optimale Lösung für Objekte 1,..,i und Rucksackgröße j den Wert K, so berechnet Algorithmus Rucksacklösung eine Teilmenge S von {1,..,i}, so dass S g[i] ≤ j und S v[i] = K ist. Beweis: (I.S.) Ist g[i] > j, so kann Objekt i Teil keiner Lösung sein. Der Algorithmus gibt in diesem Fall RucksackLösung(Opt,i-1,j,g,v,K) zurück. Dies ist nach (I.V.) korrekt. Ist g[i] ≤ j und K=v[i] + Opt[i-1,j-g[i]], so gibt es eine optimale Lösung, die Objekt i enthält. In diesem Fall gibt der Algorithmus {i}  RucksackLösung(Opt,i-1,j-g[i],g,v,K-v[i]) zurück. Dies ist nach (I.V.) korrekt. Ist g[i] ≤ j und K>v[i] + Opt[i-1,j-g[i]], so kann Objekt i nicht zu einer optimalen Lösung gehören. Der Algorithmus gibt in diesem Fall RucksackLösung(A,i-1,j,g,v,K) zurück. Dies ist nach (I.V.) korrekt. iS iS

Dynamische Programmierung Lemma 28 Hat die optimale Lösung für Objekte 1,..,i und Rucksackgröße j den Wert K, so berechnet Algorithmus Rucksacklösung eine Teilmenge S von {1,..,i}, so dass S g[i] ≤ j und S v[i] = K ist. Beweis: (I.S.) Ist g[i] > j, so kann Objekt i Teil keiner Lösung sein. Der Algorithmus gibt in diesem Fall RucksackLösung(Opt,i-1,j,g,v,K) zurück. Dies ist nach (I.V.) korrekt. Ist g[i] ≤ j und K=v[i] + Opt[i-1,j-g[i]], so gibt es eine optimale Lösung, die Objekt i enthält. In diesem Fall gibt der Algorithmus {i}  RucksackLösung(Opt,i-1,j-g[i],g,v,K-v[i]) zurück. Dies ist nach (I.V.) korrekt. Ist g[i] ≤ j und K>v[i] + Opt[i-1,j-g[i]], so kann Objekt i nicht zu einer optimalen Lösung gehören. Der Algorithmus gibt in diesem Fall RucksackLösung(A,i-1,j,g,v,K) zurück. Dies ist nach (I.V.) korrekt. iS iS

Dynamische Programmierung RucksackKomplett(n,g,v,W) Rucksack(n,g,v,W) return RucksackLösung(Opt,n,W,g,v,Opt[n,W})

Dynamische Programmierung Satz 30 Algorithmus RucksackKomplett berechnet in Q(nW) Zeit den Wert einer optimalen Lösung, wobei n die Anzahl der Objekte ist und W die Größe des Rucksacks. Beweis: Die Laufzeit wird durch Algorithmus Rucksack definiert und ist somit Q(nW). Die Korrektheit folgt aus den beiden Lemmas.