Konzepte der Informatik

Vorkurs Informatik zum WS 2011/2012 26.09. - 30.09.2011 17.10. - 21.10.2011 Dr. Werner Struckmann / Christoph Peltz Stark angelehnt an Kapitel 3 aus "Abenteuer Informatik" von Jens Gallenbacher Vorkurs Informatik 2011

1

Das Rucksackproblem

Wiederholung Grundsätzliche Problematik:  Wie nutze ich vorhandenen Platz am effektivsten aus?  Problemgröße hängt von folgenden Faktoren ab  Anzahl und Beschaffenheit (Größe und Wert) der Schätze  Größe der Schatzkiste

 Mannigfaltige Variation der Problemgrößen  Dimensionalität der Gegenstände: ein-, zwei- oder dreidimensional  Teilbarkeit der Gegenstände  Beschaffenheit der Größe und des Werts der Gegenstände − Nur ganzzahlige bzw. diskrete Größen bzw. Werte − Meist werden die Gegenstände abstrahiert: Rechtecke und Quader anstatt der eigentlichen Form

 Verfügbarkeit der Gegenstände: einmal, n-mal oder unbegrenzter Vorrat

Vorkurs Informatik 2011

2

Das Rucksackproblem

Die Problematik Bereits an diesem einfachen Beispiel sieht man, dass es gar nicht so leicht ist, eine optimale Lösung aus allen Gegenständen zu finden. Man könnte sechs Goldbarren in eine Kiste der Länge 12 packen:

6

6

6

6

6

6

Damit bekommen die Gegenstände in der Kiste einen Gegenwert von 36 Goldtalern, aber 44 Goldtaler in Form von 4 Geldbündeln sind doch besser!

11

11

11

11

Man sieht: Eine Lösung bekommt man sicher durch herum probieren. Aber ist die gefundene Lösung auch das Optimum?

Vorkurs Informatik 2011

3

Das Rucksackproblem

Brute-Force  Das Optimum bekommt man immer durch das systematische Probieren aller Möglichkeiten (Brute-Force), wobei jeweils die bessere Lösung beibehalten wird. Das aber nur bei relativ kleinen Problemgrößen machbar.  Da aber alle Gegenstände miteinander kombiniert werden können, steigt die Anzahl der Möglichkeiten mit der Vergrößerung der Kiste exponentiell. Das Problem wird sehr schnell unüberschaubar und nicht mehr lösbar.  Für das 0/1-Rucksackproblem, bei dem jeder Schatz genau einmal existiert und entweder eingepackt werden kann oder nicht, kann man den Aufwand für eine Brute-Force-Vorgehensweise mit 2^n angeben.

Vorkurs Informatik 2011

4

Das Rucksackproblem

Brute-Force (0/1 Rucksackproblem)

A

Rein

Raus

B

B

C

C

D E

D E

E

C

D E

Inhalt: A, B, C, D, E Vorkurs Informatik 2011

E

D E

E

C

D E

Inhalt: A, C, D

E

D E

E

D E

E

D E

E

E

Inhalt: C, D, E 5

Das Rucksackproblem

Algorithmische Betrachtung Teile und Herrsche  Das Problem wird in kleinere Teilprobleme, die separat gelöst werden, aufgeteilt Bedingung:  Annäherung an die Gesamtlösung, wenn man eine Teillösung gefunden hat Anwendung auf das Rucksackproblem:  Bin ich der Lösung des Problems mit 6 Schätzen und einer Kiste, die 11 Einheiten fasst, näher, wenn ich die Lösung für das Problem mit 5 Schätzen und einer Kiste, die 11 Einheiten fasst, bereits gefunden habe?

Vorkurs Informatik 2011

6

Das Rucksackproblem

Algorithmische Betrachtung Beispiele für optimale Kisten der Größe sieben, acht und neun:

6

23

35

40

Vorkurs Informatik 2011

7

Das Rucksackproblem

Dynamische Programmierung Ein weiterer Ansatz zur Lösung komplexer Probleme ist die "Dynamische Programmierung"  Keine Aufteilung des Problems in disjunkte Teilprobleme  Z.B. Sortiere die linke und die rechte Hälfte einer Liste und füge sie sortiert zusammen

 Betrachtung "aller" Teilprobleme  Für das Rucksackproblem mit k Schätzen und einer Kiste der Größe n: − Löse das Problem für alle Größen 1-n und jede Anzahl von Schätzen 1-k, beginnend mit den kleinsten Schätzen

 "Weniger Arbeit durch das Lösen von mehr Problemen" oder  "Mehr ist weniger"

Vorkurs Informatik 2011

8

Das Rucksackproblem

Dynamische Programmierung - Voraussetzungen Voraussetzungen  Problemgrößen müssen abzählbar (diskret) sein  Einzelner Lösungsschritt muss linear sein Auswirkung auf das Rucksackproblem  Keine Fließkommawerte für Größe oder Wert  Eindimensionale Kiste  Es gibt nur die Alternativen "Schatz enthalten ja oder nein". Es gibt keine unterschiedlichen Möglichkeiten einen Schatz in die Kiste zu packen.

 Die einzelnen Schätze müssen beliebig oft verfügbar sein

Vorkurs Informatik 2011

9

Das Rucksackproblem

Dynamische Programmierung - Voraussetzungen  Einteilung der zu füllenden Schatzkiste in Flächenquadrate

 Betrachtung der Größe aller Schätze als ein Vielfaches eines Flächenquadrates

6

Hier abgebildet ist der kleinste Schatz, ein Goldbarren mit einem Wert von 6 Goldtalern.

Vorkurs Informatik 2011

10

Das Rucksackproblem

Die Schätze Übersicht der verschiedenen Schätze:

6

45

11

40

35

15

23

27

25

Vorkurs Informatik 2011

11

Das Rucksackproblem

Anwendung von Dynamischer Programmierung Lösung "aller" Probleme gleichzeitig:  Nutzung einer Maxikiste  Eine Kiste, die gleichzeitig auch alle kleineren beinhaltet

 Sukzessives Lösen des Problems für alle Kistengrößen mit dem jeweils nächstgrößeren Schatz  Grundlegendes Vorgehen:  Teste für jede Größe, ob das Einfügen eines neuen Schatzes einen Zugewinn bringt

0 0 0 0 0 0 0 0 0 0 0 0 0

Vorkurs Informatik 2011

12

Das Rucksackproblem

Anwendung von Dynamischer Programmierung Anhand des ersten Schatzes lässt sich das grundlegende Vorgehen leicht veranschaulichen:  Lege den neuen Schatz der Reihe nach hinter die vorhandenen Schatzkisten (rot); beginne mit der kleinsten.  Suche die Kiste mit folgender Länge: Länge der aktuellen Schatzkiste plus Länge des aktuellen Schatzes (blau)  Vergleiche den Wert der beiden so gewählten Kisten  Ist der Wert der Kiste mit dem neuen Schatz (rot) größer, fülle die andere Kiste (blau) wie erstere.

6

6

0 0 0 0 0 0 0 0 0 0 0 0

Vorkurs Informatik 2011

13

Das Rucksackproblem

Anwendung von Dynamischer Programmierung Anhand des ersten Schatzes lässt sich das grundlegende Vorgehen leicht veranschaulichen:  Lege den neuen Schatz der Reihe nach hinter die vorhandenen Schatzkisten (rot); beginne mit der kleinsten.  Suche die Kiste mit folgender Länge: Länge der aktuellen Schatzkiste plus Länge des aktuellen Schatzes (blau)  Vergleiche den Wert der beiden so gewählten Kisten  Ist der Wert der Kiste mit dem neuen Schatz (rot) größer, fülle die andere Kiste (blau) wie erstere.

6

6

0 6

6

0 0 0 0 0 0 0 0 0 0

Vorkurs Informatik 2011

14

Das Rucksackproblem

Anwendung von Dynamischer Programmierung Anhand des ersten Schatzes lässt sich das grundlegende Vorgehen leicht veranschaulichen:  Lege den neuen Schatz der Reihe nach hinter die vorhandenen Schatzkisten (rot); beginne mit der kleinsten.  Suche die Kiste mit folgender Länge: Länge der aktuellen Schatzkiste plus Länge des aktuellen Schatzes (blau)  Vergleiche den Wert der beiden so gewählten Kisten  Ist der Wert der Kiste mit dem neuen Schatz (rot) größer, fülle die andere Kiste (blau) wie erstere.

0 6 6

6 6

0 0 0 0 0 0 0 0 0 0

Vorkurs Informatik 2011

15

Das Rucksackproblem

Anwendung von Dynamischer Programmierung Anhand des ersten Schatzes lässt sich das grundlegende Vorgehen leicht veranschaulichen:  Lege den neuen Schatz der Reihe nach hinter die vorhandenen Schatzkisten (rot); beginne mit der kleinsten.  Suche die Kiste mit folgender Länge: Länge der aktuellen Schatzkiste plus Länge des aktuellen Schatzes (blau)  Vergleiche den Wert der beiden so gewählten Kisten  Ist der Wert der Kiste mit dem neuen Schatz (rot) größer, fülle die andere Kiste (blau) wie erstere.

0 6

6

6

6

6

6

0 0 0 0 0 0 0 0 0

Vorkurs Informatik 2011

16

Das Rucksackproblem

Anwendung von Dynamischer Programmierung Anhand des ersten Schatzes lässt sich das grundlegende Vorgehen leicht veranschaulichen:  Lege den neuen Schatz der Reihe nach hinter die vorhandenen Schatzkisten (rot); beginne mit der kleinsten.  Suche die Kiste mit folgender Länge: Länge der aktuellen Schatzkiste plus Länge des aktuellen Schatzes (blau)  Vergleiche den Wert der beiden so gewählten Kisten  Ist der Wert der Kiste mit dem neuen Schatz (rot) größer, fülle die andere Kiste (blau) wie erstere.

0 6 12

6

6

6

6

0 0 0 0 0 0 0 0 0

Vorkurs Informatik 2011

17

Das Rucksackproblem

Anwendung von Dynamischer Programmierung Anhand des ersten Schatzes lässt sich das grundlegende Vorgehen leicht veranschaulichen:  Lege den neuen Schatz der Reihe nach hinter die vorhandenen Schatzkisten (rot); beginne mit der kleinsten.  Suche die Kiste mit folgender Länge: Länge der aktuellen Schatzkiste plus Länge des aktuellen Schatzes (blau)  Vergleiche den Wert der beiden so gewählten Kisten  Ist der Wert der Kiste mit dem neuen Schatz (rot) größer, fülle die andere Kiste (blau) wie erstere.

0 6 12

6

6

6

12

6

6

6

0 0 0 0 0 0 0 0

Vorkurs Informatik 2011

18

Das Rucksackproblem

Anwendung von Dynamischer Programmierung  Bei nur einen Schatz: relativ komplizierter Algorithmus um alle Schatzkisten optimal mit einem Schatz zu füllen.  Problem für alle Größen und nur einen Schatz gelöst  Lösung auf der für die weiteren Schätze aufgebaut werden kann

Vorkurs Informatik 2011

0 0 6

6

6

6

12

6

6

12

6

6

18

6

6

6

18

6

6

6

24

6

6

6

6

24

6

6

6

6

30

6

6

6

6

6

30

6

6

6

6

6

36

6

6

6

6

6

6

19

Das Rucksackproblem

Anwendung von Dynamischer Programmierung Nimmt man den nächstgrößeren Schatz dazu, so ist das Vorgehen exakt das gleiche:  Lege den neuen Schatz der Reihe nach hinter die vorhandenen Schatzkisten (rot); beginne mit der kleinsten.  Suche die Kiste mit folgender Länge: Länge der aktuellen Schatzkiste plus Länge des aktuellen Schatzes (blau)  Vergleiche den Wert der beiden so gewählten Kisten  Ist der Wert der Kiste mit dem neuen Schatz (rot) größer, fülle die andere Kiste (blau) wie erstere.

Vorkurs Informatik 2011

11

11

0 6

6

6

6

12

6

6

12

6

6

18

6

6

6

18

6

6

6

24

6

6

6

6

24

6

6

6

6

30

6

6

6

6

6

30

6

6

6

6

6

36

6

6

6

6

6

6

20

Das Rucksackproblem

Anwendung von Dynamischer Programmierung Nimmt man den nächstgrößeren Schatz dazu, so ist das Vorgehen exakt das gleiche:  Lege den neuen Schatz der Reihe nach hinter die vorhandenen Schatzkisten (rot); beginne mit der kleinsten.  Suche die Kiste mit folgender Länge: Länge der aktuellen Schatzkiste plus Länge des aktuellen Schatzes (blau)  Vergleiche den Wert der beiden so gewählten Kisten  Ist der Wert der Kiste mit dem neuen Schatz (rot) größer, fülle die andere Kiste (blau) wie erstere.

Vorkurs Informatik 2011

11

11

0 6

6

11 6

11

12

6

6

12

6

6

18

6

6

6

18

6

6

6

24

6

6

6

6

24

6

6

6

6

30

6

6

6

6

6

30

6

6

6

6

6

36

6

6

6

6

6

6

21

Das Rucksackproblem

Anwendung von Dynamischer Programmierung Nimmt man den nächstgrößeren Schatz dazu, so ist das Vorgehen exakt das gleiche:  Lege den neuen Schatz der Reihe nach hinter die vorhandenen Schatzkisten (rot); beginne mit der kleinsten.  Suche die Kiste mit folgender Länge: Länge der aktuellen Schatzkiste plus Länge des aktuellen Schatzes (blau)  Vergleiche den Wert der beiden so gewählten Kisten  Ist der Wert der Kiste mit dem neuen Schatz (rot) größer, fülle die andere Kiste (blau) wie erstere.

Vorkurs Informatik 2011

0 11 6

11 6

11 6

11

12

6

6

12

6

6

18

6

6

6

18

6

6

6

24

6

6

6

6

24

6

6

6

6

30

6

6

6

6

6

30

6

6

6

6

6

36

6

6

6

6

6

6

22

Das Rucksackproblem

Anwendung von Dynamischer Programmierung Nimmt man den nächstgrößeren Schatz dazu, so ist das Vorgehen exakt das gleiche:  Lege den neuen Schatz der Reihe nach hinter die vorhandenen Schatzkisten (rot); beginne mit der kleinsten.  Suche die Kiste mit folgender Länge: Länge der aktuellen Schatzkiste plus Länge des aktuellen Schatzes (blau)  Vergleiche den Wert der beiden so gewählten Kisten  Ist der Wert der Kiste mit dem neuen Schatz (rot) größer, fülle die andere Kiste (blau) wie erstere.

Vorkurs Informatik 2011

0 0 17

11

6

11 6

11

12

6

6

12

6

6

18

6

6

6

18

6

6

6

24

6

6

6

6

24

6

6

6

6

30

6

6

6

6

6

30

6

6

6

6

6

36

6

6

6

6

6

6

23

Das Rucksackproblem

Anwendung von Dynamischer Programmierung Nimmt man den nächstgrößeren Schatz dazu, so ist das Vorgehen exakt das gleiche:  Lege den neuen Schatz der Reihe nach hinter die vorhandenen Schatzkisten (rot); beginne mit der kleinsten.  Suche die Kiste mit folgender Länge: Länge der aktuellen Schatzkiste plus Länge des aktuellen Schatzes (blau)  Vergleiche den Wert der beiden so gewählten Kisten  Ist der Wert der Kiste mit dem neuen Schatz (rot) größer, fülle die andere Kiste (blau) wie erstere.

Vorkurs Informatik 2011

0 0 17

11

6

11 6

11

12

6

17 12

6

18

6

6

6

18

6

6

6

24

6

6

6

6

24

6

6

6

6

30

6

6

6

6

6

30

6

6

6

6

6

36

6

6

6

6

6

6

11

6

24

Das Rucksackproblem

Anwendung von Dynamischer Programmierung Nimmt man den nächstgrößeren Schatz dazu, so ist das Vorgehen exakt das gleiche:  Lege den neuen Schatz der Reihe nach hinter die vorhandenen Schatzkisten (rot); beginne mit der kleinsten.  Suche die Kiste mit folgender Länge: Länge der aktuellen Schatzkiste plus Länge des aktuellen Schatzes (blau)  Vergleiche den Wert der beiden so gewählten Kisten  Ist der Wert der Kiste mit dem neuen Schatz (rot) größer, fülle die andere Kiste (blau) wie erstere.

Vorkurs Informatik 2011

0 0 6

6

22 6

11

11

12

6

17 12

6

18

6

6

6

18

6

6

6

24

6

6

6

6

24

6

6

6

6

30

6

6

6

6

6

30

6

6

6

6

6

36

6

6

6

6

6

6

11

6

25

Das Rucksackproblem

Anwendung von Dynamischer Programmierung Nimmt man den nächstgrößeren Schatz dazu, so ist das Vorgehen exakt das gleiche:  Lege den neuen Schatz der Reihe nach hinter die vorhandenen Schatzkisten (rot); beginne mit der kleinsten.  Suche die Kiste mit folgender Länge: Länge der aktuellen Schatzkiste plus Länge des aktuellen Schatzes (blau)  Vergleiche den Wert der beiden so gewählten Kisten  Ist der Wert der Kiste mit dem neuen Schatz (rot) größer, fülle die andere Kiste (blau) wie erstere.

Vorkurs Informatik 2011

0 0 6

6

22 6

11

11

12

6

17 12

6

22 18

6

11 11

11

18

6

6

6

24

6

6

6

6

24

6

6

6

6

30

6

6

6

6

6

30

6

6

6

6

6

36

6

6

6

6

6

6

26

Das Rucksackproblem

Anwendung von Dynamischer Programmierung Bis zum Ende durchgeführt ergibt sich das folgende Bild.

0 0

 Problem für alle Größen und zwei Schätzen gelöst  Lösung auf der für die weiteren Schätze aufgebaut werden kann

6

6

11 6

11

12

6

17 12

6

22 18 6

28 24

6

33 24

Vorkurs Informatik 2011

11 11

11

23 18

11

6

11 11

34 30

6

39 30

6

44 36

6

11 11 11

6

11 11

11 11 11

11

11 11

11

27

Das Rucksackproblem

Anwendung von Dynamischer Programmierung Und auch beim Schatz mit der Länge vier muss man nicht umdenken…

15

15

0 6

6

11 6

11

12

6

17 12

6

22 18 6

28 24

6

33 24

Vorkurs Informatik 2011

11 11

11

23 18

11

6

11 11

34 30

6

39 30

6

44 36

6

11 11 11

6

11 11

11 11 11

11

11 11

11

28

Das Rucksackproblem

Anwendung von Dynamischer Programmierung Und auch beim Schatz mit der Länge vier muss man nicht umdenken…

15

15

0 6

6

11 6

11

15 12 17 12

15

22 18 6

28 24

6

33 24

Vorkurs Informatik 2011

11

11

23 18

11

6

11 11

34 30

6

39 30

6

44 36

11

6

11 11 11

6

11 11

11 11 11

11

11 11

11

29

Das Rucksackproblem

Anwendung von Dynamischer Programmierung Nachdem wir nun den Algorithmus auch mit dem dritten Schatz durchexerziert haben, sollte das Prinzip klar sein. Zeit sich die Frage zu stellen, ob das, was wir machen auch funktioniert…

0 0 6

6

11 6

11

15 12 17 12

15 11

6

22 18

11

26 23 18

11

30 28 24

15 15

15

33 24

11

11

37 34 30

11

11

41 39 30

11

45 44 36

Vorkurs Informatik 2011

11

11 15 15

15

15 15

15

30

Das Rucksackproblem

Dynamische Programmierung - Korrektheitsbeweis Die Korrektheit lässt sich per Induktion beweisen, d.h. wir zeigen die Korrektheit für den trivialen Fall (nur ein Schatz) und beweisen, dass die Behauptung – sofern sie für n Schätze gilt – auch für n+1 Schätze gilt. Vorgehen allgemein: Wir kombinieren immer den Inhalt einer bereits optimal gepackten Kiste A mit einem Schatz S, wofür wir eine Kiste B benötigen, deren Größe der Größe der Kiste A plus des Schatzes S entspricht.  Für den Trivialfall (n = 1) ist die Korrektheit sofort zu sehen.  Für n = n + 1 gibt es folgende Alternativen  Man benötigt den neu hinzugekommenen Schatz S nicht, dann bleibt die Kiste, so wie sie ist, erhalten und damit weiterhin optimal.  Benötigt man den neu hinzugekommenen Schatz, so ist in der neuen optimalen Kiste neben dem hinzugekommenen Schatz noch Platz für soviele Elemente, wie es sie auch in Kiste A gibt. Da Kiste A bereits optimal gefüllt war, muss also auch Kiste B optimal gefüllt sein.

Vorkurs Informatik 2011

31

Das Rucksackproblem

Dynamische Programmierung - Ergebnis Nachdem die Korrektheit des Verfahrens bewiesen ist, können wir es auf die weiteren Schätze anwenden und erhalten das nebenstehende Ergebnis. Damit sind die optimalen Lösungen für alle Kisten gefunden.

0 0 6 11 6

Vorkurs Informatik 2011

11

15 12

15

23 17 12

23

25 23 22 18 29 26 23 18

Erstaunlich, dass in der Siegerkiste der Größe 12 ein Goldbarren eingepackt wurde, der auf den ersten Blick als kein vielversprechender Kandidat galt.

6

25 23

6

35 34 30 28 24

35

40 38 33 24

40

46 37 34 30

23

48 41 39 30

23

52 45 44 36

6

23 25 23

23

32

Das Rucksackproblem

Das Rucksackproblem - der Algorithmus Für den folgenden Algorithmus werden wie die eingangs vorgestellten Struktogramme verwenden. Dafür werden wir zwei Pfeile als Zeiger auf die aktuell betrachteten Kisten verwenden. Kiste A

Vorkurs Informatik 2011

Kiste B

33

Das Rucksackproblem

Das Rucksackproblem – Struktogramm Nehme den kleinsten Schatz zur Hand Solange man noch einen Schatz in der Hand hält Setze

Kiste A

Solange

neben die Kiste mit Größe 0

Kiste A

auf eine Kiste zeigt

Lege den Schatz rechts an die Kiste, auf die Lege

Kiste B

Wenn JA: Fülle Kiste B Kiste A

zeigt

neben die Kiste, die so groß ist wie die neben

Überprüfe, ob der Inhalt von

Schiebe

Kiste A

Kiste A

Kiste A

und dem Schatz zusammen

plus dem Schatz wertvoller ist als der Inhalt von

so, dass sie dem Inhalt von

Kiste A

Kiste B

plus dem Schatz entspricht

um eine Position nach unten

Lege den Schatz aus der Hand und nimm den nächst größeren Schatz in die Hand, falls es noch einen größeren gibt

Vorkurs Informatik 2011

34

Das Rucksackproblem

Algorithmus – Ja oder Nein? Ist das beschriebene Verfahren ein Algorithmus?  Das Verfahren ist in einem endlichen Text durch ein Struktogramm beschrieben.  Die Objekte der Berechnung sind die Kisten und Schätze.  Die Operationen sind das Vergleichen und Füllen von Kisten.  Die Reihenfolge der Operationen ist ebenfalls durch das Struktogramm festgelegt. ➜ Das Verfahren ist ein Algorithmus.

Vorkurs Informatik 2011

35

Das Rucksackproblem

Laufzeit

Vorkurs Informatik 2011

36

Das Rucksackproblem

Laufzeit Anzahl Schritte = Anzahl der Kisten * Anzahl der Schätze

Vorkurs Informatik 2011

37

Das Rucksackproblem

Laufzeit Anzahl Schritte = Anzahl der Kisten * Anzahl der Schätze Beachte:  "Fülle Kiste B so, dass sie dem Inhalt von Kiste A plus dem Schatz entspricht" (türkiser Block) könnte je nach Implementierung eine implizite Schleife beinhalten, sodass sogar eine kubische Laufzeit gegeben wäre

Vorkurs Informatik 2011

38

Vielen Dank für Ihre Aufmerksamkeit!

Vorkurs Informatik 2011

39