20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile...

135
Gierige Algorithmen: Berechne Lösung schrittweise In jedem Schritt mache lokal optimale Wahl Anwendbar: Wenn optimale Lösung durch lokal optimale Wahl zu einer optimalen Lösung erweiterbar ist. Algorithmen: Scheduling Probleme Optimale Präfix-Kodierung (Huffman Codes) SS 2017 20. Dynamische Programmierung 1 DuA - Kapitel 20

Transcript of 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile...

Page 1: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

Gierige Algorithmenbull Berechne Loumlsung schrittweisebull In jedem Schritt mache lokal optimale Wahl

Anwendbarbull Wenn optimale Loumlsung durch lokal optimale Wahl zu

einer optimalen Loumlsung erweiterbar ist

Algorithmenbull Scheduling Problemebull Optimale Praumlfix-Kodierung (Huffman Codes)

SS 2017

20 Dynamische Programmierung

1DuA - Kapitel 20

DivideampConquerbull Teile Problem in Teilprobleme aufbull Kombiniere optimale Loumlsungen der Teilprobleme zu einer

optimalen Loumlsung fuumlr das Ausgangsproblem

Anwendbarbull Wenn Problem in Teilprobleme zerlegbar ist deren Loumlsungen

zu einer Loumlsung des Gesamtproblems kombinierbar sind

Algorithmenbull Mergesortbull Strassens Methode der Matrixmultiplikation

SS 2017

20 Dynamische Programmierung

2DuA - Kapitel 20

DivideampConquerbull Teile Problem in Teilprobleme aufbull Kombiniere optimale Loumlsungen der Teilprobleme zu einer

optimalen Loumlsung fuumlr das Ausgangsproblem

Anwendbarbull Wenn Problem in Teilprobleme zerlegbar ist deren Loumlsungen

zu einer Loumlsung des Gesamtproblems kombinierbar sind

Problembull Es kann bei rekursiven Aufrufen vorkommen dass

Teilprobleme mehrfach geloumlst werden

SS 2017

20 Dynamische Programmierung

3DuA - Kapitel 20

DivideampConquerbull Teile Problem in Teilprobleme aufbull Kombiniere optimale Loumlsungen der Teilprobleme zu einer

optimalen Loumlsung fuumlr das Ausgangsproblem

Anwendbarbull Wenn Problem in Teilprobleme zerlegbar ist deren Loumlsungen

zu einer Loumlsung des Gesamtproblems kombinierbar sind

Loumlsung dynamische Programmierungbull Speichern einmal berechneter Loumlsungen in einer Tabelle

SS 2017

20 Dynamische Programmierung

4DuA - Kapitel 20

Typische Anwendung fuumlr dynamisches Programmieren Optimierungsprobleme

Eine optimale Loumlsung fuumlr das Ausgangsproblem setzt sich aus optimalen Loumlsungen fuumlr kleinere Probleme zusammen

SS 2017

Dynamische Programmierung

5DuA - Kapitel 20

Definitionbull Seien X=(x1xm) und Y=(y1yn) zwei Folgen wobei

xi yj isin A fuumlr ein endliches Alphabet A bull Dann heiszligt Y Teilfolge von X wenn es aufsteigend

sortierte Indizes i1in gibt mit xij = yj fuumlr j = 1n

BFF

YWSS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

6DuA - Kapitel 20

Definitionbull Seien X=(x1xm) und Y=(y1yn) zwei Folgen wobei

xi yj isin A fuumlr ein endliches Alphabet A bull Dann heiszligt Y Teilfolge von X wenn es aufsteigend

sortierte Indizes i1in gibt mit xij = yj fuumlr j = 1n

BeispielFolge YFolge X

Y ist Teilfolge von XWaumlhle (i1i2i3i4) = (2457)

B C A C

A B A C A B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

7DuA - Kapitel 20

Definitionbull Seien X=(x1xm) und Y=(y1yn) zwei Folgen wobei

xi yj isin A fuumlr ein endliches Alphabet A bull Dann heiszligt Y Teilfolge von X wenn es aufsteigend

sortierte Indizes i1in gibt mit xij = yj fuumlr j = 1n

BeispielFolge YFolge X

Y ist Teilfolge von XWaumlhle (i1i2i3i4) = (2457)

B C A C

A B A C A B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

8DuA - Kapitel 20

Definitionbull Seien X=(x1xm) und Y=(y1yn) zwei Folgen wobei

xi yj isin A fuumlr ein endliches Alphabet A bull Dann heiszligt Y Teilfolge von X wenn es aufsteigend

sortierte Indizes i1in gibt mit xij = yj fuumlr j = 1n

BeispielFolge YFolge X

bull Y ist Teilfolge von Xbull Waumlhle (i1i2i3i4) = (2457)

B C A C

A B A C A B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

9DuA - Kapitel 20

Definitionbull Seien X=(x1xm) und Y=(y1yn) zwei Folgen wobei

xi yj isin A fuumlr ein endliches Alphabet A bull Dann heiszligt Y Teilfolge von X wenn es aufsteigend

sortierte Indizes i1in gibt mit xij = yj fuumlr j = 1n

BeispielFolge YFolge X

bull Y ist Teilfolge von Xbull Waumlhle (i1i2i3i4) = (2457)

B C A C

A B A C A B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

10DuA - Kapitel 20

Definitionbull Seien X=(x1xm) und Y=(y1yn) zwei Folgen wobei

xi yj isin A fuumlr ein endliches Alphabet A bull Dann heiszligt Y Teilfolge von X wenn es aufsteigend

sortierte Indizes i1in gibt mit xij = yj fuumlr j = 1n

BeispielFolge YFolge X

bull Y ist Teilfolge von X waumlhle (i1i2i3i4) = (2457)

B C A C

A B A C A B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

11DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z gemeinsame Teilfolge von X und Y wenn

Z Teilfolge sowohl von X als auch von Y ist

BF

F

F

Z

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

12DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z gemeinsame Teilfolge von X und Y wenn

Z Teilfolge sowohl von X als auch von Y ist

BeispielFolge Z

Folge X

Folge Y

bull Z ist gemeinsame Teilfolge von X und Y

A B A C A B C

B C A C

B A C C A B B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

13DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z gemeinsame Teilfolge von X und Y wenn

Z Teilfolge sowohl von X als auch von Y ist

BeispielFolge Z

Folge X

Folge Y

bull Z ist gemeinsame Teilfolge von X und Y

A B A C A B C

B C A C

B A C C A B B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

14DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z gemeinsame Teilfolge von X und Y wenn

Z Teilfolge sowohl von X als auch von Y ist

BeispielFolge Z

Folge X

Folge Y

bull Z ist gemeinsame Teilfolge von X und Y

A B A C A B C

B C A C

B A C C A B B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

15DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z laumlngste gemeinsame Teilfolge von X und

Y wenn Z gemeinsame Teilfolge von X und Y ist und es keine andere gemeinsame Teilfolge von X und Y gibt die groumlszligere Laumlnge als Z besitzt

BF

F

F

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

16DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z laumlngste gemeinsame Teilfolge von X und

Y wenn Z gemeinsame Teilfolge von X und Y ist und es keine andere gemeinsame Teilfolge von X und Y gibt die groumlszligere Laumlnge als Z besitzt

BeispielFolge X

Folge Y

F

A B A C A B C

B A C C A B B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

17DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z laumlngste gemeinsame Teilfolge von X und

Y wenn Z gemeinsame Teilfolge von X und Y ist und es keine andere gemeinsame Teilfolge von X und Y gibt die groumlszligere Laumlnge als Z besitzt

BeispielFolge X

Folge Y

Folge Z1

A B A C A B C

B A C C A B B C

B C A C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

18DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z laumlngste gemeinsame Teilfolge von X und

Y wenn Z gemeinsame Teilfolge von X und Y ist und es keine andere gemeinsame Teilfolge von X und Y gibt die groumlszligere Laumlnge als Z besitzt

BeispielFolge X

Folge Y

Folge Z1 Folge Z2

A B A C A B C

B A C C A B B C

B C A C B A C A C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

19DuA - Kapitel 20

Laumlngste Teilfolgehat Laumlnge 6

Eingabebull Folge X=(x1xm)bull Folge Y=(y1yn)

Ausgabebull Laumlngste gemeinsame Teilfolge Z

(Longest Common Subsequence)

BF

F

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

20DuA - Kapitel 20

Eingabebull Folge X=(x1xm)bull Folge Y=(y1yn)

Ausgabebull Laumlngste gemeinsame Teilfolge Z

(Longest Common Subsequence)

BeispielFolge X

Folge Y

A B C B D A B

B D C A B A

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

21DuA - Kapitel 20

Algorithmusbull Erzeuge alle moumlglichen Teilfolgen von Xbull Teste fuumlr jede Teilfolge von X ob auch Teilfolge von Ybull Merke zu jedem Zeitpunkt bisher laumlngste gemeinsame

Teilfolge

Laufzeitbull 2m moumlgliche Teilfolgenbull Exponentielle Laufzeit

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

22DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

23DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

2 Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

24DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

2 Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

3 Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

25DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

2 Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

3 Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

26DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

27DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

28DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

29DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

30DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

31DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

32DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Tabelle fuumlr die C[i][j] Werte

anlegen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

33DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Erste Spalte der Tabelle

auf 0 setzen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

34DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Erste Reihe der Tabelle

auf 0 setzen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

35DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

36DuA - Kapitel 20

Laumlngenberechnung(Array X Y C i j)1 if xi = yj then C[i][j] larr C[i-1][j-1] +12 else3 if C[i-1][j] ge C[i][j-1] then C[i][j] larr C[i-1][j]4 else C[i][j] larr C[i][j-1]

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

37DuA - Kapitel 20

Laumlngenberechnung(Array X Y C i j)1 if xi = yj then C[i][j] larr C[i-1][j-1] +12 else3 if C[i-1][j] ge C[i][j-1] then C[i][j] larr C[i-1][j]4 else C[i][j] larr C[i][j-1]

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

38DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

39DuA - Kapitel 20

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

40DuA - Kapitel 20

00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

41DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

42DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

43DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

44DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

45DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

46DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

47DuA - Kapitel 20

0 0 0 0 0 0 00 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

48DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

49DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

50DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

51DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

52DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

53DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

54DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

55DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

56DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

57DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

58DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

59DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

60DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

61DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 200000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

62DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

63DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 3000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

64DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

65DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

66DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

67DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

68DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

69DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

70DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

71DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

72DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

73DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

74DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

75DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

76DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

77DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 2: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

DivideampConquerbull Teile Problem in Teilprobleme aufbull Kombiniere optimale Loumlsungen der Teilprobleme zu einer

optimalen Loumlsung fuumlr das Ausgangsproblem

Anwendbarbull Wenn Problem in Teilprobleme zerlegbar ist deren Loumlsungen

zu einer Loumlsung des Gesamtproblems kombinierbar sind

Algorithmenbull Mergesortbull Strassens Methode der Matrixmultiplikation

SS 2017

20 Dynamische Programmierung

2DuA - Kapitel 20

DivideampConquerbull Teile Problem in Teilprobleme aufbull Kombiniere optimale Loumlsungen der Teilprobleme zu einer

optimalen Loumlsung fuumlr das Ausgangsproblem

Anwendbarbull Wenn Problem in Teilprobleme zerlegbar ist deren Loumlsungen

zu einer Loumlsung des Gesamtproblems kombinierbar sind

Problembull Es kann bei rekursiven Aufrufen vorkommen dass

Teilprobleme mehrfach geloumlst werden

SS 2017

20 Dynamische Programmierung

3DuA - Kapitel 20

DivideampConquerbull Teile Problem in Teilprobleme aufbull Kombiniere optimale Loumlsungen der Teilprobleme zu einer

optimalen Loumlsung fuumlr das Ausgangsproblem

Anwendbarbull Wenn Problem in Teilprobleme zerlegbar ist deren Loumlsungen

zu einer Loumlsung des Gesamtproblems kombinierbar sind

Loumlsung dynamische Programmierungbull Speichern einmal berechneter Loumlsungen in einer Tabelle

SS 2017

20 Dynamische Programmierung

4DuA - Kapitel 20

Typische Anwendung fuumlr dynamisches Programmieren Optimierungsprobleme

Eine optimale Loumlsung fuumlr das Ausgangsproblem setzt sich aus optimalen Loumlsungen fuumlr kleinere Probleme zusammen

SS 2017

Dynamische Programmierung

5DuA - Kapitel 20

Definitionbull Seien X=(x1xm) und Y=(y1yn) zwei Folgen wobei

xi yj isin A fuumlr ein endliches Alphabet A bull Dann heiszligt Y Teilfolge von X wenn es aufsteigend

sortierte Indizes i1in gibt mit xij = yj fuumlr j = 1n

BFF

YWSS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

6DuA - Kapitel 20

Definitionbull Seien X=(x1xm) und Y=(y1yn) zwei Folgen wobei

xi yj isin A fuumlr ein endliches Alphabet A bull Dann heiszligt Y Teilfolge von X wenn es aufsteigend

sortierte Indizes i1in gibt mit xij = yj fuumlr j = 1n

BeispielFolge YFolge X

Y ist Teilfolge von XWaumlhle (i1i2i3i4) = (2457)

B C A C

A B A C A B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

7DuA - Kapitel 20

Definitionbull Seien X=(x1xm) und Y=(y1yn) zwei Folgen wobei

xi yj isin A fuumlr ein endliches Alphabet A bull Dann heiszligt Y Teilfolge von X wenn es aufsteigend

sortierte Indizes i1in gibt mit xij = yj fuumlr j = 1n

BeispielFolge YFolge X

Y ist Teilfolge von XWaumlhle (i1i2i3i4) = (2457)

B C A C

A B A C A B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

8DuA - Kapitel 20

Definitionbull Seien X=(x1xm) und Y=(y1yn) zwei Folgen wobei

xi yj isin A fuumlr ein endliches Alphabet A bull Dann heiszligt Y Teilfolge von X wenn es aufsteigend

sortierte Indizes i1in gibt mit xij = yj fuumlr j = 1n

BeispielFolge YFolge X

bull Y ist Teilfolge von Xbull Waumlhle (i1i2i3i4) = (2457)

B C A C

A B A C A B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

9DuA - Kapitel 20

Definitionbull Seien X=(x1xm) und Y=(y1yn) zwei Folgen wobei

xi yj isin A fuumlr ein endliches Alphabet A bull Dann heiszligt Y Teilfolge von X wenn es aufsteigend

sortierte Indizes i1in gibt mit xij = yj fuumlr j = 1n

BeispielFolge YFolge X

bull Y ist Teilfolge von Xbull Waumlhle (i1i2i3i4) = (2457)

B C A C

A B A C A B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

10DuA - Kapitel 20

Definitionbull Seien X=(x1xm) und Y=(y1yn) zwei Folgen wobei

xi yj isin A fuumlr ein endliches Alphabet A bull Dann heiszligt Y Teilfolge von X wenn es aufsteigend

sortierte Indizes i1in gibt mit xij = yj fuumlr j = 1n

BeispielFolge YFolge X

bull Y ist Teilfolge von X waumlhle (i1i2i3i4) = (2457)

B C A C

A B A C A B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

11DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z gemeinsame Teilfolge von X und Y wenn

Z Teilfolge sowohl von X als auch von Y ist

BF

F

F

Z

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

12DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z gemeinsame Teilfolge von X und Y wenn

Z Teilfolge sowohl von X als auch von Y ist

BeispielFolge Z

Folge X

Folge Y

bull Z ist gemeinsame Teilfolge von X und Y

A B A C A B C

B C A C

B A C C A B B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

13DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z gemeinsame Teilfolge von X und Y wenn

Z Teilfolge sowohl von X als auch von Y ist

BeispielFolge Z

Folge X

Folge Y

bull Z ist gemeinsame Teilfolge von X und Y

A B A C A B C

B C A C

B A C C A B B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

14DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z gemeinsame Teilfolge von X und Y wenn

Z Teilfolge sowohl von X als auch von Y ist

BeispielFolge Z

Folge X

Folge Y

bull Z ist gemeinsame Teilfolge von X und Y

A B A C A B C

B C A C

B A C C A B B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

15DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z laumlngste gemeinsame Teilfolge von X und

Y wenn Z gemeinsame Teilfolge von X und Y ist und es keine andere gemeinsame Teilfolge von X und Y gibt die groumlszligere Laumlnge als Z besitzt

BF

F

F

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

16DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z laumlngste gemeinsame Teilfolge von X und

Y wenn Z gemeinsame Teilfolge von X und Y ist und es keine andere gemeinsame Teilfolge von X und Y gibt die groumlszligere Laumlnge als Z besitzt

BeispielFolge X

Folge Y

F

A B A C A B C

B A C C A B B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

17DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z laumlngste gemeinsame Teilfolge von X und

Y wenn Z gemeinsame Teilfolge von X und Y ist und es keine andere gemeinsame Teilfolge von X und Y gibt die groumlszligere Laumlnge als Z besitzt

BeispielFolge X

Folge Y

Folge Z1

A B A C A B C

B A C C A B B C

B C A C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

18DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z laumlngste gemeinsame Teilfolge von X und

Y wenn Z gemeinsame Teilfolge von X und Y ist und es keine andere gemeinsame Teilfolge von X und Y gibt die groumlszligere Laumlnge als Z besitzt

BeispielFolge X

Folge Y

Folge Z1 Folge Z2

A B A C A B C

B A C C A B B C

B C A C B A C A C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

19DuA - Kapitel 20

Laumlngste Teilfolgehat Laumlnge 6

Eingabebull Folge X=(x1xm)bull Folge Y=(y1yn)

Ausgabebull Laumlngste gemeinsame Teilfolge Z

(Longest Common Subsequence)

BF

F

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

20DuA - Kapitel 20

Eingabebull Folge X=(x1xm)bull Folge Y=(y1yn)

Ausgabebull Laumlngste gemeinsame Teilfolge Z

(Longest Common Subsequence)

BeispielFolge X

Folge Y

A B C B D A B

B D C A B A

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

21DuA - Kapitel 20

Algorithmusbull Erzeuge alle moumlglichen Teilfolgen von Xbull Teste fuumlr jede Teilfolge von X ob auch Teilfolge von Ybull Merke zu jedem Zeitpunkt bisher laumlngste gemeinsame

Teilfolge

Laufzeitbull 2m moumlgliche Teilfolgenbull Exponentielle Laufzeit

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

22DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

23DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

2 Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

24DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

2 Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

3 Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

25DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

2 Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

3 Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

26DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

27DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

28DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

29DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

30DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

31DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

32DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Tabelle fuumlr die C[i][j] Werte

anlegen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

33DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Erste Spalte der Tabelle

auf 0 setzen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

34DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Erste Reihe der Tabelle

auf 0 setzen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

35DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

36DuA - Kapitel 20

Laumlngenberechnung(Array X Y C i j)1 if xi = yj then C[i][j] larr C[i-1][j-1] +12 else3 if C[i-1][j] ge C[i][j-1] then C[i][j] larr C[i-1][j]4 else C[i][j] larr C[i][j-1]

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

37DuA - Kapitel 20

Laumlngenberechnung(Array X Y C i j)1 if xi = yj then C[i][j] larr C[i-1][j-1] +12 else3 if C[i-1][j] ge C[i][j-1] then C[i][j] larr C[i-1][j]4 else C[i][j] larr C[i][j-1]

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

38DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

39DuA - Kapitel 20

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

40DuA - Kapitel 20

00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

41DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

42DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

43DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

44DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

45DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

46DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

47DuA - Kapitel 20

0 0 0 0 0 0 00 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

48DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

49DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

50DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

51DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

52DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

53DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

54DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

55DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

56DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

57DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

58DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

59DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

60DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

61DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 200000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

62DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

63DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 3000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

64DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

65DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

66DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

67DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

68DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

69DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

70DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

71DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

72DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

73DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

74DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

75DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

76DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

77DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 3: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

DivideampConquerbull Teile Problem in Teilprobleme aufbull Kombiniere optimale Loumlsungen der Teilprobleme zu einer

optimalen Loumlsung fuumlr das Ausgangsproblem

Anwendbarbull Wenn Problem in Teilprobleme zerlegbar ist deren Loumlsungen

zu einer Loumlsung des Gesamtproblems kombinierbar sind

Problembull Es kann bei rekursiven Aufrufen vorkommen dass

Teilprobleme mehrfach geloumlst werden

SS 2017

20 Dynamische Programmierung

3DuA - Kapitel 20

DivideampConquerbull Teile Problem in Teilprobleme aufbull Kombiniere optimale Loumlsungen der Teilprobleme zu einer

optimalen Loumlsung fuumlr das Ausgangsproblem

Anwendbarbull Wenn Problem in Teilprobleme zerlegbar ist deren Loumlsungen

zu einer Loumlsung des Gesamtproblems kombinierbar sind

Loumlsung dynamische Programmierungbull Speichern einmal berechneter Loumlsungen in einer Tabelle

SS 2017

20 Dynamische Programmierung

4DuA - Kapitel 20

Typische Anwendung fuumlr dynamisches Programmieren Optimierungsprobleme

Eine optimale Loumlsung fuumlr das Ausgangsproblem setzt sich aus optimalen Loumlsungen fuumlr kleinere Probleme zusammen

SS 2017

Dynamische Programmierung

5DuA - Kapitel 20

Definitionbull Seien X=(x1xm) und Y=(y1yn) zwei Folgen wobei

xi yj isin A fuumlr ein endliches Alphabet A bull Dann heiszligt Y Teilfolge von X wenn es aufsteigend

sortierte Indizes i1in gibt mit xij = yj fuumlr j = 1n

BFF

YWSS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

6DuA - Kapitel 20

Definitionbull Seien X=(x1xm) und Y=(y1yn) zwei Folgen wobei

xi yj isin A fuumlr ein endliches Alphabet A bull Dann heiszligt Y Teilfolge von X wenn es aufsteigend

sortierte Indizes i1in gibt mit xij = yj fuumlr j = 1n

BeispielFolge YFolge X

Y ist Teilfolge von XWaumlhle (i1i2i3i4) = (2457)

B C A C

A B A C A B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

7DuA - Kapitel 20

Definitionbull Seien X=(x1xm) und Y=(y1yn) zwei Folgen wobei

xi yj isin A fuumlr ein endliches Alphabet A bull Dann heiszligt Y Teilfolge von X wenn es aufsteigend

sortierte Indizes i1in gibt mit xij = yj fuumlr j = 1n

BeispielFolge YFolge X

Y ist Teilfolge von XWaumlhle (i1i2i3i4) = (2457)

B C A C

A B A C A B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

8DuA - Kapitel 20

Definitionbull Seien X=(x1xm) und Y=(y1yn) zwei Folgen wobei

xi yj isin A fuumlr ein endliches Alphabet A bull Dann heiszligt Y Teilfolge von X wenn es aufsteigend

sortierte Indizes i1in gibt mit xij = yj fuumlr j = 1n

BeispielFolge YFolge X

bull Y ist Teilfolge von Xbull Waumlhle (i1i2i3i4) = (2457)

B C A C

A B A C A B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

9DuA - Kapitel 20

Definitionbull Seien X=(x1xm) und Y=(y1yn) zwei Folgen wobei

xi yj isin A fuumlr ein endliches Alphabet A bull Dann heiszligt Y Teilfolge von X wenn es aufsteigend

sortierte Indizes i1in gibt mit xij = yj fuumlr j = 1n

BeispielFolge YFolge X

bull Y ist Teilfolge von Xbull Waumlhle (i1i2i3i4) = (2457)

B C A C

A B A C A B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

10DuA - Kapitel 20

Definitionbull Seien X=(x1xm) und Y=(y1yn) zwei Folgen wobei

xi yj isin A fuumlr ein endliches Alphabet A bull Dann heiszligt Y Teilfolge von X wenn es aufsteigend

sortierte Indizes i1in gibt mit xij = yj fuumlr j = 1n

BeispielFolge YFolge X

bull Y ist Teilfolge von X waumlhle (i1i2i3i4) = (2457)

B C A C

A B A C A B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

11DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z gemeinsame Teilfolge von X und Y wenn

Z Teilfolge sowohl von X als auch von Y ist

BF

F

F

Z

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

12DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z gemeinsame Teilfolge von X und Y wenn

Z Teilfolge sowohl von X als auch von Y ist

BeispielFolge Z

Folge X

Folge Y

bull Z ist gemeinsame Teilfolge von X und Y

A B A C A B C

B C A C

B A C C A B B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

13DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z gemeinsame Teilfolge von X und Y wenn

Z Teilfolge sowohl von X als auch von Y ist

BeispielFolge Z

Folge X

Folge Y

bull Z ist gemeinsame Teilfolge von X und Y

A B A C A B C

B C A C

B A C C A B B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

14DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z gemeinsame Teilfolge von X und Y wenn

Z Teilfolge sowohl von X als auch von Y ist

BeispielFolge Z

Folge X

Folge Y

bull Z ist gemeinsame Teilfolge von X und Y

A B A C A B C

B C A C

B A C C A B B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

15DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z laumlngste gemeinsame Teilfolge von X und

Y wenn Z gemeinsame Teilfolge von X und Y ist und es keine andere gemeinsame Teilfolge von X und Y gibt die groumlszligere Laumlnge als Z besitzt

BF

F

F

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

16DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z laumlngste gemeinsame Teilfolge von X und

Y wenn Z gemeinsame Teilfolge von X und Y ist und es keine andere gemeinsame Teilfolge von X und Y gibt die groumlszligere Laumlnge als Z besitzt

BeispielFolge X

Folge Y

F

A B A C A B C

B A C C A B B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

17DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z laumlngste gemeinsame Teilfolge von X und

Y wenn Z gemeinsame Teilfolge von X und Y ist und es keine andere gemeinsame Teilfolge von X und Y gibt die groumlszligere Laumlnge als Z besitzt

BeispielFolge X

Folge Y

Folge Z1

A B A C A B C

B A C C A B B C

B C A C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

18DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z laumlngste gemeinsame Teilfolge von X und

Y wenn Z gemeinsame Teilfolge von X und Y ist und es keine andere gemeinsame Teilfolge von X und Y gibt die groumlszligere Laumlnge als Z besitzt

BeispielFolge X

Folge Y

Folge Z1 Folge Z2

A B A C A B C

B A C C A B B C

B C A C B A C A C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

19DuA - Kapitel 20

Laumlngste Teilfolgehat Laumlnge 6

Eingabebull Folge X=(x1xm)bull Folge Y=(y1yn)

Ausgabebull Laumlngste gemeinsame Teilfolge Z

(Longest Common Subsequence)

BF

F

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

20DuA - Kapitel 20

Eingabebull Folge X=(x1xm)bull Folge Y=(y1yn)

Ausgabebull Laumlngste gemeinsame Teilfolge Z

(Longest Common Subsequence)

BeispielFolge X

Folge Y

A B C B D A B

B D C A B A

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

21DuA - Kapitel 20

Algorithmusbull Erzeuge alle moumlglichen Teilfolgen von Xbull Teste fuumlr jede Teilfolge von X ob auch Teilfolge von Ybull Merke zu jedem Zeitpunkt bisher laumlngste gemeinsame

Teilfolge

Laufzeitbull 2m moumlgliche Teilfolgenbull Exponentielle Laufzeit

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

22DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

23DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

2 Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

24DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

2 Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

3 Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

25DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

2 Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

3 Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

26DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

27DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

28DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

29DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

30DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

31DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

32DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Tabelle fuumlr die C[i][j] Werte

anlegen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

33DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Erste Spalte der Tabelle

auf 0 setzen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

34DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Erste Reihe der Tabelle

auf 0 setzen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

35DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

36DuA - Kapitel 20

Laumlngenberechnung(Array X Y C i j)1 if xi = yj then C[i][j] larr C[i-1][j-1] +12 else3 if C[i-1][j] ge C[i][j-1] then C[i][j] larr C[i-1][j]4 else C[i][j] larr C[i][j-1]

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

37DuA - Kapitel 20

Laumlngenberechnung(Array X Y C i j)1 if xi = yj then C[i][j] larr C[i-1][j-1] +12 else3 if C[i-1][j] ge C[i][j-1] then C[i][j] larr C[i-1][j]4 else C[i][j] larr C[i][j-1]

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

38DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

39DuA - Kapitel 20

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

40DuA - Kapitel 20

00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

41DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

42DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

43DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

44DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

45DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

46DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

47DuA - Kapitel 20

0 0 0 0 0 0 00 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

48DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

49DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

50DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

51DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

52DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

53DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

54DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

55DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

56DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

57DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

58DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

59DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

60DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

61DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 200000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

62DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

63DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 3000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

64DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

65DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

66DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

67DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

68DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

69DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

70DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

71DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

72DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

73DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

74DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

75DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

76DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

77DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 4: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

DivideampConquerbull Teile Problem in Teilprobleme aufbull Kombiniere optimale Loumlsungen der Teilprobleme zu einer

optimalen Loumlsung fuumlr das Ausgangsproblem

Anwendbarbull Wenn Problem in Teilprobleme zerlegbar ist deren Loumlsungen

zu einer Loumlsung des Gesamtproblems kombinierbar sind

Loumlsung dynamische Programmierungbull Speichern einmal berechneter Loumlsungen in einer Tabelle

SS 2017

20 Dynamische Programmierung

4DuA - Kapitel 20

Typische Anwendung fuumlr dynamisches Programmieren Optimierungsprobleme

Eine optimale Loumlsung fuumlr das Ausgangsproblem setzt sich aus optimalen Loumlsungen fuumlr kleinere Probleme zusammen

SS 2017

Dynamische Programmierung

5DuA - Kapitel 20

Definitionbull Seien X=(x1xm) und Y=(y1yn) zwei Folgen wobei

xi yj isin A fuumlr ein endliches Alphabet A bull Dann heiszligt Y Teilfolge von X wenn es aufsteigend

sortierte Indizes i1in gibt mit xij = yj fuumlr j = 1n

BFF

YWSS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

6DuA - Kapitel 20

Definitionbull Seien X=(x1xm) und Y=(y1yn) zwei Folgen wobei

xi yj isin A fuumlr ein endliches Alphabet A bull Dann heiszligt Y Teilfolge von X wenn es aufsteigend

sortierte Indizes i1in gibt mit xij = yj fuumlr j = 1n

BeispielFolge YFolge X

Y ist Teilfolge von XWaumlhle (i1i2i3i4) = (2457)

B C A C

A B A C A B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

7DuA - Kapitel 20

Definitionbull Seien X=(x1xm) und Y=(y1yn) zwei Folgen wobei

xi yj isin A fuumlr ein endliches Alphabet A bull Dann heiszligt Y Teilfolge von X wenn es aufsteigend

sortierte Indizes i1in gibt mit xij = yj fuumlr j = 1n

BeispielFolge YFolge X

Y ist Teilfolge von XWaumlhle (i1i2i3i4) = (2457)

B C A C

A B A C A B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

8DuA - Kapitel 20

Definitionbull Seien X=(x1xm) und Y=(y1yn) zwei Folgen wobei

xi yj isin A fuumlr ein endliches Alphabet A bull Dann heiszligt Y Teilfolge von X wenn es aufsteigend

sortierte Indizes i1in gibt mit xij = yj fuumlr j = 1n

BeispielFolge YFolge X

bull Y ist Teilfolge von Xbull Waumlhle (i1i2i3i4) = (2457)

B C A C

A B A C A B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

9DuA - Kapitel 20

Definitionbull Seien X=(x1xm) und Y=(y1yn) zwei Folgen wobei

xi yj isin A fuumlr ein endliches Alphabet A bull Dann heiszligt Y Teilfolge von X wenn es aufsteigend

sortierte Indizes i1in gibt mit xij = yj fuumlr j = 1n

BeispielFolge YFolge X

bull Y ist Teilfolge von Xbull Waumlhle (i1i2i3i4) = (2457)

B C A C

A B A C A B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

10DuA - Kapitel 20

Definitionbull Seien X=(x1xm) und Y=(y1yn) zwei Folgen wobei

xi yj isin A fuumlr ein endliches Alphabet A bull Dann heiszligt Y Teilfolge von X wenn es aufsteigend

sortierte Indizes i1in gibt mit xij = yj fuumlr j = 1n

BeispielFolge YFolge X

bull Y ist Teilfolge von X waumlhle (i1i2i3i4) = (2457)

B C A C

A B A C A B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

11DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z gemeinsame Teilfolge von X und Y wenn

Z Teilfolge sowohl von X als auch von Y ist

BF

F

F

Z

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

12DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z gemeinsame Teilfolge von X und Y wenn

Z Teilfolge sowohl von X als auch von Y ist

BeispielFolge Z

Folge X

Folge Y

bull Z ist gemeinsame Teilfolge von X und Y

A B A C A B C

B C A C

B A C C A B B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

13DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z gemeinsame Teilfolge von X und Y wenn

Z Teilfolge sowohl von X als auch von Y ist

BeispielFolge Z

Folge X

Folge Y

bull Z ist gemeinsame Teilfolge von X und Y

A B A C A B C

B C A C

B A C C A B B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

14DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z gemeinsame Teilfolge von X und Y wenn

Z Teilfolge sowohl von X als auch von Y ist

BeispielFolge Z

Folge X

Folge Y

bull Z ist gemeinsame Teilfolge von X und Y

A B A C A B C

B C A C

B A C C A B B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

15DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z laumlngste gemeinsame Teilfolge von X und

Y wenn Z gemeinsame Teilfolge von X und Y ist und es keine andere gemeinsame Teilfolge von X und Y gibt die groumlszligere Laumlnge als Z besitzt

BF

F

F

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

16DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z laumlngste gemeinsame Teilfolge von X und

Y wenn Z gemeinsame Teilfolge von X und Y ist und es keine andere gemeinsame Teilfolge von X und Y gibt die groumlszligere Laumlnge als Z besitzt

BeispielFolge X

Folge Y

F

A B A C A B C

B A C C A B B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

17DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z laumlngste gemeinsame Teilfolge von X und

Y wenn Z gemeinsame Teilfolge von X und Y ist und es keine andere gemeinsame Teilfolge von X und Y gibt die groumlszligere Laumlnge als Z besitzt

BeispielFolge X

Folge Y

Folge Z1

A B A C A B C

B A C C A B B C

B C A C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

18DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z laumlngste gemeinsame Teilfolge von X und

Y wenn Z gemeinsame Teilfolge von X und Y ist und es keine andere gemeinsame Teilfolge von X und Y gibt die groumlszligere Laumlnge als Z besitzt

BeispielFolge X

Folge Y

Folge Z1 Folge Z2

A B A C A B C

B A C C A B B C

B C A C B A C A C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

19DuA - Kapitel 20

Laumlngste Teilfolgehat Laumlnge 6

Eingabebull Folge X=(x1xm)bull Folge Y=(y1yn)

Ausgabebull Laumlngste gemeinsame Teilfolge Z

(Longest Common Subsequence)

BF

F

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

20DuA - Kapitel 20

Eingabebull Folge X=(x1xm)bull Folge Y=(y1yn)

Ausgabebull Laumlngste gemeinsame Teilfolge Z

(Longest Common Subsequence)

BeispielFolge X

Folge Y

A B C B D A B

B D C A B A

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

21DuA - Kapitel 20

Algorithmusbull Erzeuge alle moumlglichen Teilfolgen von Xbull Teste fuumlr jede Teilfolge von X ob auch Teilfolge von Ybull Merke zu jedem Zeitpunkt bisher laumlngste gemeinsame

Teilfolge

Laufzeitbull 2m moumlgliche Teilfolgenbull Exponentielle Laufzeit

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

22DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

23DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

2 Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

24DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

2 Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

3 Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

25DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

2 Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

3 Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

26DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

27DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

28DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

29DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

30DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

31DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

32DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Tabelle fuumlr die C[i][j] Werte

anlegen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

33DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Erste Spalte der Tabelle

auf 0 setzen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

34DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Erste Reihe der Tabelle

auf 0 setzen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

35DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

36DuA - Kapitel 20

Laumlngenberechnung(Array X Y C i j)1 if xi = yj then C[i][j] larr C[i-1][j-1] +12 else3 if C[i-1][j] ge C[i][j-1] then C[i][j] larr C[i-1][j]4 else C[i][j] larr C[i][j-1]

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

37DuA - Kapitel 20

Laumlngenberechnung(Array X Y C i j)1 if xi = yj then C[i][j] larr C[i-1][j-1] +12 else3 if C[i-1][j] ge C[i][j-1] then C[i][j] larr C[i-1][j]4 else C[i][j] larr C[i][j-1]

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

38DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

39DuA - Kapitel 20

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

40DuA - Kapitel 20

00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

41DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

42DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

43DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

44DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

45DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

46DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

47DuA - Kapitel 20

0 0 0 0 0 0 00 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

48DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

49DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

50DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

51DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

52DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

53DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

54DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

55DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

56DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

57DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

58DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

59DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

60DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

61DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 200000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

62DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

63DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 3000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

64DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

65DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

66DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

67DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

68DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

69DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

70DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

71DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

72DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

73DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

74DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

75DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

76DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

77DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 5: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

Typische Anwendung fuumlr dynamisches Programmieren Optimierungsprobleme

Eine optimale Loumlsung fuumlr das Ausgangsproblem setzt sich aus optimalen Loumlsungen fuumlr kleinere Probleme zusammen

SS 2017

Dynamische Programmierung

5DuA - Kapitel 20

Definitionbull Seien X=(x1xm) und Y=(y1yn) zwei Folgen wobei

xi yj isin A fuumlr ein endliches Alphabet A bull Dann heiszligt Y Teilfolge von X wenn es aufsteigend

sortierte Indizes i1in gibt mit xij = yj fuumlr j = 1n

BFF

YWSS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

6DuA - Kapitel 20

Definitionbull Seien X=(x1xm) und Y=(y1yn) zwei Folgen wobei

xi yj isin A fuumlr ein endliches Alphabet A bull Dann heiszligt Y Teilfolge von X wenn es aufsteigend

sortierte Indizes i1in gibt mit xij = yj fuumlr j = 1n

BeispielFolge YFolge X

Y ist Teilfolge von XWaumlhle (i1i2i3i4) = (2457)

B C A C

A B A C A B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

7DuA - Kapitel 20

Definitionbull Seien X=(x1xm) und Y=(y1yn) zwei Folgen wobei

xi yj isin A fuumlr ein endliches Alphabet A bull Dann heiszligt Y Teilfolge von X wenn es aufsteigend

sortierte Indizes i1in gibt mit xij = yj fuumlr j = 1n

BeispielFolge YFolge X

Y ist Teilfolge von XWaumlhle (i1i2i3i4) = (2457)

B C A C

A B A C A B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

8DuA - Kapitel 20

Definitionbull Seien X=(x1xm) und Y=(y1yn) zwei Folgen wobei

xi yj isin A fuumlr ein endliches Alphabet A bull Dann heiszligt Y Teilfolge von X wenn es aufsteigend

sortierte Indizes i1in gibt mit xij = yj fuumlr j = 1n

BeispielFolge YFolge X

bull Y ist Teilfolge von Xbull Waumlhle (i1i2i3i4) = (2457)

B C A C

A B A C A B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

9DuA - Kapitel 20

Definitionbull Seien X=(x1xm) und Y=(y1yn) zwei Folgen wobei

xi yj isin A fuumlr ein endliches Alphabet A bull Dann heiszligt Y Teilfolge von X wenn es aufsteigend

sortierte Indizes i1in gibt mit xij = yj fuumlr j = 1n

BeispielFolge YFolge X

bull Y ist Teilfolge von Xbull Waumlhle (i1i2i3i4) = (2457)

B C A C

A B A C A B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

10DuA - Kapitel 20

Definitionbull Seien X=(x1xm) und Y=(y1yn) zwei Folgen wobei

xi yj isin A fuumlr ein endliches Alphabet A bull Dann heiszligt Y Teilfolge von X wenn es aufsteigend

sortierte Indizes i1in gibt mit xij = yj fuumlr j = 1n

BeispielFolge YFolge X

bull Y ist Teilfolge von X waumlhle (i1i2i3i4) = (2457)

B C A C

A B A C A B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

11DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z gemeinsame Teilfolge von X und Y wenn

Z Teilfolge sowohl von X als auch von Y ist

BF

F

F

Z

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

12DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z gemeinsame Teilfolge von X und Y wenn

Z Teilfolge sowohl von X als auch von Y ist

BeispielFolge Z

Folge X

Folge Y

bull Z ist gemeinsame Teilfolge von X und Y

A B A C A B C

B C A C

B A C C A B B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

13DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z gemeinsame Teilfolge von X und Y wenn

Z Teilfolge sowohl von X als auch von Y ist

BeispielFolge Z

Folge X

Folge Y

bull Z ist gemeinsame Teilfolge von X und Y

A B A C A B C

B C A C

B A C C A B B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

14DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z gemeinsame Teilfolge von X und Y wenn

Z Teilfolge sowohl von X als auch von Y ist

BeispielFolge Z

Folge X

Folge Y

bull Z ist gemeinsame Teilfolge von X und Y

A B A C A B C

B C A C

B A C C A B B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

15DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z laumlngste gemeinsame Teilfolge von X und

Y wenn Z gemeinsame Teilfolge von X und Y ist und es keine andere gemeinsame Teilfolge von X und Y gibt die groumlszligere Laumlnge als Z besitzt

BF

F

F

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

16DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z laumlngste gemeinsame Teilfolge von X und

Y wenn Z gemeinsame Teilfolge von X und Y ist und es keine andere gemeinsame Teilfolge von X und Y gibt die groumlszligere Laumlnge als Z besitzt

BeispielFolge X

Folge Y

F

A B A C A B C

B A C C A B B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

17DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z laumlngste gemeinsame Teilfolge von X und

Y wenn Z gemeinsame Teilfolge von X und Y ist und es keine andere gemeinsame Teilfolge von X und Y gibt die groumlszligere Laumlnge als Z besitzt

BeispielFolge X

Folge Y

Folge Z1

A B A C A B C

B A C C A B B C

B C A C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

18DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z laumlngste gemeinsame Teilfolge von X und

Y wenn Z gemeinsame Teilfolge von X und Y ist und es keine andere gemeinsame Teilfolge von X und Y gibt die groumlszligere Laumlnge als Z besitzt

BeispielFolge X

Folge Y

Folge Z1 Folge Z2

A B A C A B C

B A C C A B B C

B C A C B A C A C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

19DuA - Kapitel 20

Laumlngste Teilfolgehat Laumlnge 6

Eingabebull Folge X=(x1xm)bull Folge Y=(y1yn)

Ausgabebull Laumlngste gemeinsame Teilfolge Z

(Longest Common Subsequence)

BF

F

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

20DuA - Kapitel 20

Eingabebull Folge X=(x1xm)bull Folge Y=(y1yn)

Ausgabebull Laumlngste gemeinsame Teilfolge Z

(Longest Common Subsequence)

BeispielFolge X

Folge Y

A B C B D A B

B D C A B A

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

21DuA - Kapitel 20

Algorithmusbull Erzeuge alle moumlglichen Teilfolgen von Xbull Teste fuumlr jede Teilfolge von X ob auch Teilfolge von Ybull Merke zu jedem Zeitpunkt bisher laumlngste gemeinsame

Teilfolge

Laufzeitbull 2m moumlgliche Teilfolgenbull Exponentielle Laufzeit

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

22DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

23DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

2 Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

24DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

2 Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

3 Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

25DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

2 Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

3 Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

26DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

27DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

28DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

29DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

30DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

31DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

32DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Tabelle fuumlr die C[i][j] Werte

anlegen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

33DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Erste Spalte der Tabelle

auf 0 setzen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

34DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Erste Reihe der Tabelle

auf 0 setzen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

35DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

36DuA - Kapitel 20

Laumlngenberechnung(Array X Y C i j)1 if xi = yj then C[i][j] larr C[i-1][j-1] +12 else3 if C[i-1][j] ge C[i][j-1] then C[i][j] larr C[i-1][j]4 else C[i][j] larr C[i][j-1]

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

37DuA - Kapitel 20

Laumlngenberechnung(Array X Y C i j)1 if xi = yj then C[i][j] larr C[i-1][j-1] +12 else3 if C[i-1][j] ge C[i][j-1] then C[i][j] larr C[i-1][j]4 else C[i][j] larr C[i][j-1]

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

38DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

39DuA - Kapitel 20

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

40DuA - Kapitel 20

00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

41DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

42DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

43DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

44DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

45DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

46DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

47DuA - Kapitel 20

0 0 0 0 0 0 00 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

48DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

49DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

50DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

51DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

52DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

53DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

54DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

55DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

56DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

57DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

58DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

59DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

60DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

61DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 200000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

62DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

63DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 3000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

64DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

65DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

66DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

67DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

68DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

69DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

70DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

71DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

72DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

73DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

74DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

75DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

76DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

77DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 6: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

Definitionbull Seien X=(x1xm) und Y=(y1yn) zwei Folgen wobei

xi yj isin A fuumlr ein endliches Alphabet A bull Dann heiszligt Y Teilfolge von X wenn es aufsteigend

sortierte Indizes i1in gibt mit xij = yj fuumlr j = 1n

BFF

YWSS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

6DuA - Kapitel 20

Definitionbull Seien X=(x1xm) und Y=(y1yn) zwei Folgen wobei

xi yj isin A fuumlr ein endliches Alphabet A bull Dann heiszligt Y Teilfolge von X wenn es aufsteigend

sortierte Indizes i1in gibt mit xij = yj fuumlr j = 1n

BeispielFolge YFolge X

Y ist Teilfolge von XWaumlhle (i1i2i3i4) = (2457)

B C A C

A B A C A B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

7DuA - Kapitel 20

Definitionbull Seien X=(x1xm) und Y=(y1yn) zwei Folgen wobei

xi yj isin A fuumlr ein endliches Alphabet A bull Dann heiszligt Y Teilfolge von X wenn es aufsteigend

sortierte Indizes i1in gibt mit xij = yj fuumlr j = 1n

BeispielFolge YFolge X

Y ist Teilfolge von XWaumlhle (i1i2i3i4) = (2457)

B C A C

A B A C A B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

8DuA - Kapitel 20

Definitionbull Seien X=(x1xm) und Y=(y1yn) zwei Folgen wobei

xi yj isin A fuumlr ein endliches Alphabet A bull Dann heiszligt Y Teilfolge von X wenn es aufsteigend

sortierte Indizes i1in gibt mit xij = yj fuumlr j = 1n

BeispielFolge YFolge X

bull Y ist Teilfolge von Xbull Waumlhle (i1i2i3i4) = (2457)

B C A C

A B A C A B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

9DuA - Kapitel 20

Definitionbull Seien X=(x1xm) und Y=(y1yn) zwei Folgen wobei

xi yj isin A fuumlr ein endliches Alphabet A bull Dann heiszligt Y Teilfolge von X wenn es aufsteigend

sortierte Indizes i1in gibt mit xij = yj fuumlr j = 1n

BeispielFolge YFolge X

bull Y ist Teilfolge von Xbull Waumlhle (i1i2i3i4) = (2457)

B C A C

A B A C A B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

10DuA - Kapitel 20

Definitionbull Seien X=(x1xm) und Y=(y1yn) zwei Folgen wobei

xi yj isin A fuumlr ein endliches Alphabet A bull Dann heiszligt Y Teilfolge von X wenn es aufsteigend

sortierte Indizes i1in gibt mit xij = yj fuumlr j = 1n

BeispielFolge YFolge X

bull Y ist Teilfolge von X waumlhle (i1i2i3i4) = (2457)

B C A C

A B A C A B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

11DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z gemeinsame Teilfolge von X und Y wenn

Z Teilfolge sowohl von X als auch von Y ist

BF

F

F

Z

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

12DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z gemeinsame Teilfolge von X und Y wenn

Z Teilfolge sowohl von X als auch von Y ist

BeispielFolge Z

Folge X

Folge Y

bull Z ist gemeinsame Teilfolge von X und Y

A B A C A B C

B C A C

B A C C A B B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

13DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z gemeinsame Teilfolge von X und Y wenn

Z Teilfolge sowohl von X als auch von Y ist

BeispielFolge Z

Folge X

Folge Y

bull Z ist gemeinsame Teilfolge von X und Y

A B A C A B C

B C A C

B A C C A B B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

14DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z gemeinsame Teilfolge von X und Y wenn

Z Teilfolge sowohl von X als auch von Y ist

BeispielFolge Z

Folge X

Folge Y

bull Z ist gemeinsame Teilfolge von X und Y

A B A C A B C

B C A C

B A C C A B B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

15DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z laumlngste gemeinsame Teilfolge von X und

Y wenn Z gemeinsame Teilfolge von X und Y ist und es keine andere gemeinsame Teilfolge von X und Y gibt die groumlszligere Laumlnge als Z besitzt

BF

F

F

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

16DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z laumlngste gemeinsame Teilfolge von X und

Y wenn Z gemeinsame Teilfolge von X und Y ist und es keine andere gemeinsame Teilfolge von X und Y gibt die groumlszligere Laumlnge als Z besitzt

BeispielFolge X

Folge Y

F

A B A C A B C

B A C C A B B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

17DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z laumlngste gemeinsame Teilfolge von X und

Y wenn Z gemeinsame Teilfolge von X und Y ist und es keine andere gemeinsame Teilfolge von X und Y gibt die groumlszligere Laumlnge als Z besitzt

BeispielFolge X

Folge Y

Folge Z1

A B A C A B C

B A C C A B B C

B C A C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

18DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z laumlngste gemeinsame Teilfolge von X und

Y wenn Z gemeinsame Teilfolge von X und Y ist und es keine andere gemeinsame Teilfolge von X und Y gibt die groumlszligere Laumlnge als Z besitzt

BeispielFolge X

Folge Y

Folge Z1 Folge Z2

A B A C A B C

B A C C A B B C

B C A C B A C A C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

19DuA - Kapitel 20

Laumlngste Teilfolgehat Laumlnge 6

Eingabebull Folge X=(x1xm)bull Folge Y=(y1yn)

Ausgabebull Laumlngste gemeinsame Teilfolge Z

(Longest Common Subsequence)

BF

F

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

20DuA - Kapitel 20

Eingabebull Folge X=(x1xm)bull Folge Y=(y1yn)

Ausgabebull Laumlngste gemeinsame Teilfolge Z

(Longest Common Subsequence)

BeispielFolge X

Folge Y

A B C B D A B

B D C A B A

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

21DuA - Kapitel 20

Algorithmusbull Erzeuge alle moumlglichen Teilfolgen von Xbull Teste fuumlr jede Teilfolge von X ob auch Teilfolge von Ybull Merke zu jedem Zeitpunkt bisher laumlngste gemeinsame

Teilfolge

Laufzeitbull 2m moumlgliche Teilfolgenbull Exponentielle Laufzeit

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

22DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

23DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

2 Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

24DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

2 Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

3 Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

25DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

2 Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

3 Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

26DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

27DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

28DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

29DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

30DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

31DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

32DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Tabelle fuumlr die C[i][j] Werte

anlegen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

33DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Erste Spalte der Tabelle

auf 0 setzen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

34DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Erste Reihe der Tabelle

auf 0 setzen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

35DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

36DuA - Kapitel 20

Laumlngenberechnung(Array X Y C i j)1 if xi = yj then C[i][j] larr C[i-1][j-1] +12 else3 if C[i-1][j] ge C[i][j-1] then C[i][j] larr C[i-1][j]4 else C[i][j] larr C[i][j-1]

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

37DuA - Kapitel 20

Laumlngenberechnung(Array X Y C i j)1 if xi = yj then C[i][j] larr C[i-1][j-1] +12 else3 if C[i-1][j] ge C[i][j-1] then C[i][j] larr C[i-1][j]4 else C[i][j] larr C[i][j-1]

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

38DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

39DuA - Kapitel 20

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

40DuA - Kapitel 20

00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

41DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

42DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

43DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

44DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

45DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

46DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

47DuA - Kapitel 20

0 0 0 0 0 0 00 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

48DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

49DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

50DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

51DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

52DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

53DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

54DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

55DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

56DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

57DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

58DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

59DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

60DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

61DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 200000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

62DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

63DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 3000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

64DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

65DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

66DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

67DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

68DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

69DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

70DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

71DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

72DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

73DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

74DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

75DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

76DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

77DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 7: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

Definitionbull Seien X=(x1xm) und Y=(y1yn) zwei Folgen wobei

xi yj isin A fuumlr ein endliches Alphabet A bull Dann heiszligt Y Teilfolge von X wenn es aufsteigend

sortierte Indizes i1in gibt mit xij = yj fuumlr j = 1n

BeispielFolge YFolge X

Y ist Teilfolge von XWaumlhle (i1i2i3i4) = (2457)

B C A C

A B A C A B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

7DuA - Kapitel 20

Definitionbull Seien X=(x1xm) und Y=(y1yn) zwei Folgen wobei

xi yj isin A fuumlr ein endliches Alphabet A bull Dann heiszligt Y Teilfolge von X wenn es aufsteigend

sortierte Indizes i1in gibt mit xij = yj fuumlr j = 1n

BeispielFolge YFolge X

Y ist Teilfolge von XWaumlhle (i1i2i3i4) = (2457)

B C A C

A B A C A B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

8DuA - Kapitel 20

Definitionbull Seien X=(x1xm) und Y=(y1yn) zwei Folgen wobei

xi yj isin A fuumlr ein endliches Alphabet A bull Dann heiszligt Y Teilfolge von X wenn es aufsteigend

sortierte Indizes i1in gibt mit xij = yj fuumlr j = 1n

BeispielFolge YFolge X

bull Y ist Teilfolge von Xbull Waumlhle (i1i2i3i4) = (2457)

B C A C

A B A C A B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

9DuA - Kapitel 20

Definitionbull Seien X=(x1xm) und Y=(y1yn) zwei Folgen wobei

xi yj isin A fuumlr ein endliches Alphabet A bull Dann heiszligt Y Teilfolge von X wenn es aufsteigend

sortierte Indizes i1in gibt mit xij = yj fuumlr j = 1n

BeispielFolge YFolge X

bull Y ist Teilfolge von Xbull Waumlhle (i1i2i3i4) = (2457)

B C A C

A B A C A B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

10DuA - Kapitel 20

Definitionbull Seien X=(x1xm) und Y=(y1yn) zwei Folgen wobei

xi yj isin A fuumlr ein endliches Alphabet A bull Dann heiszligt Y Teilfolge von X wenn es aufsteigend

sortierte Indizes i1in gibt mit xij = yj fuumlr j = 1n

BeispielFolge YFolge X

bull Y ist Teilfolge von X waumlhle (i1i2i3i4) = (2457)

B C A C

A B A C A B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

11DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z gemeinsame Teilfolge von X und Y wenn

Z Teilfolge sowohl von X als auch von Y ist

BF

F

F

Z

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

12DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z gemeinsame Teilfolge von X und Y wenn

Z Teilfolge sowohl von X als auch von Y ist

BeispielFolge Z

Folge X

Folge Y

bull Z ist gemeinsame Teilfolge von X und Y

A B A C A B C

B C A C

B A C C A B B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

13DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z gemeinsame Teilfolge von X und Y wenn

Z Teilfolge sowohl von X als auch von Y ist

BeispielFolge Z

Folge X

Folge Y

bull Z ist gemeinsame Teilfolge von X und Y

A B A C A B C

B C A C

B A C C A B B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

14DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z gemeinsame Teilfolge von X und Y wenn

Z Teilfolge sowohl von X als auch von Y ist

BeispielFolge Z

Folge X

Folge Y

bull Z ist gemeinsame Teilfolge von X und Y

A B A C A B C

B C A C

B A C C A B B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

15DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z laumlngste gemeinsame Teilfolge von X und

Y wenn Z gemeinsame Teilfolge von X und Y ist und es keine andere gemeinsame Teilfolge von X und Y gibt die groumlszligere Laumlnge als Z besitzt

BF

F

F

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

16DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z laumlngste gemeinsame Teilfolge von X und

Y wenn Z gemeinsame Teilfolge von X und Y ist und es keine andere gemeinsame Teilfolge von X und Y gibt die groumlszligere Laumlnge als Z besitzt

BeispielFolge X

Folge Y

F

A B A C A B C

B A C C A B B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

17DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z laumlngste gemeinsame Teilfolge von X und

Y wenn Z gemeinsame Teilfolge von X und Y ist und es keine andere gemeinsame Teilfolge von X und Y gibt die groumlszligere Laumlnge als Z besitzt

BeispielFolge X

Folge Y

Folge Z1

A B A C A B C

B A C C A B B C

B C A C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

18DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z laumlngste gemeinsame Teilfolge von X und

Y wenn Z gemeinsame Teilfolge von X und Y ist und es keine andere gemeinsame Teilfolge von X und Y gibt die groumlszligere Laumlnge als Z besitzt

BeispielFolge X

Folge Y

Folge Z1 Folge Z2

A B A C A B C

B A C C A B B C

B C A C B A C A C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

19DuA - Kapitel 20

Laumlngste Teilfolgehat Laumlnge 6

Eingabebull Folge X=(x1xm)bull Folge Y=(y1yn)

Ausgabebull Laumlngste gemeinsame Teilfolge Z

(Longest Common Subsequence)

BF

F

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

20DuA - Kapitel 20

Eingabebull Folge X=(x1xm)bull Folge Y=(y1yn)

Ausgabebull Laumlngste gemeinsame Teilfolge Z

(Longest Common Subsequence)

BeispielFolge X

Folge Y

A B C B D A B

B D C A B A

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

21DuA - Kapitel 20

Algorithmusbull Erzeuge alle moumlglichen Teilfolgen von Xbull Teste fuumlr jede Teilfolge von X ob auch Teilfolge von Ybull Merke zu jedem Zeitpunkt bisher laumlngste gemeinsame

Teilfolge

Laufzeitbull 2m moumlgliche Teilfolgenbull Exponentielle Laufzeit

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

22DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

23DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

2 Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

24DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

2 Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

3 Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

25DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

2 Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

3 Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

26DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

27DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

28DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

29DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

30DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

31DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

32DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Tabelle fuumlr die C[i][j] Werte

anlegen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

33DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Erste Spalte der Tabelle

auf 0 setzen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

34DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Erste Reihe der Tabelle

auf 0 setzen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

35DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

36DuA - Kapitel 20

Laumlngenberechnung(Array X Y C i j)1 if xi = yj then C[i][j] larr C[i-1][j-1] +12 else3 if C[i-1][j] ge C[i][j-1] then C[i][j] larr C[i-1][j]4 else C[i][j] larr C[i][j-1]

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

37DuA - Kapitel 20

Laumlngenberechnung(Array X Y C i j)1 if xi = yj then C[i][j] larr C[i-1][j-1] +12 else3 if C[i-1][j] ge C[i][j-1] then C[i][j] larr C[i-1][j]4 else C[i][j] larr C[i][j-1]

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

38DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

39DuA - Kapitel 20

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

40DuA - Kapitel 20

00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

41DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

42DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

43DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

44DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

45DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

46DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

47DuA - Kapitel 20

0 0 0 0 0 0 00 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

48DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

49DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

50DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

51DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

52DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

53DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

54DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

55DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

56DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

57DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

58DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

59DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

60DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

61DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 200000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

62DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

63DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 3000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

64DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

65DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

66DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

67DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

68DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

69DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

70DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

71DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

72DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

73DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

74DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

75DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

76DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

77DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 8: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

Definitionbull Seien X=(x1xm) und Y=(y1yn) zwei Folgen wobei

xi yj isin A fuumlr ein endliches Alphabet A bull Dann heiszligt Y Teilfolge von X wenn es aufsteigend

sortierte Indizes i1in gibt mit xij = yj fuumlr j = 1n

BeispielFolge YFolge X

Y ist Teilfolge von XWaumlhle (i1i2i3i4) = (2457)

B C A C

A B A C A B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

8DuA - Kapitel 20

Definitionbull Seien X=(x1xm) und Y=(y1yn) zwei Folgen wobei

xi yj isin A fuumlr ein endliches Alphabet A bull Dann heiszligt Y Teilfolge von X wenn es aufsteigend

sortierte Indizes i1in gibt mit xij = yj fuumlr j = 1n

BeispielFolge YFolge X

bull Y ist Teilfolge von Xbull Waumlhle (i1i2i3i4) = (2457)

B C A C

A B A C A B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

9DuA - Kapitel 20

Definitionbull Seien X=(x1xm) und Y=(y1yn) zwei Folgen wobei

xi yj isin A fuumlr ein endliches Alphabet A bull Dann heiszligt Y Teilfolge von X wenn es aufsteigend

sortierte Indizes i1in gibt mit xij = yj fuumlr j = 1n

BeispielFolge YFolge X

bull Y ist Teilfolge von Xbull Waumlhle (i1i2i3i4) = (2457)

B C A C

A B A C A B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

10DuA - Kapitel 20

Definitionbull Seien X=(x1xm) und Y=(y1yn) zwei Folgen wobei

xi yj isin A fuumlr ein endliches Alphabet A bull Dann heiszligt Y Teilfolge von X wenn es aufsteigend

sortierte Indizes i1in gibt mit xij = yj fuumlr j = 1n

BeispielFolge YFolge X

bull Y ist Teilfolge von X waumlhle (i1i2i3i4) = (2457)

B C A C

A B A C A B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

11DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z gemeinsame Teilfolge von X und Y wenn

Z Teilfolge sowohl von X als auch von Y ist

BF

F

F

Z

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

12DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z gemeinsame Teilfolge von X und Y wenn

Z Teilfolge sowohl von X als auch von Y ist

BeispielFolge Z

Folge X

Folge Y

bull Z ist gemeinsame Teilfolge von X und Y

A B A C A B C

B C A C

B A C C A B B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

13DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z gemeinsame Teilfolge von X und Y wenn

Z Teilfolge sowohl von X als auch von Y ist

BeispielFolge Z

Folge X

Folge Y

bull Z ist gemeinsame Teilfolge von X und Y

A B A C A B C

B C A C

B A C C A B B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

14DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z gemeinsame Teilfolge von X und Y wenn

Z Teilfolge sowohl von X als auch von Y ist

BeispielFolge Z

Folge X

Folge Y

bull Z ist gemeinsame Teilfolge von X und Y

A B A C A B C

B C A C

B A C C A B B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

15DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z laumlngste gemeinsame Teilfolge von X und

Y wenn Z gemeinsame Teilfolge von X und Y ist und es keine andere gemeinsame Teilfolge von X und Y gibt die groumlszligere Laumlnge als Z besitzt

BF

F

F

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

16DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z laumlngste gemeinsame Teilfolge von X und

Y wenn Z gemeinsame Teilfolge von X und Y ist und es keine andere gemeinsame Teilfolge von X und Y gibt die groumlszligere Laumlnge als Z besitzt

BeispielFolge X

Folge Y

F

A B A C A B C

B A C C A B B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

17DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z laumlngste gemeinsame Teilfolge von X und

Y wenn Z gemeinsame Teilfolge von X und Y ist und es keine andere gemeinsame Teilfolge von X und Y gibt die groumlszligere Laumlnge als Z besitzt

BeispielFolge X

Folge Y

Folge Z1

A B A C A B C

B A C C A B B C

B C A C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

18DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z laumlngste gemeinsame Teilfolge von X und

Y wenn Z gemeinsame Teilfolge von X und Y ist und es keine andere gemeinsame Teilfolge von X und Y gibt die groumlszligere Laumlnge als Z besitzt

BeispielFolge X

Folge Y

Folge Z1 Folge Z2

A B A C A B C

B A C C A B B C

B C A C B A C A C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

19DuA - Kapitel 20

Laumlngste Teilfolgehat Laumlnge 6

Eingabebull Folge X=(x1xm)bull Folge Y=(y1yn)

Ausgabebull Laumlngste gemeinsame Teilfolge Z

(Longest Common Subsequence)

BF

F

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

20DuA - Kapitel 20

Eingabebull Folge X=(x1xm)bull Folge Y=(y1yn)

Ausgabebull Laumlngste gemeinsame Teilfolge Z

(Longest Common Subsequence)

BeispielFolge X

Folge Y

A B C B D A B

B D C A B A

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

21DuA - Kapitel 20

Algorithmusbull Erzeuge alle moumlglichen Teilfolgen von Xbull Teste fuumlr jede Teilfolge von X ob auch Teilfolge von Ybull Merke zu jedem Zeitpunkt bisher laumlngste gemeinsame

Teilfolge

Laufzeitbull 2m moumlgliche Teilfolgenbull Exponentielle Laufzeit

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

22DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

23DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

2 Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

24DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

2 Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

3 Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

25DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

2 Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

3 Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

26DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

27DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

28DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

29DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

30DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

31DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

32DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Tabelle fuumlr die C[i][j] Werte

anlegen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

33DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Erste Spalte der Tabelle

auf 0 setzen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

34DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Erste Reihe der Tabelle

auf 0 setzen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

35DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

36DuA - Kapitel 20

Laumlngenberechnung(Array X Y C i j)1 if xi = yj then C[i][j] larr C[i-1][j-1] +12 else3 if C[i-1][j] ge C[i][j-1] then C[i][j] larr C[i-1][j]4 else C[i][j] larr C[i][j-1]

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

37DuA - Kapitel 20

Laumlngenberechnung(Array X Y C i j)1 if xi = yj then C[i][j] larr C[i-1][j-1] +12 else3 if C[i-1][j] ge C[i][j-1] then C[i][j] larr C[i-1][j]4 else C[i][j] larr C[i][j-1]

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

38DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

39DuA - Kapitel 20

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

40DuA - Kapitel 20

00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

41DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

42DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

43DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

44DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

45DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

46DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

47DuA - Kapitel 20

0 0 0 0 0 0 00 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

48DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

49DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

50DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

51DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

52DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

53DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

54DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

55DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

56DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

57DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

58DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

59DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

60DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

61DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 200000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

62DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

63DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 3000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

64DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

65DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

66DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

67DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

68DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

69DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

70DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

71DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

72DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

73DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

74DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

75DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

76DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

77DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 9: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

Definitionbull Seien X=(x1xm) und Y=(y1yn) zwei Folgen wobei

xi yj isin A fuumlr ein endliches Alphabet A bull Dann heiszligt Y Teilfolge von X wenn es aufsteigend

sortierte Indizes i1in gibt mit xij = yj fuumlr j = 1n

BeispielFolge YFolge X

bull Y ist Teilfolge von Xbull Waumlhle (i1i2i3i4) = (2457)

B C A C

A B A C A B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

9DuA - Kapitel 20

Definitionbull Seien X=(x1xm) und Y=(y1yn) zwei Folgen wobei

xi yj isin A fuumlr ein endliches Alphabet A bull Dann heiszligt Y Teilfolge von X wenn es aufsteigend

sortierte Indizes i1in gibt mit xij = yj fuumlr j = 1n

BeispielFolge YFolge X

bull Y ist Teilfolge von Xbull Waumlhle (i1i2i3i4) = (2457)

B C A C

A B A C A B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

10DuA - Kapitel 20

Definitionbull Seien X=(x1xm) und Y=(y1yn) zwei Folgen wobei

xi yj isin A fuumlr ein endliches Alphabet A bull Dann heiszligt Y Teilfolge von X wenn es aufsteigend

sortierte Indizes i1in gibt mit xij = yj fuumlr j = 1n

BeispielFolge YFolge X

bull Y ist Teilfolge von X waumlhle (i1i2i3i4) = (2457)

B C A C

A B A C A B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

11DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z gemeinsame Teilfolge von X und Y wenn

Z Teilfolge sowohl von X als auch von Y ist

BF

F

F

Z

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

12DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z gemeinsame Teilfolge von X und Y wenn

Z Teilfolge sowohl von X als auch von Y ist

BeispielFolge Z

Folge X

Folge Y

bull Z ist gemeinsame Teilfolge von X und Y

A B A C A B C

B C A C

B A C C A B B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

13DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z gemeinsame Teilfolge von X und Y wenn

Z Teilfolge sowohl von X als auch von Y ist

BeispielFolge Z

Folge X

Folge Y

bull Z ist gemeinsame Teilfolge von X und Y

A B A C A B C

B C A C

B A C C A B B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

14DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z gemeinsame Teilfolge von X und Y wenn

Z Teilfolge sowohl von X als auch von Y ist

BeispielFolge Z

Folge X

Folge Y

bull Z ist gemeinsame Teilfolge von X und Y

A B A C A B C

B C A C

B A C C A B B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

15DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z laumlngste gemeinsame Teilfolge von X und

Y wenn Z gemeinsame Teilfolge von X und Y ist und es keine andere gemeinsame Teilfolge von X und Y gibt die groumlszligere Laumlnge als Z besitzt

BF

F

F

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

16DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z laumlngste gemeinsame Teilfolge von X und

Y wenn Z gemeinsame Teilfolge von X und Y ist und es keine andere gemeinsame Teilfolge von X und Y gibt die groumlszligere Laumlnge als Z besitzt

BeispielFolge X

Folge Y

F

A B A C A B C

B A C C A B B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

17DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z laumlngste gemeinsame Teilfolge von X und

Y wenn Z gemeinsame Teilfolge von X und Y ist und es keine andere gemeinsame Teilfolge von X und Y gibt die groumlszligere Laumlnge als Z besitzt

BeispielFolge X

Folge Y

Folge Z1

A B A C A B C

B A C C A B B C

B C A C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

18DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z laumlngste gemeinsame Teilfolge von X und

Y wenn Z gemeinsame Teilfolge von X und Y ist und es keine andere gemeinsame Teilfolge von X und Y gibt die groumlszligere Laumlnge als Z besitzt

BeispielFolge X

Folge Y

Folge Z1 Folge Z2

A B A C A B C

B A C C A B B C

B C A C B A C A C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

19DuA - Kapitel 20

Laumlngste Teilfolgehat Laumlnge 6

Eingabebull Folge X=(x1xm)bull Folge Y=(y1yn)

Ausgabebull Laumlngste gemeinsame Teilfolge Z

(Longest Common Subsequence)

BF

F

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

20DuA - Kapitel 20

Eingabebull Folge X=(x1xm)bull Folge Y=(y1yn)

Ausgabebull Laumlngste gemeinsame Teilfolge Z

(Longest Common Subsequence)

BeispielFolge X

Folge Y

A B C B D A B

B D C A B A

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

21DuA - Kapitel 20

Algorithmusbull Erzeuge alle moumlglichen Teilfolgen von Xbull Teste fuumlr jede Teilfolge von X ob auch Teilfolge von Ybull Merke zu jedem Zeitpunkt bisher laumlngste gemeinsame

Teilfolge

Laufzeitbull 2m moumlgliche Teilfolgenbull Exponentielle Laufzeit

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

22DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

23DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

2 Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

24DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

2 Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

3 Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

25DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

2 Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

3 Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

26DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

27DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

28DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

29DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

30DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

31DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

32DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Tabelle fuumlr die C[i][j] Werte

anlegen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

33DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Erste Spalte der Tabelle

auf 0 setzen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

34DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Erste Reihe der Tabelle

auf 0 setzen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

35DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

36DuA - Kapitel 20

Laumlngenberechnung(Array X Y C i j)1 if xi = yj then C[i][j] larr C[i-1][j-1] +12 else3 if C[i-1][j] ge C[i][j-1] then C[i][j] larr C[i-1][j]4 else C[i][j] larr C[i][j-1]

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

37DuA - Kapitel 20

Laumlngenberechnung(Array X Y C i j)1 if xi = yj then C[i][j] larr C[i-1][j-1] +12 else3 if C[i-1][j] ge C[i][j-1] then C[i][j] larr C[i-1][j]4 else C[i][j] larr C[i][j-1]

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

38DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

39DuA - Kapitel 20

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

40DuA - Kapitel 20

00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

41DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

42DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

43DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

44DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

45DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

46DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

47DuA - Kapitel 20

0 0 0 0 0 0 00 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

48DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

49DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

50DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

51DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

52DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

53DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

54DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

55DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

56DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

57DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

58DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

59DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

60DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

61DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 200000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

62DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

63DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 3000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

64DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

65DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

66DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

67DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

68DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

69DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

70DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

71DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

72DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

73DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

74DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

75DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

76DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

77DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 10: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

Definitionbull Seien X=(x1xm) und Y=(y1yn) zwei Folgen wobei

xi yj isin A fuumlr ein endliches Alphabet A bull Dann heiszligt Y Teilfolge von X wenn es aufsteigend

sortierte Indizes i1in gibt mit xij = yj fuumlr j = 1n

BeispielFolge YFolge X

bull Y ist Teilfolge von Xbull Waumlhle (i1i2i3i4) = (2457)

B C A C

A B A C A B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

10DuA - Kapitel 20

Definitionbull Seien X=(x1xm) und Y=(y1yn) zwei Folgen wobei

xi yj isin A fuumlr ein endliches Alphabet A bull Dann heiszligt Y Teilfolge von X wenn es aufsteigend

sortierte Indizes i1in gibt mit xij = yj fuumlr j = 1n

BeispielFolge YFolge X

bull Y ist Teilfolge von X waumlhle (i1i2i3i4) = (2457)

B C A C

A B A C A B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

11DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z gemeinsame Teilfolge von X und Y wenn

Z Teilfolge sowohl von X als auch von Y ist

BF

F

F

Z

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

12DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z gemeinsame Teilfolge von X und Y wenn

Z Teilfolge sowohl von X als auch von Y ist

BeispielFolge Z

Folge X

Folge Y

bull Z ist gemeinsame Teilfolge von X und Y

A B A C A B C

B C A C

B A C C A B B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

13DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z gemeinsame Teilfolge von X und Y wenn

Z Teilfolge sowohl von X als auch von Y ist

BeispielFolge Z

Folge X

Folge Y

bull Z ist gemeinsame Teilfolge von X und Y

A B A C A B C

B C A C

B A C C A B B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

14DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z gemeinsame Teilfolge von X und Y wenn

Z Teilfolge sowohl von X als auch von Y ist

BeispielFolge Z

Folge X

Folge Y

bull Z ist gemeinsame Teilfolge von X und Y

A B A C A B C

B C A C

B A C C A B B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

15DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z laumlngste gemeinsame Teilfolge von X und

Y wenn Z gemeinsame Teilfolge von X und Y ist und es keine andere gemeinsame Teilfolge von X und Y gibt die groumlszligere Laumlnge als Z besitzt

BF

F

F

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

16DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z laumlngste gemeinsame Teilfolge von X und

Y wenn Z gemeinsame Teilfolge von X und Y ist und es keine andere gemeinsame Teilfolge von X und Y gibt die groumlszligere Laumlnge als Z besitzt

BeispielFolge X

Folge Y

F

A B A C A B C

B A C C A B B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

17DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z laumlngste gemeinsame Teilfolge von X und

Y wenn Z gemeinsame Teilfolge von X und Y ist und es keine andere gemeinsame Teilfolge von X und Y gibt die groumlszligere Laumlnge als Z besitzt

BeispielFolge X

Folge Y

Folge Z1

A B A C A B C

B A C C A B B C

B C A C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

18DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z laumlngste gemeinsame Teilfolge von X und

Y wenn Z gemeinsame Teilfolge von X und Y ist und es keine andere gemeinsame Teilfolge von X und Y gibt die groumlszligere Laumlnge als Z besitzt

BeispielFolge X

Folge Y

Folge Z1 Folge Z2

A B A C A B C

B A C C A B B C

B C A C B A C A C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

19DuA - Kapitel 20

Laumlngste Teilfolgehat Laumlnge 6

Eingabebull Folge X=(x1xm)bull Folge Y=(y1yn)

Ausgabebull Laumlngste gemeinsame Teilfolge Z

(Longest Common Subsequence)

BF

F

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

20DuA - Kapitel 20

Eingabebull Folge X=(x1xm)bull Folge Y=(y1yn)

Ausgabebull Laumlngste gemeinsame Teilfolge Z

(Longest Common Subsequence)

BeispielFolge X

Folge Y

A B C B D A B

B D C A B A

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

21DuA - Kapitel 20

Algorithmusbull Erzeuge alle moumlglichen Teilfolgen von Xbull Teste fuumlr jede Teilfolge von X ob auch Teilfolge von Ybull Merke zu jedem Zeitpunkt bisher laumlngste gemeinsame

Teilfolge

Laufzeitbull 2m moumlgliche Teilfolgenbull Exponentielle Laufzeit

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

22DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

23DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

2 Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

24DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

2 Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

3 Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

25DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

2 Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

3 Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

26DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

27DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

28DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

29DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

30DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

31DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

32DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Tabelle fuumlr die C[i][j] Werte

anlegen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

33DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Erste Spalte der Tabelle

auf 0 setzen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

34DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Erste Reihe der Tabelle

auf 0 setzen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

35DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

36DuA - Kapitel 20

Laumlngenberechnung(Array X Y C i j)1 if xi = yj then C[i][j] larr C[i-1][j-1] +12 else3 if C[i-1][j] ge C[i][j-1] then C[i][j] larr C[i-1][j]4 else C[i][j] larr C[i][j-1]

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

37DuA - Kapitel 20

Laumlngenberechnung(Array X Y C i j)1 if xi = yj then C[i][j] larr C[i-1][j-1] +12 else3 if C[i-1][j] ge C[i][j-1] then C[i][j] larr C[i-1][j]4 else C[i][j] larr C[i][j-1]

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

38DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

39DuA - Kapitel 20

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

40DuA - Kapitel 20

00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

41DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

42DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

43DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

44DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

45DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

46DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

47DuA - Kapitel 20

0 0 0 0 0 0 00 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

48DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

49DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

50DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

51DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

52DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

53DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

54DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

55DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

56DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

57DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

58DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

59DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

60DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

61DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 200000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

62DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

63DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 3000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

64DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

65DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

66DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

67DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

68DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

69DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

70DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

71DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

72DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

73DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

74DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

75DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

76DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

77DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 11: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

Definitionbull Seien X=(x1xm) und Y=(y1yn) zwei Folgen wobei

xi yj isin A fuumlr ein endliches Alphabet A bull Dann heiszligt Y Teilfolge von X wenn es aufsteigend

sortierte Indizes i1in gibt mit xij = yj fuumlr j = 1n

BeispielFolge YFolge X

bull Y ist Teilfolge von X waumlhle (i1i2i3i4) = (2457)

B C A C

A B A C A B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

11DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z gemeinsame Teilfolge von X und Y wenn

Z Teilfolge sowohl von X als auch von Y ist

BF

F

F

Z

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

12DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z gemeinsame Teilfolge von X und Y wenn

Z Teilfolge sowohl von X als auch von Y ist

BeispielFolge Z

Folge X

Folge Y

bull Z ist gemeinsame Teilfolge von X und Y

A B A C A B C

B C A C

B A C C A B B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

13DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z gemeinsame Teilfolge von X und Y wenn

Z Teilfolge sowohl von X als auch von Y ist

BeispielFolge Z

Folge X

Folge Y

bull Z ist gemeinsame Teilfolge von X und Y

A B A C A B C

B C A C

B A C C A B B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

14DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z gemeinsame Teilfolge von X und Y wenn

Z Teilfolge sowohl von X als auch von Y ist

BeispielFolge Z

Folge X

Folge Y

bull Z ist gemeinsame Teilfolge von X und Y

A B A C A B C

B C A C

B A C C A B B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

15DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z laumlngste gemeinsame Teilfolge von X und

Y wenn Z gemeinsame Teilfolge von X und Y ist und es keine andere gemeinsame Teilfolge von X und Y gibt die groumlszligere Laumlnge als Z besitzt

BF

F

F

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

16DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z laumlngste gemeinsame Teilfolge von X und

Y wenn Z gemeinsame Teilfolge von X und Y ist und es keine andere gemeinsame Teilfolge von X und Y gibt die groumlszligere Laumlnge als Z besitzt

BeispielFolge X

Folge Y

F

A B A C A B C

B A C C A B B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

17DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z laumlngste gemeinsame Teilfolge von X und

Y wenn Z gemeinsame Teilfolge von X und Y ist und es keine andere gemeinsame Teilfolge von X und Y gibt die groumlszligere Laumlnge als Z besitzt

BeispielFolge X

Folge Y

Folge Z1

A B A C A B C

B A C C A B B C

B C A C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

18DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z laumlngste gemeinsame Teilfolge von X und

Y wenn Z gemeinsame Teilfolge von X und Y ist und es keine andere gemeinsame Teilfolge von X und Y gibt die groumlszligere Laumlnge als Z besitzt

BeispielFolge X

Folge Y

Folge Z1 Folge Z2

A B A C A B C

B A C C A B B C

B C A C B A C A C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

19DuA - Kapitel 20

Laumlngste Teilfolgehat Laumlnge 6

Eingabebull Folge X=(x1xm)bull Folge Y=(y1yn)

Ausgabebull Laumlngste gemeinsame Teilfolge Z

(Longest Common Subsequence)

BF

F

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

20DuA - Kapitel 20

Eingabebull Folge X=(x1xm)bull Folge Y=(y1yn)

Ausgabebull Laumlngste gemeinsame Teilfolge Z

(Longest Common Subsequence)

BeispielFolge X

Folge Y

A B C B D A B

B D C A B A

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

21DuA - Kapitel 20

Algorithmusbull Erzeuge alle moumlglichen Teilfolgen von Xbull Teste fuumlr jede Teilfolge von X ob auch Teilfolge von Ybull Merke zu jedem Zeitpunkt bisher laumlngste gemeinsame

Teilfolge

Laufzeitbull 2m moumlgliche Teilfolgenbull Exponentielle Laufzeit

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

22DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

23DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

2 Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

24DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

2 Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

3 Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

25DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

2 Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

3 Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

26DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

27DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

28DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

29DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

30DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

31DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

32DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Tabelle fuumlr die C[i][j] Werte

anlegen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

33DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Erste Spalte der Tabelle

auf 0 setzen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

34DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Erste Reihe der Tabelle

auf 0 setzen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

35DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

36DuA - Kapitel 20

Laumlngenberechnung(Array X Y C i j)1 if xi = yj then C[i][j] larr C[i-1][j-1] +12 else3 if C[i-1][j] ge C[i][j-1] then C[i][j] larr C[i-1][j]4 else C[i][j] larr C[i][j-1]

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

37DuA - Kapitel 20

Laumlngenberechnung(Array X Y C i j)1 if xi = yj then C[i][j] larr C[i-1][j-1] +12 else3 if C[i-1][j] ge C[i][j-1] then C[i][j] larr C[i-1][j]4 else C[i][j] larr C[i][j-1]

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

38DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

39DuA - Kapitel 20

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

40DuA - Kapitel 20

00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

41DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

42DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

43DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

44DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

45DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

46DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

47DuA - Kapitel 20

0 0 0 0 0 0 00 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

48DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

49DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

50DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

51DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

52DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

53DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

54DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

55DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

56DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

57DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

58DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

59DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

60DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

61DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 200000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

62DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

63DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 3000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

64DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

65DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

66DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

67DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

68DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

69DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

70DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

71DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

72DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

73DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

74DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

75DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

76DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

77DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 12: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z gemeinsame Teilfolge von X und Y wenn

Z Teilfolge sowohl von X als auch von Y ist

BF

F

F

Z

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

12DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z gemeinsame Teilfolge von X und Y wenn

Z Teilfolge sowohl von X als auch von Y ist

BeispielFolge Z

Folge X

Folge Y

bull Z ist gemeinsame Teilfolge von X und Y

A B A C A B C

B C A C

B A C C A B B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

13DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z gemeinsame Teilfolge von X und Y wenn

Z Teilfolge sowohl von X als auch von Y ist

BeispielFolge Z

Folge X

Folge Y

bull Z ist gemeinsame Teilfolge von X und Y

A B A C A B C

B C A C

B A C C A B B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

14DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z gemeinsame Teilfolge von X und Y wenn

Z Teilfolge sowohl von X als auch von Y ist

BeispielFolge Z

Folge X

Folge Y

bull Z ist gemeinsame Teilfolge von X und Y

A B A C A B C

B C A C

B A C C A B B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

15DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z laumlngste gemeinsame Teilfolge von X und

Y wenn Z gemeinsame Teilfolge von X und Y ist und es keine andere gemeinsame Teilfolge von X und Y gibt die groumlszligere Laumlnge als Z besitzt

BF

F

F

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

16DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z laumlngste gemeinsame Teilfolge von X und

Y wenn Z gemeinsame Teilfolge von X und Y ist und es keine andere gemeinsame Teilfolge von X und Y gibt die groumlszligere Laumlnge als Z besitzt

BeispielFolge X

Folge Y

F

A B A C A B C

B A C C A B B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

17DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z laumlngste gemeinsame Teilfolge von X und

Y wenn Z gemeinsame Teilfolge von X und Y ist und es keine andere gemeinsame Teilfolge von X und Y gibt die groumlszligere Laumlnge als Z besitzt

BeispielFolge X

Folge Y

Folge Z1

A B A C A B C

B A C C A B B C

B C A C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

18DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z laumlngste gemeinsame Teilfolge von X und

Y wenn Z gemeinsame Teilfolge von X und Y ist und es keine andere gemeinsame Teilfolge von X und Y gibt die groumlszligere Laumlnge als Z besitzt

BeispielFolge X

Folge Y

Folge Z1 Folge Z2

A B A C A B C

B A C C A B B C

B C A C B A C A C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

19DuA - Kapitel 20

Laumlngste Teilfolgehat Laumlnge 6

Eingabebull Folge X=(x1xm)bull Folge Y=(y1yn)

Ausgabebull Laumlngste gemeinsame Teilfolge Z

(Longest Common Subsequence)

BF

F

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

20DuA - Kapitel 20

Eingabebull Folge X=(x1xm)bull Folge Y=(y1yn)

Ausgabebull Laumlngste gemeinsame Teilfolge Z

(Longest Common Subsequence)

BeispielFolge X

Folge Y

A B C B D A B

B D C A B A

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

21DuA - Kapitel 20

Algorithmusbull Erzeuge alle moumlglichen Teilfolgen von Xbull Teste fuumlr jede Teilfolge von X ob auch Teilfolge von Ybull Merke zu jedem Zeitpunkt bisher laumlngste gemeinsame

Teilfolge

Laufzeitbull 2m moumlgliche Teilfolgenbull Exponentielle Laufzeit

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

22DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

23DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

2 Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

24DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

2 Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

3 Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

25DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

2 Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

3 Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

26DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

27DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

28DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

29DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

30DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

31DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

32DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Tabelle fuumlr die C[i][j] Werte

anlegen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

33DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Erste Spalte der Tabelle

auf 0 setzen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

34DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Erste Reihe der Tabelle

auf 0 setzen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

35DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

36DuA - Kapitel 20

Laumlngenberechnung(Array X Y C i j)1 if xi = yj then C[i][j] larr C[i-1][j-1] +12 else3 if C[i-1][j] ge C[i][j-1] then C[i][j] larr C[i-1][j]4 else C[i][j] larr C[i][j-1]

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

37DuA - Kapitel 20

Laumlngenberechnung(Array X Y C i j)1 if xi = yj then C[i][j] larr C[i-1][j-1] +12 else3 if C[i-1][j] ge C[i][j-1] then C[i][j] larr C[i-1][j]4 else C[i][j] larr C[i][j-1]

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

38DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

39DuA - Kapitel 20

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

40DuA - Kapitel 20

00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

41DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

42DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

43DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

44DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

45DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

46DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

47DuA - Kapitel 20

0 0 0 0 0 0 00 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

48DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

49DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

50DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

51DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

52DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

53DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

54DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

55DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

56DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

57DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

58DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

59DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

60DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

61DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 200000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

62DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

63DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 3000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

64DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

65DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

66DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

67DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

68DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

69DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

70DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

71DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

72DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

73DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

74DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

75DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

76DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

77DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 13: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z gemeinsame Teilfolge von X und Y wenn

Z Teilfolge sowohl von X als auch von Y ist

BeispielFolge Z

Folge X

Folge Y

bull Z ist gemeinsame Teilfolge von X und Y

A B A C A B C

B C A C

B A C C A B B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

13DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z gemeinsame Teilfolge von X und Y wenn

Z Teilfolge sowohl von X als auch von Y ist

BeispielFolge Z

Folge X

Folge Y

bull Z ist gemeinsame Teilfolge von X und Y

A B A C A B C

B C A C

B A C C A B B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

14DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z gemeinsame Teilfolge von X und Y wenn

Z Teilfolge sowohl von X als auch von Y ist

BeispielFolge Z

Folge X

Folge Y

bull Z ist gemeinsame Teilfolge von X und Y

A B A C A B C

B C A C

B A C C A B B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

15DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z laumlngste gemeinsame Teilfolge von X und

Y wenn Z gemeinsame Teilfolge von X und Y ist und es keine andere gemeinsame Teilfolge von X und Y gibt die groumlszligere Laumlnge als Z besitzt

BF

F

F

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

16DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z laumlngste gemeinsame Teilfolge von X und

Y wenn Z gemeinsame Teilfolge von X und Y ist und es keine andere gemeinsame Teilfolge von X und Y gibt die groumlszligere Laumlnge als Z besitzt

BeispielFolge X

Folge Y

F

A B A C A B C

B A C C A B B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

17DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z laumlngste gemeinsame Teilfolge von X und

Y wenn Z gemeinsame Teilfolge von X und Y ist und es keine andere gemeinsame Teilfolge von X und Y gibt die groumlszligere Laumlnge als Z besitzt

BeispielFolge X

Folge Y

Folge Z1

A B A C A B C

B A C C A B B C

B C A C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

18DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z laumlngste gemeinsame Teilfolge von X und

Y wenn Z gemeinsame Teilfolge von X und Y ist und es keine andere gemeinsame Teilfolge von X und Y gibt die groumlszligere Laumlnge als Z besitzt

BeispielFolge X

Folge Y

Folge Z1 Folge Z2

A B A C A B C

B A C C A B B C

B C A C B A C A C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

19DuA - Kapitel 20

Laumlngste Teilfolgehat Laumlnge 6

Eingabebull Folge X=(x1xm)bull Folge Y=(y1yn)

Ausgabebull Laumlngste gemeinsame Teilfolge Z

(Longest Common Subsequence)

BF

F

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

20DuA - Kapitel 20

Eingabebull Folge X=(x1xm)bull Folge Y=(y1yn)

Ausgabebull Laumlngste gemeinsame Teilfolge Z

(Longest Common Subsequence)

BeispielFolge X

Folge Y

A B C B D A B

B D C A B A

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

21DuA - Kapitel 20

Algorithmusbull Erzeuge alle moumlglichen Teilfolgen von Xbull Teste fuumlr jede Teilfolge von X ob auch Teilfolge von Ybull Merke zu jedem Zeitpunkt bisher laumlngste gemeinsame

Teilfolge

Laufzeitbull 2m moumlgliche Teilfolgenbull Exponentielle Laufzeit

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

22DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

23DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

2 Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

24DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

2 Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

3 Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

25DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

2 Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

3 Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

26DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

27DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

28DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

29DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

30DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

31DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

32DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Tabelle fuumlr die C[i][j] Werte

anlegen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

33DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Erste Spalte der Tabelle

auf 0 setzen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

34DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Erste Reihe der Tabelle

auf 0 setzen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

35DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

36DuA - Kapitel 20

Laumlngenberechnung(Array X Y C i j)1 if xi = yj then C[i][j] larr C[i-1][j-1] +12 else3 if C[i-1][j] ge C[i][j-1] then C[i][j] larr C[i-1][j]4 else C[i][j] larr C[i][j-1]

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

37DuA - Kapitel 20

Laumlngenberechnung(Array X Y C i j)1 if xi = yj then C[i][j] larr C[i-1][j-1] +12 else3 if C[i-1][j] ge C[i][j-1] then C[i][j] larr C[i-1][j]4 else C[i][j] larr C[i][j-1]

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

38DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

39DuA - Kapitel 20

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

40DuA - Kapitel 20

00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

41DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

42DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

43DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

44DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

45DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

46DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

47DuA - Kapitel 20

0 0 0 0 0 0 00 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

48DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

49DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

50DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

51DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

52DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

53DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

54DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

55DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

56DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

57DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

58DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

59DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

60DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

61DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 200000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

62DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

63DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 3000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

64DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

65DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

66DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

67DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

68DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

69DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

70DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

71DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

72DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

73DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

74DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

75DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

76DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

77DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 14: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z gemeinsame Teilfolge von X und Y wenn

Z Teilfolge sowohl von X als auch von Y ist

BeispielFolge Z

Folge X

Folge Y

bull Z ist gemeinsame Teilfolge von X und Y

A B A C A B C

B C A C

B A C C A B B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

14DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z gemeinsame Teilfolge von X und Y wenn

Z Teilfolge sowohl von X als auch von Y ist

BeispielFolge Z

Folge X

Folge Y

bull Z ist gemeinsame Teilfolge von X und Y

A B A C A B C

B C A C

B A C C A B B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

15DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z laumlngste gemeinsame Teilfolge von X und

Y wenn Z gemeinsame Teilfolge von X und Y ist und es keine andere gemeinsame Teilfolge von X und Y gibt die groumlszligere Laumlnge als Z besitzt

BF

F

F

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

16DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z laumlngste gemeinsame Teilfolge von X und

Y wenn Z gemeinsame Teilfolge von X und Y ist und es keine andere gemeinsame Teilfolge von X und Y gibt die groumlszligere Laumlnge als Z besitzt

BeispielFolge X

Folge Y

F

A B A C A B C

B A C C A B B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

17DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z laumlngste gemeinsame Teilfolge von X und

Y wenn Z gemeinsame Teilfolge von X und Y ist und es keine andere gemeinsame Teilfolge von X und Y gibt die groumlszligere Laumlnge als Z besitzt

BeispielFolge X

Folge Y

Folge Z1

A B A C A B C

B A C C A B B C

B C A C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

18DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z laumlngste gemeinsame Teilfolge von X und

Y wenn Z gemeinsame Teilfolge von X und Y ist und es keine andere gemeinsame Teilfolge von X und Y gibt die groumlszligere Laumlnge als Z besitzt

BeispielFolge X

Folge Y

Folge Z1 Folge Z2

A B A C A B C

B A C C A B B C

B C A C B A C A C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

19DuA - Kapitel 20

Laumlngste Teilfolgehat Laumlnge 6

Eingabebull Folge X=(x1xm)bull Folge Y=(y1yn)

Ausgabebull Laumlngste gemeinsame Teilfolge Z

(Longest Common Subsequence)

BF

F

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

20DuA - Kapitel 20

Eingabebull Folge X=(x1xm)bull Folge Y=(y1yn)

Ausgabebull Laumlngste gemeinsame Teilfolge Z

(Longest Common Subsequence)

BeispielFolge X

Folge Y

A B C B D A B

B D C A B A

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

21DuA - Kapitel 20

Algorithmusbull Erzeuge alle moumlglichen Teilfolgen von Xbull Teste fuumlr jede Teilfolge von X ob auch Teilfolge von Ybull Merke zu jedem Zeitpunkt bisher laumlngste gemeinsame

Teilfolge

Laufzeitbull 2m moumlgliche Teilfolgenbull Exponentielle Laufzeit

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

22DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

23DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

2 Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

24DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

2 Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

3 Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

25DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

2 Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

3 Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

26DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

27DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

28DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

29DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

30DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

31DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

32DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Tabelle fuumlr die C[i][j] Werte

anlegen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

33DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Erste Spalte der Tabelle

auf 0 setzen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

34DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Erste Reihe der Tabelle

auf 0 setzen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

35DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

36DuA - Kapitel 20

Laumlngenberechnung(Array X Y C i j)1 if xi = yj then C[i][j] larr C[i-1][j-1] +12 else3 if C[i-1][j] ge C[i][j-1] then C[i][j] larr C[i-1][j]4 else C[i][j] larr C[i][j-1]

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

37DuA - Kapitel 20

Laumlngenberechnung(Array X Y C i j)1 if xi = yj then C[i][j] larr C[i-1][j-1] +12 else3 if C[i-1][j] ge C[i][j-1] then C[i][j] larr C[i-1][j]4 else C[i][j] larr C[i][j-1]

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

38DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

39DuA - Kapitel 20

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

40DuA - Kapitel 20

00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

41DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

42DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

43DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

44DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

45DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

46DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

47DuA - Kapitel 20

0 0 0 0 0 0 00 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

48DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

49DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

50DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

51DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

52DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

53DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

54DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

55DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

56DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

57DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

58DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

59DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

60DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

61DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 200000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

62DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

63DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 3000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

64DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

65DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

66DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

67DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

68DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

69DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

70DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

71DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

72DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

73DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

74DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

75DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

76DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

77DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 15: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z gemeinsame Teilfolge von X und Y wenn

Z Teilfolge sowohl von X als auch von Y ist

BeispielFolge Z

Folge X

Folge Y

bull Z ist gemeinsame Teilfolge von X und Y

A B A C A B C

B C A C

B A C C A B B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

15DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z laumlngste gemeinsame Teilfolge von X und

Y wenn Z gemeinsame Teilfolge von X und Y ist und es keine andere gemeinsame Teilfolge von X und Y gibt die groumlszligere Laumlnge als Z besitzt

BF

F

F

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

16DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z laumlngste gemeinsame Teilfolge von X und

Y wenn Z gemeinsame Teilfolge von X und Y ist und es keine andere gemeinsame Teilfolge von X und Y gibt die groumlszligere Laumlnge als Z besitzt

BeispielFolge X

Folge Y

F

A B A C A B C

B A C C A B B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

17DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z laumlngste gemeinsame Teilfolge von X und

Y wenn Z gemeinsame Teilfolge von X und Y ist und es keine andere gemeinsame Teilfolge von X und Y gibt die groumlszligere Laumlnge als Z besitzt

BeispielFolge X

Folge Y

Folge Z1

A B A C A B C

B A C C A B B C

B C A C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

18DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z laumlngste gemeinsame Teilfolge von X und

Y wenn Z gemeinsame Teilfolge von X und Y ist und es keine andere gemeinsame Teilfolge von X und Y gibt die groumlszligere Laumlnge als Z besitzt

BeispielFolge X

Folge Y

Folge Z1 Folge Z2

A B A C A B C

B A C C A B B C

B C A C B A C A C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

19DuA - Kapitel 20

Laumlngste Teilfolgehat Laumlnge 6

Eingabebull Folge X=(x1xm)bull Folge Y=(y1yn)

Ausgabebull Laumlngste gemeinsame Teilfolge Z

(Longest Common Subsequence)

BF

F

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

20DuA - Kapitel 20

Eingabebull Folge X=(x1xm)bull Folge Y=(y1yn)

Ausgabebull Laumlngste gemeinsame Teilfolge Z

(Longest Common Subsequence)

BeispielFolge X

Folge Y

A B C B D A B

B D C A B A

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

21DuA - Kapitel 20

Algorithmusbull Erzeuge alle moumlglichen Teilfolgen von Xbull Teste fuumlr jede Teilfolge von X ob auch Teilfolge von Ybull Merke zu jedem Zeitpunkt bisher laumlngste gemeinsame

Teilfolge

Laufzeitbull 2m moumlgliche Teilfolgenbull Exponentielle Laufzeit

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

22DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

23DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

2 Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

24DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

2 Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

3 Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

25DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

2 Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

3 Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

26DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

27DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

28DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

29DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

30DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

31DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

32DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Tabelle fuumlr die C[i][j] Werte

anlegen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

33DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Erste Spalte der Tabelle

auf 0 setzen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

34DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Erste Reihe der Tabelle

auf 0 setzen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

35DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

36DuA - Kapitel 20

Laumlngenberechnung(Array X Y C i j)1 if xi = yj then C[i][j] larr C[i-1][j-1] +12 else3 if C[i-1][j] ge C[i][j-1] then C[i][j] larr C[i-1][j]4 else C[i][j] larr C[i][j-1]

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

37DuA - Kapitel 20

Laumlngenberechnung(Array X Y C i j)1 if xi = yj then C[i][j] larr C[i-1][j-1] +12 else3 if C[i-1][j] ge C[i][j-1] then C[i][j] larr C[i-1][j]4 else C[i][j] larr C[i][j-1]

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

38DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

39DuA - Kapitel 20

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

40DuA - Kapitel 20

00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

41DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

42DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

43DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

44DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

45DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

46DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

47DuA - Kapitel 20

0 0 0 0 0 0 00 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

48DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

49DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

50DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

51DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

52DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

53DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

54DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

55DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

56DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

57DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

58DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

59DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

60DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

61DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 200000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

62DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

63DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 3000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

64DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

65DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

66DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

67DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

68DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

69DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

70DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

71DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

72DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

73DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

74DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

75DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

76DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

77DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 16: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z laumlngste gemeinsame Teilfolge von X und

Y wenn Z gemeinsame Teilfolge von X und Y ist und es keine andere gemeinsame Teilfolge von X und Y gibt die groumlszligere Laumlnge als Z besitzt

BF

F

F

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

16DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z laumlngste gemeinsame Teilfolge von X und

Y wenn Z gemeinsame Teilfolge von X und Y ist und es keine andere gemeinsame Teilfolge von X und Y gibt die groumlszligere Laumlnge als Z besitzt

BeispielFolge X

Folge Y

F

A B A C A B C

B A C C A B B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

17DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z laumlngste gemeinsame Teilfolge von X und

Y wenn Z gemeinsame Teilfolge von X und Y ist und es keine andere gemeinsame Teilfolge von X und Y gibt die groumlszligere Laumlnge als Z besitzt

BeispielFolge X

Folge Y

Folge Z1

A B A C A B C

B A C C A B B C

B C A C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

18DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z laumlngste gemeinsame Teilfolge von X und

Y wenn Z gemeinsame Teilfolge von X und Y ist und es keine andere gemeinsame Teilfolge von X und Y gibt die groumlszligere Laumlnge als Z besitzt

BeispielFolge X

Folge Y

Folge Z1 Folge Z2

A B A C A B C

B A C C A B B C

B C A C B A C A C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

19DuA - Kapitel 20

Laumlngste Teilfolgehat Laumlnge 6

Eingabebull Folge X=(x1xm)bull Folge Y=(y1yn)

Ausgabebull Laumlngste gemeinsame Teilfolge Z

(Longest Common Subsequence)

BF

F

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

20DuA - Kapitel 20

Eingabebull Folge X=(x1xm)bull Folge Y=(y1yn)

Ausgabebull Laumlngste gemeinsame Teilfolge Z

(Longest Common Subsequence)

BeispielFolge X

Folge Y

A B C B D A B

B D C A B A

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

21DuA - Kapitel 20

Algorithmusbull Erzeuge alle moumlglichen Teilfolgen von Xbull Teste fuumlr jede Teilfolge von X ob auch Teilfolge von Ybull Merke zu jedem Zeitpunkt bisher laumlngste gemeinsame

Teilfolge

Laufzeitbull 2m moumlgliche Teilfolgenbull Exponentielle Laufzeit

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

22DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

23DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

2 Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

24DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

2 Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

3 Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

25DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

2 Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

3 Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

26DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

27DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

28DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

29DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

30DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

31DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

32DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Tabelle fuumlr die C[i][j] Werte

anlegen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

33DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Erste Spalte der Tabelle

auf 0 setzen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

34DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Erste Reihe der Tabelle

auf 0 setzen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

35DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

36DuA - Kapitel 20

Laumlngenberechnung(Array X Y C i j)1 if xi = yj then C[i][j] larr C[i-1][j-1] +12 else3 if C[i-1][j] ge C[i][j-1] then C[i][j] larr C[i-1][j]4 else C[i][j] larr C[i][j-1]

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

37DuA - Kapitel 20

Laumlngenberechnung(Array X Y C i j)1 if xi = yj then C[i][j] larr C[i-1][j-1] +12 else3 if C[i-1][j] ge C[i][j-1] then C[i][j] larr C[i-1][j]4 else C[i][j] larr C[i][j-1]

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

38DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

39DuA - Kapitel 20

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

40DuA - Kapitel 20

00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

41DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

42DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

43DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

44DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

45DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

46DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

47DuA - Kapitel 20

0 0 0 0 0 0 00 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

48DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

49DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

50DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

51DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

52DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

53DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

54DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

55DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

56DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

57DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

58DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

59DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

60DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

61DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 200000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

62DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

63DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 3000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

64DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

65DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

66DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

67DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

68DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

69DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

70DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

71DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

72DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

73DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

74DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

75DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

76DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

77DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 17: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z laumlngste gemeinsame Teilfolge von X und

Y wenn Z gemeinsame Teilfolge von X und Y ist und es keine andere gemeinsame Teilfolge von X und Y gibt die groumlszligere Laumlnge als Z besitzt

BeispielFolge X

Folge Y

F

A B A C A B C

B A C C A B B C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

17DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z laumlngste gemeinsame Teilfolge von X und

Y wenn Z gemeinsame Teilfolge von X und Y ist und es keine andere gemeinsame Teilfolge von X und Y gibt die groumlszligere Laumlnge als Z besitzt

BeispielFolge X

Folge Y

Folge Z1

A B A C A B C

B A C C A B B C

B C A C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

18DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z laumlngste gemeinsame Teilfolge von X und

Y wenn Z gemeinsame Teilfolge von X und Y ist und es keine andere gemeinsame Teilfolge von X und Y gibt die groumlszligere Laumlnge als Z besitzt

BeispielFolge X

Folge Y

Folge Z1 Folge Z2

A B A C A B C

B A C C A B B C

B C A C B A C A C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

19DuA - Kapitel 20

Laumlngste Teilfolgehat Laumlnge 6

Eingabebull Folge X=(x1xm)bull Folge Y=(y1yn)

Ausgabebull Laumlngste gemeinsame Teilfolge Z

(Longest Common Subsequence)

BF

F

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

20DuA - Kapitel 20

Eingabebull Folge X=(x1xm)bull Folge Y=(y1yn)

Ausgabebull Laumlngste gemeinsame Teilfolge Z

(Longest Common Subsequence)

BeispielFolge X

Folge Y

A B C B D A B

B D C A B A

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

21DuA - Kapitel 20

Algorithmusbull Erzeuge alle moumlglichen Teilfolgen von Xbull Teste fuumlr jede Teilfolge von X ob auch Teilfolge von Ybull Merke zu jedem Zeitpunkt bisher laumlngste gemeinsame

Teilfolge

Laufzeitbull 2m moumlgliche Teilfolgenbull Exponentielle Laufzeit

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

22DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

23DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

2 Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

24DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

2 Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

3 Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

25DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

2 Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

3 Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

26DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

27DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

28DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

29DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

30DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

31DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

32DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Tabelle fuumlr die C[i][j] Werte

anlegen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

33DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Erste Spalte der Tabelle

auf 0 setzen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

34DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Erste Reihe der Tabelle

auf 0 setzen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

35DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

36DuA - Kapitel 20

Laumlngenberechnung(Array X Y C i j)1 if xi = yj then C[i][j] larr C[i-1][j-1] +12 else3 if C[i-1][j] ge C[i][j-1] then C[i][j] larr C[i-1][j]4 else C[i][j] larr C[i][j-1]

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

37DuA - Kapitel 20

Laumlngenberechnung(Array X Y C i j)1 if xi = yj then C[i][j] larr C[i-1][j-1] +12 else3 if C[i-1][j] ge C[i][j-1] then C[i][j] larr C[i-1][j]4 else C[i][j] larr C[i][j-1]

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

38DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

39DuA - Kapitel 20

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

40DuA - Kapitel 20

00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

41DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

42DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

43DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

44DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

45DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

46DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

47DuA - Kapitel 20

0 0 0 0 0 0 00 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

48DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

49DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

50DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

51DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

52DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

53DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

54DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

55DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

56DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

57DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

58DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

59DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

60DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

61DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 200000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

62DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

63DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 3000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

64DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

65DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

66DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

67DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

68DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

69DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

70DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

71DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

72DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

73DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

74DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

75DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

76DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

77DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 18: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z laumlngste gemeinsame Teilfolge von X und

Y wenn Z gemeinsame Teilfolge von X und Y ist und es keine andere gemeinsame Teilfolge von X und Y gibt die groumlszligere Laumlnge als Z besitzt

BeispielFolge X

Folge Y

Folge Z1

A B A C A B C

B A C C A B B C

B C A C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

18DuA - Kapitel 20

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z laumlngste gemeinsame Teilfolge von X und

Y wenn Z gemeinsame Teilfolge von X und Y ist und es keine andere gemeinsame Teilfolge von X und Y gibt die groumlszligere Laumlnge als Z besitzt

BeispielFolge X

Folge Y

Folge Z1 Folge Z2

A B A C A B C

B A C C A B B C

B C A C B A C A C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

19DuA - Kapitel 20

Laumlngste Teilfolgehat Laumlnge 6

Eingabebull Folge X=(x1xm)bull Folge Y=(y1yn)

Ausgabebull Laumlngste gemeinsame Teilfolge Z

(Longest Common Subsequence)

BF

F

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

20DuA - Kapitel 20

Eingabebull Folge X=(x1xm)bull Folge Y=(y1yn)

Ausgabebull Laumlngste gemeinsame Teilfolge Z

(Longest Common Subsequence)

BeispielFolge X

Folge Y

A B C B D A B

B D C A B A

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

21DuA - Kapitel 20

Algorithmusbull Erzeuge alle moumlglichen Teilfolgen von Xbull Teste fuumlr jede Teilfolge von X ob auch Teilfolge von Ybull Merke zu jedem Zeitpunkt bisher laumlngste gemeinsame

Teilfolge

Laufzeitbull 2m moumlgliche Teilfolgenbull Exponentielle Laufzeit

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

22DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

23DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

2 Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

24DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

2 Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

3 Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

25DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

2 Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

3 Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

26DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

27DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

28DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

29DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

30DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

31DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

32DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Tabelle fuumlr die C[i][j] Werte

anlegen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

33DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Erste Spalte der Tabelle

auf 0 setzen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

34DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Erste Reihe der Tabelle

auf 0 setzen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

35DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

36DuA - Kapitel 20

Laumlngenberechnung(Array X Y C i j)1 if xi = yj then C[i][j] larr C[i-1][j-1] +12 else3 if C[i-1][j] ge C[i][j-1] then C[i][j] larr C[i-1][j]4 else C[i][j] larr C[i][j-1]

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

37DuA - Kapitel 20

Laumlngenberechnung(Array X Y C i j)1 if xi = yj then C[i][j] larr C[i-1][j-1] +12 else3 if C[i-1][j] ge C[i][j-1] then C[i][j] larr C[i-1][j]4 else C[i][j] larr C[i][j-1]

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

38DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

39DuA - Kapitel 20

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

40DuA - Kapitel 20

00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

41DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

42DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

43DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

44DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

45DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

46DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

47DuA - Kapitel 20

0 0 0 0 0 0 00 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

48DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

49DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

50DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

51DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

52DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

53DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

54DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

55DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

56DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

57DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

58DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

59DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

60DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

61DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 200000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

62DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

63DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 3000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

64DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

65DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

66DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

67DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

68DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

69DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

70DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

71DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

72DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

73DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

74DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

75DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

76DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

77DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 19: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

Definitionbull Seien X Y Z Folgen uumlber A bull Dann heiszligt Z laumlngste gemeinsame Teilfolge von X und

Y wenn Z gemeinsame Teilfolge von X und Y ist und es keine andere gemeinsame Teilfolge von X und Y gibt die groumlszligere Laumlnge als Z besitzt

BeispielFolge X

Folge Y

Folge Z1 Folge Z2

A B A C A B C

B A C C A B B C

B C A C B A C A C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

19DuA - Kapitel 20

Laumlngste Teilfolgehat Laumlnge 6

Eingabebull Folge X=(x1xm)bull Folge Y=(y1yn)

Ausgabebull Laumlngste gemeinsame Teilfolge Z

(Longest Common Subsequence)

BF

F

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

20DuA - Kapitel 20

Eingabebull Folge X=(x1xm)bull Folge Y=(y1yn)

Ausgabebull Laumlngste gemeinsame Teilfolge Z

(Longest Common Subsequence)

BeispielFolge X

Folge Y

A B C B D A B

B D C A B A

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

21DuA - Kapitel 20

Algorithmusbull Erzeuge alle moumlglichen Teilfolgen von Xbull Teste fuumlr jede Teilfolge von X ob auch Teilfolge von Ybull Merke zu jedem Zeitpunkt bisher laumlngste gemeinsame

Teilfolge

Laufzeitbull 2m moumlgliche Teilfolgenbull Exponentielle Laufzeit

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

22DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

23DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

2 Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

24DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

2 Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

3 Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

25DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

2 Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

3 Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

26DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

27DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

28DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

29DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

30DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

31DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

32DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Tabelle fuumlr die C[i][j] Werte

anlegen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

33DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Erste Spalte der Tabelle

auf 0 setzen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

34DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Erste Reihe der Tabelle

auf 0 setzen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

35DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

36DuA - Kapitel 20

Laumlngenberechnung(Array X Y C i j)1 if xi = yj then C[i][j] larr C[i-1][j-1] +12 else3 if C[i-1][j] ge C[i][j-1] then C[i][j] larr C[i-1][j]4 else C[i][j] larr C[i][j-1]

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

37DuA - Kapitel 20

Laumlngenberechnung(Array X Y C i j)1 if xi = yj then C[i][j] larr C[i-1][j-1] +12 else3 if C[i-1][j] ge C[i][j-1] then C[i][j] larr C[i-1][j]4 else C[i][j] larr C[i][j-1]

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

38DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

39DuA - Kapitel 20

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

40DuA - Kapitel 20

00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

41DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

42DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

43DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

44DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

45DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

46DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

47DuA - Kapitel 20

0 0 0 0 0 0 00 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

48DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

49DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

50DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

51DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

52DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

53DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

54DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

55DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

56DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

57DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

58DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

59DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

60DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

61DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 200000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

62DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

63DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 3000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

64DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

65DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

66DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

67DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

68DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

69DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

70DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

71DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

72DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

73DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

74DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

75DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

76DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

77DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 20: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

Eingabebull Folge X=(x1xm)bull Folge Y=(y1yn)

Ausgabebull Laumlngste gemeinsame Teilfolge Z

(Longest Common Subsequence)

BF

F

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

20DuA - Kapitel 20

Eingabebull Folge X=(x1xm)bull Folge Y=(y1yn)

Ausgabebull Laumlngste gemeinsame Teilfolge Z

(Longest Common Subsequence)

BeispielFolge X

Folge Y

A B C B D A B

B D C A B A

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

21DuA - Kapitel 20

Algorithmusbull Erzeuge alle moumlglichen Teilfolgen von Xbull Teste fuumlr jede Teilfolge von X ob auch Teilfolge von Ybull Merke zu jedem Zeitpunkt bisher laumlngste gemeinsame

Teilfolge

Laufzeitbull 2m moumlgliche Teilfolgenbull Exponentielle Laufzeit

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

22DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

23DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

2 Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

24DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

2 Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

3 Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

25DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

2 Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

3 Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

26DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

27DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

28DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

29DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

30DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

31DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

32DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Tabelle fuumlr die C[i][j] Werte

anlegen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

33DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Erste Spalte der Tabelle

auf 0 setzen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

34DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Erste Reihe der Tabelle

auf 0 setzen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

35DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

36DuA - Kapitel 20

Laumlngenberechnung(Array X Y C i j)1 if xi = yj then C[i][j] larr C[i-1][j-1] +12 else3 if C[i-1][j] ge C[i][j-1] then C[i][j] larr C[i-1][j]4 else C[i][j] larr C[i][j-1]

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

37DuA - Kapitel 20

Laumlngenberechnung(Array X Y C i j)1 if xi = yj then C[i][j] larr C[i-1][j-1] +12 else3 if C[i-1][j] ge C[i][j-1] then C[i][j] larr C[i-1][j]4 else C[i][j] larr C[i][j-1]

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

38DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

39DuA - Kapitel 20

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

40DuA - Kapitel 20

00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

41DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

42DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

43DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

44DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

45DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

46DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

47DuA - Kapitel 20

0 0 0 0 0 0 00 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

48DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

49DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

50DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

51DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

52DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

53DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

54DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

55DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

56DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

57DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

58DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

59DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

60DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

61DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 200000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

62DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

63DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 3000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

64DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

65DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

66DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

67DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

68DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

69DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

70DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

71DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

72DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

73DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

74DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

75DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

76DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

77DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 21: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

Eingabebull Folge X=(x1xm)bull Folge Y=(y1yn)

Ausgabebull Laumlngste gemeinsame Teilfolge Z

(Longest Common Subsequence)

BeispielFolge X

Folge Y

A B C B D A B

B D C A B A

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

21DuA - Kapitel 20

Algorithmusbull Erzeuge alle moumlglichen Teilfolgen von Xbull Teste fuumlr jede Teilfolge von X ob auch Teilfolge von Ybull Merke zu jedem Zeitpunkt bisher laumlngste gemeinsame

Teilfolge

Laufzeitbull 2m moumlgliche Teilfolgenbull Exponentielle Laufzeit

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

22DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

23DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

2 Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

24DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

2 Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

3 Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

25DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

2 Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

3 Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

26DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

27DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

28DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

29DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

30DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

31DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

32DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Tabelle fuumlr die C[i][j] Werte

anlegen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

33DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Erste Spalte der Tabelle

auf 0 setzen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

34DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Erste Reihe der Tabelle

auf 0 setzen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

35DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

36DuA - Kapitel 20

Laumlngenberechnung(Array X Y C i j)1 if xi = yj then C[i][j] larr C[i-1][j-1] +12 else3 if C[i-1][j] ge C[i][j-1] then C[i][j] larr C[i-1][j]4 else C[i][j] larr C[i][j-1]

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

37DuA - Kapitel 20

Laumlngenberechnung(Array X Y C i j)1 if xi = yj then C[i][j] larr C[i-1][j-1] +12 else3 if C[i-1][j] ge C[i][j-1] then C[i][j] larr C[i-1][j]4 else C[i][j] larr C[i][j-1]

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

38DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

39DuA - Kapitel 20

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

40DuA - Kapitel 20

00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

41DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

42DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

43DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

44DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

45DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

46DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

47DuA - Kapitel 20

0 0 0 0 0 0 00 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

48DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

49DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

50DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

51DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

52DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

53DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

54DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

55DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

56DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

57DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

58DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

59DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

60DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

61DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 200000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

62DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

63DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 3000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

64DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

65DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

66DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

67DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

68DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

69DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

70DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

71DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

72DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

73DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

74DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

75DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

76DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

77DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 22: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

Algorithmusbull Erzeuge alle moumlglichen Teilfolgen von Xbull Teste fuumlr jede Teilfolge von X ob auch Teilfolge von Ybull Merke zu jedem Zeitpunkt bisher laumlngste gemeinsame

Teilfolge

Laufzeitbull 2m moumlgliche Teilfolgenbull Exponentielle Laufzeit

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

22DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

23DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

2 Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

24DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

2 Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

3 Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

25DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

2 Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

3 Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

26DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

27DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

28DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

29DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

30DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

31DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

32DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Tabelle fuumlr die C[i][j] Werte

anlegen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

33DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Erste Spalte der Tabelle

auf 0 setzen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

34DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Erste Reihe der Tabelle

auf 0 setzen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

35DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

36DuA - Kapitel 20

Laumlngenberechnung(Array X Y C i j)1 if xi = yj then C[i][j] larr C[i-1][j-1] +12 else3 if C[i-1][j] ge C[i][j-1] then C[i][j] larr C[i-1][j]4 else C[i][j] larr C[i][j-1]

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

37DuA - Kapitel 20

Laumlngenberechnung(Array X Y C i j)1 if xi = yj then C[i][j] larr C[i-1][j-1] +12 else3 if C[i-1][j] ge C[i][j-1] then C[i][j] larr C[i-1][j]4 else C[i][j] larr C[i][j-1]

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

38DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

39DuA - Kapitel 20

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

40DuA - Kapitel 20

00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

41DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

42DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

43DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

44DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

45DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

46DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

47DuA - Kapitel 20

0 0 0 0 0 0 00 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

48DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

49DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

50DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

51DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

52DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

53DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

54DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

55DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

56DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

57DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

58DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

59DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

60DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

61DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 200000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

62DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

63DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 3000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

64DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

65DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

66DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

67DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

68DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

69DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

70DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

71DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

72DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

73DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

74DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

75DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

76DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

77DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 23: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

23DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

2 Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

24DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

2 Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

3 Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

25DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

2 Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

3 Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

26DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

27DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

28DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

29DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

30DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

31DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

32DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Tabelle fuumlr die C[i][j] Werte

anlegen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

33DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Erste Spalte der Tabelle

auf 0 setzen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

34DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Erste Reihe der Tabelle

auf 0 setzen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

35DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

36DuA - Kapitel 20

Laumlngenberechnung(Array X Y C i j)1 if xi = yj then C[i][j] larr C[i-1][j-1] +12 else3 if C[i-1][j] ge C[i][j-1] then C[i][j] larr C[i-1][j]4 else C[i][j] larr C[i][j-1]

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

37DuA - Kapitel 20

Laumlngenberechnung(Array X Y C i j)1 if xi = yj then C[i][j] larr C[i-1][j-1] +12 else3 if C[i-1][j] ge C[i][j-1] then C[i][j] larr C[i-1][j]4 else C[i][j] larr C[i][j-1]

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

38DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

39DuA - Kapitel 20

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

40DuA - Kapitel 20

00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

41DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

42DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

43DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

44DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

45DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

46DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

47DuA - Kapitel 20

0 0 0 0 0 0 00 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

48DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

49DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

50DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

51DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

52DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

53DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

54DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

55DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

56DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

57DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

58DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

59DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

60DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

61DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 200000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

62DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

63DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 3000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

64DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

65DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

66DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

67DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

68DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

69DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

70DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

71DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

72DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

73DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

74DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

75DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

76DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

77DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 24: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

2 Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

24DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

2 Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

3 Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

25DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

2 Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

3 Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

26DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

27DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

28DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

29DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

30DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

31DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

32DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Tabelle fuumlr die C[i][j] Werte

anlegen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

33DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Erste Spalte der Tabelle

auf 0 setzen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

34DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Erste Reihe der Tabelle

auf 0 setzen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

35DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

36DuA - Kapitel 20

Laumlngenberechnung(Array X Y C i j)1 if xi = yj then C[i][j] larr C[i-1][j-1] +12 else3 if C[i-1][j] ge C[i][j-1] then C[i][j] larr C[i-1][j]4 else C[i][j] larr C[i][j-1]

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

37DuA - Kapitel 20

Laumlngenberechnung(Array X Y C i j)1 if xi = yj then C[i][j] larr C[i-1][j-1] +12 else3 if C[i-1][j] ge C[i][j-1] then C[i][j] larr C[i-1][j]4 else C[i][j] larr C[i][j-1]

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

38DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

39DuA - Kapitel 20

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

40DuA - Kapitel 20

00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

41DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

42DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

43DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

44DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

45DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

46DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

47DuA - Kapitel 20

0 0 0 0 0 0 00 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

48DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

49DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

50DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

51DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

52DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

53DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

54DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

55DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

56DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

57DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

58DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

59DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

60DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

61DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 200000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

62DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

63DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 3000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

64DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

65DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

66DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

67DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

68DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

69DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

70DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

71DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

72DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

73DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

74DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

75DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

76DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

77DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 25: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

2 Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

3 Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

25DuA - Kapitel 20

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

2 Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

3 Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

26DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

27DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

28DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

29DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

30DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

31DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

32DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Tabelle fuumlr die C[i][j] Werte

anlegen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

33DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Erste Spalte der Tabelle

auf 0 setzen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

34DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Erste Reihe der Tabelle

auf 0 setzen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

35DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

36DuA - Kapitel 20

Laumlngenberechnung(Array X Y C i j)1 if xi = yj then C[i][j] larr C[i-1][j-1] +12 else3 if C[i-1][j] ge C[i][j-1] then C[i][j] larr C[i-1][j]4 else C[i][j] larr C[i][j-1]

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

37DuA - Kapitel 20

Laumlngenberechnung(Array X Y C i j)1 if xi = yj then C[i][j] larr C[i-1][j-1] +12 else3 if C[i-1][j] ge C[i][j-1] then C[i][j] larr C[i-1][j]4 else C[i][j] larr C[i][j-1]

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

38DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

39DuA - Kapitel 20

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

40DuA - Kapitel 20

00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

41DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

42DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

43DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

44DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

45DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

46DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

47DuA - Kapitel 20

0 0 0 0 0 0 00 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

48DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

49DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

50DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

51DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

52DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

53DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

54DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

55DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

56DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

57DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

58DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

59DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

60DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

61DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 200000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

62DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

63DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 3000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

64DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

65DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

66DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

67DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

68DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

69DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

70DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

71DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

72DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

73DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

74DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

75DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

76DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

77DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 26: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

Satz 201Seien X=(x1xm) und Y=(y1yn) beliebige Folgen und

sei Z=(z1zk) eine laumlngste gemeinsame Teilfolge von X und Y Dann gilt

1 Ist xm = yn dann ist zk = xm = yn und (z1zk-1) ist eine laumlngste gemeinsame Teilfolge von (x1xm-1) und (y1yn-1)

2 Ist xm ne yn und zk ne xm dann ist Z eine laumlngste gemeinsame Teilfolge von (x1xm-1) und Y

3 Ist xm ne yn und zk ne yn dann ist Z eine laumlngste gemeinsame Teilfolge von X und (y1yn-1)

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

26DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

27DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

28DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

29DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

30DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

31DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

32DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Tabelle fuumlr die C[i][j] Werte

anlegen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

33DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Erste Spalte der Tabelle

auf 0 setzen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

34DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Erste Reihe der Tabelle

auf 0 setzen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

35DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

36DuA - Kapitel 20

Laumlngenberechnung(Array X Y C i j)1 if xi = yj then C[i][j] larr C[i-1][j-1] +12 else3 if C[i-1][j] ge C[i][j-1] then C[i][j] larr C[i-1][j]4 else C[i][j] larr C[i][j-1]

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

37DuA - Kapitel 20

Laumlngenberechnung(Array X Y C i j)1 if xi = yj then C[i][j] larr C[i-1][j-1] +12 else3 if C[i-1][j] ge C[i][j-1] then C[i][j] larr C[i-1][j]4 else C[i][j] larr C[i][j-1]

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

38DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

39DuA - Kapitel 20

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

40DuA - Kapitel 20

00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

41DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

42DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

43DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

44DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

45DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

46DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

47DuA - Kapitel 20

0 0 0 0 0 0 00 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

48DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

49DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

50DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

51DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

52DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

53DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

54DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

55DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

56DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

57DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

58DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

59DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

60DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

61DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 200000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

62DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

63DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 3000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

64DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

65DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

66DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

67DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

68DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

69DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

70DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

71DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

72DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

73DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

74DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

75DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

76DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

77DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 27: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

27DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

28DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

29DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

30DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

31DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

32DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Tabelle fuumlr die C[i][j] Werte

anlegen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

33DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Erste Spalte der Tabelle

auf 0 setzen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

34DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Erste Reihe der Tabelle

auf 0 setzen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

35DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

36DuA - Kapitel 20

Laumlngenberechnung(Array X Y C i j)1 if xi = yj then C[i][j] larr C[i-1][j-1] +12 else3 if C[i-1][j] ge C[i][j-1] then C[i][j] larr C[i-1][j]4 else C[i][j] larr C[i][j-1]

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

37DuA - Kapitel 20

Laumlngenberechnung(Array X Y C i j)1 if xi = yj then C[i][j] larr C[i-1][j-1] +12 else3 if C[i-1][j] ge C[i][j-1] then C[i][j] larr C[i-1][j]4 else C[i][j] larr C[i][j-1]

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

38DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

39DuA - Kapitel 20

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

40DuA - Kapitel 20

00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

41DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

42DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

43DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

44DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

45DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

46DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

47DuA - Kapitel 20

0 0 0 0 0 0 00 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

48DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

49DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

50DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

51DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

52DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

53DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

54DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

55DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

56DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

57DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

58DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

59DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

60DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

61DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 200000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

62DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

63DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 3000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

64DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

65DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

66DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

67DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

68DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

69DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

70DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

71DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

72DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

73DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

74DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

75DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

76DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

77DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 28: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

28DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

29DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

30DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

31DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

32DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Tabelle fuumlr die C[i][j] Werte

anlegen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

33DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Erste Spalte der Tabelle

auf 0 setzen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

34DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Erste Reihe der Tabelle

auf 0 setzen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

35DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

36DuA - Kapitel 20

Laumlngenberechnung(Array X Y C i j)1 if xi = yj then C[i][j] larr C[i-1][j-1] +12 else3 if C[i-1][j] ge C[i][j-1] then C[i][j] larr C[i-1][j]4 else C[i][j] larr C[i][j-1]

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

37DuA - Kapitel 20

Laumlngenberechnung(Array X Y C i j)1 if xi = yj then C[i][j] larr C[i-1][j-1] +12 else3 if C[i-1][j] ge C[i][j-1] then C[i][j] larr C[i-1][j]4 else C[i][j] larr C[i][j-1]

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

38DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

39DuA - Kapitel 20

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

40DuA - Kapitel 20

00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

41DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

42DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

43DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

44DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

45DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

46DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

47DuA - Kapitel 20

0 0 0 0 0 0 00 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

48DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

49DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

50DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

51DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

52DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

53DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

54DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

55DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

56DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

57DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

58DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

59DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

60DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

61DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 200000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

62DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

63DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 3000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

64DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

65DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

66DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

67DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

68DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

69DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

70DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

71DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

72DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

73DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

74DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

75DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

76DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

77DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 29: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

29DuA - Kapitel 20

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

30DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

31DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

32DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Tabelle fuumlr die C[i][j] Werte

anlegen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

33DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Erste Spalte der Tabelle

auf 0 setzen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

34DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Erste Reihe der Tabelle

auf 0 setzen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

35DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

36DuA - Kapitel 20

Laumlngenberechnung(Array X Y C i j)1 if xi = yj then C[i][j] larr C[i-1][j-1] +12 else3 if C[i-1][j] ge C[i][j-1] then C[i][j] larr C[i-1][j]4 else C[i][j] larr C[i][j-1]

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

37DuA - Kapitel 20

Laumlngenberechnung(Array X Y C i j)1 if xi = yj then C[i][j] larr C[i-1][j-1] +12 else3 if C[i-1][j] ge C[i][j-1] then C[i][j] larr C[i-1][j]4 else C[i][j] larr C[i][j-1]

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

38DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

39DuA - Kapitel 20

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

40DuA - Kapitel 20

00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

41DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

42DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

43DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

44DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

45DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

46DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

47DuA - Kapitel 20

0 0 0 0 0 0 00 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

48DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

49DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

50DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

51DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

52DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

53DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

54DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

55DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

56DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

57DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

58DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

59DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

60DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

61DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 200000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

62DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

63DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 3000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

64DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

65DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

66DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

67DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

68DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

69DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

70DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

71DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

72DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

73DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

74DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

75DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

76DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

77DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 30: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

Lemma 202Sei C[i][j] die Laumlnge einer laumlngsten gemeinsamen Teilfolge

von (x1xi) und (y1yj) Dann gilt

BeobachtungRekursive Berechnung der C[i][j] wuumlrde zu Berechnung

immer wieder derselben Werte fuumlhren Dieses ist ineffizient Berechnen daher die Werte C[i][j] iterativ naumlmlich zeilenweise

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

30DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

31DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

32DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Tabelle fuumlr die C[i][j] Werte

anlegen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

33DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Erste Spalte der Tabelle

auf 0 setzen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

34DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Erste Reihe der Tabelle

auf 0 setzen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

35DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

36DuA - Kapitel 20

Laumlngenberechnung(Array X Y C i j)1 if xi = yj then C[i][j] larr C[i-1][j-1] +12 else3 if C[i-1][j] ge C[i][j-1] then C[i][j] larr C[i-1][j]4 else C[i][j] larr C[i][j-1]

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

37DuA - Kapitel 20

Laumlngenberechnung(Array X Y C i j)1 if xi = yj then C[i][j] larr C[i-1][j-1] +12 else3 if C[i-1][j] ge C[i][j-1] then C[i][j] larr C[i-1][j]4 else C[i][j] larr C[i][j-1]

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

38DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

39DuA - Kapitel 20

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

40DuA - Kapitel 20

00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

41DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

42DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

43DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

44DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

45DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

46DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

47DuA - Kapitel 20

0 0 0 0 0 0 00 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

48DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

49DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

50DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

51DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

52DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

53DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

54DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

55DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

56DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

57DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

58DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

59DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

60DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

61DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 200000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

62DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

63DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 3000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

64DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

65DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

66DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

67DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

68DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

69DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

70DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

71DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

72DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

73DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

74DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

75DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

76DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

77DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 31: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

31DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

32DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Tabelle fuumlr die C[i][j] Werte

anlegen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

33DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Erste Spalte der Tabelle

auf 0 setzen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

34DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Erste Reihe der Tabelle

auf 0 setzen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

35DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

36DuA - Kapitel 20

Laumlngenberechnung(Array X Y C i j)1 if xi = yj then C[i][j] larr C[i-1][j-1] +12 else3 if C[i-1][j] ge C[i][j-1] then C[i][j] larr C[i-1][j]4 else C[i][j] larr C[i][j-1]

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

37DuA - Kapitel 20

Laumlngenberechnung(Array X Y C i j)1 if xi = yj then C[i][j] larr C[i-1][j-1] +12 else3 if C[i-1][j] ge C[i][j-1] then C[i][j] larr C[i-1][j]4 else C[i][j] larr C[i][j-1]

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

38DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

39DuA - Kapitel 20

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

40DuA - Kapitel 20

00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

41DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

42DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

43DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

44DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

45DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

46DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

47DuA - Kapitel 20

0 0 0 0 0 0 00 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

48DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

49DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

50DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

51DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

52DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

53DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

54DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

55DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

56DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

57DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

58DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

59DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

60DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

61DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 200000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

62DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

63DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 3000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

64DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

65DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

66DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

67DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

68DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

69DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

70DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

71DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

72DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

73DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

74DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

75DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

76DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

77DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 32: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

32DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Tabelle fuumlr die C[i][j] Werte

anlegen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

33DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Erste Spalte der Tabelle

auf 0 setzen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

34DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Erste Reihe der Tabelle

auf 0 setzen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

35DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

36DuA - Kapitel 20

Laumlngenberechnung(Array X Y C i j)1 if xi = yj then C[i][j] larr C[i-1][j-1] +12 else3 if C[i-1][j] ge C[i][j-1] then C[i][j] larr C[i-1][j]4 else C[i][j] larr C[i][j-1]

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

37DuA - Kapitel 20

Laumlngenberechnung(Array X Y C i j)1 if xi = yj then C[i][j] larr C[i-1][j-1] +12 else3 if C[i-1][j] ge C[i][j-1] then C[i][j] larr C[i-1][j]4 else C[i][j] larr C[i][j-1]

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

38DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

39DuA - Kapitel 20

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

40DuA - Kapitel 20

00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

41DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

42DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

43DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

44DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

45DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

46DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

47DuA - Kapitel 20

0 0 0 0 0 0 00 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

48DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

49DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

50DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

51DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

52DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

53DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

54DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

55DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

56DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

57DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

58DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

59DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

60DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

61DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 200000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

62DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

63DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 3000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

64DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

65DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

66DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

67DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

68DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

69DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

70DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

71DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

72DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

73DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

74DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

75DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

76DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

77DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 33: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Tabelle fuumlr die C[i][j] Werte

anlegen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

33DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Erste Spalte der Tabelle

auf 0 setzen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

34DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Erste Reihe der Tabelle

auf 0 setzen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

35DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

36DuA - Kapitel 20

Laumlngenberechnung(Array X Y C i j)1 if xi = yj then C[i][j] larr C[i-1][j-1] +12 else3 if C[i-1][j] ge C[i][j-1] then C[i][j] larr C[i-1][j]4 else C[i][j] larr C[i][j-1]

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

37DuA - Kapitel 20

Laumlngenberechnung(Array X Y C i j)1 if xi = yj then C[i][j] larr C[i-1][j-1] +12 else3 if C[i-1][j] ge C[i][j-1] then C[i][j] larr C[i-1][j]4 else C[i][j] larr C[i][j-1]

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

38DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

39DuA - Kapitel 20

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

40DuA - Kapitel 20

00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

41DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

42DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

43DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

44DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

45DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

46DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

47DuA - Kapitel 20

0 0 0 0 0 0 00 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

48DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

49DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

50DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

51DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

52DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

53DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

54DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

55DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

56DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

57DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

58DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

59DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

60DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

61DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 200000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

62DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

63DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 3000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

64DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

65DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

66DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

67DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

68DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

69DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

70DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

71DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

72DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

73DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

74DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

75DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

76DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

77DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 34: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Erste Spalte der Tabelle

auf 0 setzen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

34DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Erste Reihe der Tabelle

auf 0 setzen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

35DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

36DuA - Kapitel 20

Laumlngenberechnung(Array X Y C i j)1 if xi = yj then C[i][j] larr C[i-1][j-1] +12 else3 if C[i-1][j] ge C[i][j-1] then C[i][j] larr C[i-1][j]4 else C[i][j] larr C[i][j-1]

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

37DuA - Kapitel 20

Laumlngenberechnung(Array X Y C i j)1 if xi = yj then C[i][j] larr C[i-1][j-1] +12 else3 if C[i-1][j] ge C[i][j-1] then C[i][j] larr C[i-1][j]4 else C[i][j] larr C[i][j-1]

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

38DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

39DuA - Kapitel 20

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

40DuA - Kapitel 20

00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

41DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

42DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

43DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

44DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

45DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

46DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

47DuA - Kapitel 20

0 0 0 0 0 0 00 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

48DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

49DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

50DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

51DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

52DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

53DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

54DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

55DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

56DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

57DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

58DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

59DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

60DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

61DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 200000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

62DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

63DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 3000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

64DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

65DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

66DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

67DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

68DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

69DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

70DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

71DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

72DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

73DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

74DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

75DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

76DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

77DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 35: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

Erste Reihe der Tabelle

auf 0 setzen

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

35DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

36DuA - Kapitel 20

Laumlngenberechnung(Array X Y C i j)1 if xi = yj then C[i][j] larr C[i-1][j-1] +12 else3 if C[i-1][j] ge C[i][j-1] then C[i][j] larr C[i-1][j]4 else C[i][j] larr C[i][j-1]

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

37DuA - Kapitel 20

Laumlngenberechnung(Array X Y C i j)1 if xi = yj then C[i][j] larr C[i-1][j-1] +12 else3 if C[i-1][j] ge C[i][j-1] then C[i][j] larr C[i-1][j]4 else C[i][j] larr C[i][j-1]

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

38DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

39DuA - Kapitel 20

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

40DuA - Kapitel 20

00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

41DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

42DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

43DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

44DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

45DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

46DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

47DuA - Kapitel 20

0 0 0 0 0 0 00 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

48DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

49DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

50DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

51DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

52DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

53DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

54DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

55DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

56DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

57DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

58DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

59DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

60DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

61DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 200000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

62DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

63DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 3000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

64DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

65DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

66DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

67DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

68DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

69DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

70DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

71DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

72DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

73DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

74DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

75DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

76DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

77DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 36: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

36DuA - Kapitel 20

Laumlngenberechnung(Array X Y C i j)1 if xi = yj then C[i][j] larr C[i-1][j-1] +12 else3 if C[i-1][j] ge C[i][j-1] then C[i][j] larr C[i-1][j]4 else C[i][j] larr C[i][j-1]

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

37DuA - Kapitel 20

Laumlngenberechnung(Array X Y C i j)1 if xi = yj then C[i][j] larr C[i-1][j-1] +12 else3 if C[i-1][j] ge C[i][j-1] then C[i][j] larr C[i-1][j]4 else C[i][j] larr C[i][j-1]

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

38DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

39DuA - Kapitel 20

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

40DuA - Kapitel 20

00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

41DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

42DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

43DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

44DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

45DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

46DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

47DuA - Kapitel 20

0 0 0 0 0 0 00 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

48DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

49DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

50DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

51DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

52DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

53DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

54DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

55DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

56DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

57DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

58DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

59DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

60DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

61DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 200000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

62DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

63DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 3000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

64DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

65DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

66DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

67DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

68DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

69DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

70DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

71DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

72DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

73DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

74DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

75DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

76DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

77DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 37: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

Laumlngenberechnung(Array X Y C i j)1 if xi = yj then C[i][j] larr C[i-1][j-1] +12 else3 if C[i-1][j] ge C[i][j-1] then C[i][j] larr C[i-1][j]4 else C[i][j] larr C[i][j-1]

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

37DuA - Kapitel 20

Laumlngenberechnung(Array X Y C i j)1 if xi = yj then C[i][j] larr C[i-1][j-1] +12 else3 if C[i-1][j] ge C[i][j-1] then C[i][j] larr C[i-1][j]4 else C[i][j] larr C[i][j-1]

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

38DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

39DuA - Kapitel 20

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

40DuA - Kapitel 20

00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

41DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

42DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

43DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

44DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

45DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

46DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

47DuA - Kapitel 20

0 0 0 0 0 0 00 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

48DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

49DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

50DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

51DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

52DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

53DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

54DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

55DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

56DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

57DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

58DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

59DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

60DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

61DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 200000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

62DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

63DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 3000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

64DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

65DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

66DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

67DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

68DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

69DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

70DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

71DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

72DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

73DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

74DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

75DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

76DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

77DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 38: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

Laumlngenberechnung(Array X Y C i j)1 if xi = yj then C[i][j] larr C[i-1][j-1] +12 else3 if C[i-1][j] ge C[i][j-1] then C[i][j] larr C[i-1][j]4 else C[i][j] larr C[i][j-1]

negtminusminus=gt+minusminus

===

ji

ji

yxjijiCjiCyxjijiC

jijiC

und falls und falls

oder falls

0]1][[]][1[max01]1][1[

000]][[

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

38DuA - Kapitel 20

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

39DuA - Kapitel 20

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

40DuA - Kapitel 20

00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

41DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

42DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

43DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

44DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

45DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

46DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

47DuA - Kapitel 20

0 0 0 0 0 0 00 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

48DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

49DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

50DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

51DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

52DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

53DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

54DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

55DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

56DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

57DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

58DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

59DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

60DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

61DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 200000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

62DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

63DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 3000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

64DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

65DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

66DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

67DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

68DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

69DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

70DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

71DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

72DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

73DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

74DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

75DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

76DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

77DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 39: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to m do7 for j larr 1 to n do8 Laumlngenberechnung(X Y C i j)9 return C

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

39DuA - Kapitel 20

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

40DuA - Kapitel 20

00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

41DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

42DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

43DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

44DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

45DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

46DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

47DuA - Kapitel 20

0 0 0 0 0 0 00 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

48DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

49DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

50DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

51DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

52DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

53DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

54DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

55DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

56DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

57DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

58DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

59DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

60DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

61DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 200000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

62DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

63DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 3000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

64DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

65DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

66DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

67DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

68DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

69DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

70DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

71DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

72DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

73DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

74DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

75DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

76DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

77DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 40: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

40DuA - Kapitel 20

00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

41DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

42DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

43DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

44DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

45DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

46DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

47DuA - Kapitel 20

0 0 0 0 0 0 00 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

48DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

49DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

50DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

51DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

52DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

53DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

54DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

55DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

56DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

57DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

58DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

59DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

60DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

61DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 200000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

62DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

63DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 3000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

64DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

65DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

66DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

67DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

68DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

69DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

70DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

71DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

72DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

73DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

74DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

75DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

76DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

77DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 41: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

41DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

42DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

43DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

44DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

45DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

46DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

47DuA - Kapitel 20

0 0 0 0 0 0 00 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

48DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

49DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

50DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

51DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

52DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

53DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

54DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

55DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

56DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

57DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

58DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

59DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

60DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

61DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 200000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

62DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

63DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 3000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

64DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

65DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

66DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

67DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

68DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

69DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

70DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

71DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

72DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

73DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

74DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

75DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

76DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

77DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 42: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

42DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

43DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

44DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

45DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

46DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

47DuA - Kapitel 20

0 0 0 0 0 0 00 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

48DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

49DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

50DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

51DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

52DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

53DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

54DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

55DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

56DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

57DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

58DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

59DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

60DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

61DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 200000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

62DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

63DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 3000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

64DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

65DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

66DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

67DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

68DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

69DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

70DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

71DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

72DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

73DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

74DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

75DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

76DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

77DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 43: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

43DuA - Kapitel 20

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

44DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

45DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

46DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

47DuA - Kapitel 20

0 0 0 0 0 0 00 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

48DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

49DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

50DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

51DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

52DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

53DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

54DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

55DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

56DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

57DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

58DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

59DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

60DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

61DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 200000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

62DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

63DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 3000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

64DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

65DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

66DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

67DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

68DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

69DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

70DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

71DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

72DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

73DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

74DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

75DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

76DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

77DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 44: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

0 0 0 0 0 0 00000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

44DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

45DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

46DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

47DuA - Kapitel 20

0 0 0 0 0 0 00 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

48DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

49DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

50DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

51DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

52DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

53DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

54DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

55DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

56DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

57DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

58DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

59DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

60DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

61DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 200000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

62DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

63DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 3000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

64DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

65DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

66DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

67DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

68DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

69DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

70DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

71DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

72DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

73DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

74DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

75DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

76DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

77DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 45: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

45DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

46DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

47DuA - Kapitel 20

0 0 0 0 0 0 00 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

48DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

49DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

50DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

51DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

52DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

53DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

54DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

55DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

56DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

57DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

58DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

59DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

60DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

61DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 200000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

62DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

63DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 3000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

64DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

65DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

66DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

67DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

68DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

69DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

70DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

71DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

72DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

73DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

74DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

75DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

76DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

77DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 46: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

46DuA - Kapitel 20

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

47DuA - Kapitel 20

0 0 0 0 0 0 00 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

48DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

49DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

50DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

51DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

52DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

53DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

54DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

55DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

56DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

57DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

58DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

59DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

60DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

61DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 200000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

62DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

63DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 3000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

64DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

65DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

66DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

67DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

68DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

69DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

70DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

71DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

72DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

73DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

74DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

75DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

76DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

77DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 47: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

0 0 0 0 0 0 00 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

47DuA - Kapitel 20

0 0 0 0 0 0 00 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

48DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

49DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

50DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

51DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

52DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

53DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

54DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

55DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

56DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

57DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

58DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

59DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

60DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

61DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 200000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

62DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

63DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 3000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

64DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

65DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

66DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

67DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

68DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

69DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

70DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

71DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

72DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

73DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

74DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

75DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

76DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

77DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 48: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

0 0 0 0 0 0 00 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

48DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

49DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

50DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

51DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

52DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

53DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

54DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

55DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

56DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

57DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

58DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

59DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

60DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

61DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 200000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

62DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

63DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 3000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

64DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

65DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

66DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

67DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

68DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

69DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

70DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

71DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

72DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

73DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

74DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

75DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

76DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

77DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 49: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

49DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

50DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

51DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

52DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

53DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

54DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

55DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

56DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

57DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

58DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

59DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

60DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

61DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 200000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

62DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

63DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 3000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

64DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

65DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

66DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

67DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

68DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

69DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

70DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

71DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

72DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

73DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

74DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

75DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

76DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

77DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 50: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

50DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

51DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

52DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

53DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

54DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

55DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

56DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

57DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

58DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

59DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

60DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

61DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 200000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

62DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

63DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 3000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

64DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

65DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

66DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

67DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

68DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

69DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

70DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

71DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

72DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

73DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

74DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

75DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

76DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

77DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 51: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

0 0 0 0 0 0 00 0 0 0000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

51DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

52DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

53DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

54DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

55DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

56DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

57DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

58DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

59DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

60DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

61DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 200000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

62DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

63DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 3000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

64DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

65DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

66DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

67DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

68DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

69DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

70DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

71DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

72DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

73DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

74DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

75DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

76DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

77DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 52: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

52DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

53DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

54DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

55DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

56DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

57DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

58DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

59DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

60DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

61DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 200000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

62DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

63DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 3000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

64DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

65DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

66DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

67DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

68DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

69DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

70DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

71DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

72DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

73DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

74DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

75DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

76DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

77DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 53: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

53DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

54DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

55DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

56DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

57DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

58DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

59DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

60DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

61DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 200000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

62DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

63DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 3000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

64DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

65DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

66DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

67DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

68DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

69DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

70DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

71DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

72DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

73DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

74DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

75DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

76DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

77DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 54: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

0 0 0 0 0 0 00 0 0 0 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

54DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

55DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

56DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

57DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

58DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

59DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

60DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

61DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 200000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

62DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

63DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 3000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

64DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

65DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

66DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

67DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

68DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

69DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

70DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

71DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

72DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

73DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

74DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

75DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

76DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

77DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 55: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

55DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

56DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

57DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

58DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

59DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

60DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

61DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 200000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

62DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

63DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 3000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

64DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

65DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

66DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

67DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

68DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

69DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

70DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

71DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

72DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

73DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

74DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

75DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

76DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

77DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 56: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

56DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

57DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

58DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

59DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

60DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

61DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 200000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

62DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

63DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 3000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

64DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

65DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

66DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

67DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

68DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

69DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

70DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

71DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

72DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

73DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

74DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

75DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

76DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

77DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 57: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

0 0 0 0 0 0 00 0 0 0 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

57DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

58DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

59DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

60DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

61DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 200000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

62DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

63DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 3000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

64DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

65DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

66DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

67DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

68DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

69DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

70DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

71DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

72DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

73DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

74DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

75DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

76DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

77DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 58: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

0 0 0 0 0 0 00 0 0 0 1 1 1000000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

58DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

59DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

60DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

61DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 200000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

62DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

63DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 3000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

64DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

65DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

66DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

67DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

68DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

69DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

70DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

71DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

72DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

73DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

74DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

75DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

76DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

77DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 59: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

0 0 0 0 0 0 00 0 0 0 1 1 10 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

59DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

60DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

61DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 200000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

62DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

63DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 3000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

64DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

65DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

66DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

67DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

68DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

69DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

70DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

71DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

72DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

73DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

74DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

75DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

76DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

77DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 60: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

0 0 0 0 0 0 00 0 0 0 1 1 10 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

60DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

61DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 200000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

62DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

63DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 3000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

64DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

65DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

66DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

67DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

68DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

69DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

70DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

71DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

72DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

73DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

74DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

75DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

76DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

77DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 61: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 100000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

61DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 200000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

62DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

63DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 3000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

64DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

65DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

66DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

67DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

68DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

69DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

70DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

71DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

72DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

73DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

74DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

75DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

76DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

77DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 62: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 200000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

62DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

63DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 3000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

64DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

65DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

66DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

67DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

68DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

69DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

70DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

71DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

72DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

73DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

74DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

75DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

76DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

77DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 63: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

63DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 3000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

64DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

65DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

66DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

67DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

68DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

69DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

70DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

71DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

72DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

73DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

74DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

75DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

76DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

77DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 64: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 3000

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

64DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

65DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

66DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

67DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

68DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

69DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

70DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

71DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

72DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

73DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

74DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

75DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

76DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

77DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 65: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

65DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

66DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

67DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

68DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

69DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

70DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

71DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

72DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

73DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

74DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

75DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

76DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

77DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 66: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

66DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

67DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

68DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

69DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

70DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

71DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

72DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

73DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

74DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

75DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

76DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

77DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 67: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

67DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

68DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

69DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

70DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

71DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

72DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

73DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

74DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

75DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

76DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

77DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 68: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

68DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

69DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

70DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

71DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

72DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

73DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

74DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

75DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

76DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

77DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 69: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

69DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

70DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

71DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

72DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

73DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

74DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

75DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

76DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

77DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 70: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

70DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

71DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

72DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

73DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

74DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

75DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

76DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

77DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 71: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

71DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

72DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

73DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

74DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

75DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

76DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

77DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 72: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

72DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

73DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

74DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

75DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

76DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

77DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 73: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

73DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

74DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

75DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

76DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

77DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 74: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

74DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

75DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

76DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

77DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 75: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

75DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

76DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

77DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 76: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

76DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

77DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 77: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

77DuA - Kapitel 20

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 78: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4

j 0 1 2 3 4 5 6yj B D C A B Ai

0 xi

1 A2 B3 C4 B5 D6 A7 B

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

78DuA - Kapitel 20

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 79: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

Lemma 203Der Algorithmus LCS-Laumlnge hat Laufzeit O(nm) wenn die

Folgen XY Laumlnge n und m haben

Lemma 204Die Ausgabe der laumlngsten gemeinsamen Teilfolge anhand

der Tabelle hat Laufzeit O(n+m) wenn die Folgen XY Laumlnge n und m haben

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

79DuA - Kapitel 20

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 80: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

1 Bestimme rekursive Struktur einer optimalen Loumlsung

2 Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Loumlsung

3 Transformiere rekursive Methode in eine iterative Methode zur Bestimmung des Wertes einer optimalen Loumlsung

4 Bestimme aus dem Wert einer optimalen Loumlsung und den in 3 berechneten Zusatzinformationen eine optimale Loumlsung

SS 2017

Dynamische ProgrammierungLaumlngste gemeinsame Teilfolge

80DuA - Kapitel 20

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 81: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

SS 2017 DuA - Kapitel 20 81

Fraktionales Rucksack-Problem

Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert iv und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben Zulaumlssige Loumlsungen sind Zahlen [ ]10ai isin mit

Gesucht ist eine zulaumlssige Loumlsung n1 aa mit

moumlglichst groszligem Gesamtwert

Wgan

1iii lesum

=

van

1iiisum

=

middot Gegeben sind n Gegenstaumlnde Der i-te Gegen- stand besitzt Wert

image7wmf

v

a

n

1

i

i

i

aring

=

und Gewicht gi Ausserdem ist eine Gewichtsschranke W gegeben

middot image1wmf

i

v

Zulaumlssige Loumlsungen sind Zahlen

image2wmf

[

]

1

0

a

i

Icirc

mit

middot image4wmf

W

g

a

n

1

i

i

i

pound

aring

=

Gesucht ist eine zulaumlssige Loumlsung

image3wmf

n

1

a

a

K

mit moumlglichst groszligem Gesamtwert

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image5wmf

v

a

n

1

i

i

i

aring

=

image6wmf

W

g

a

n

1

i

i

i

pound

aring

=

_1180800675unknown

_1180800851unknown

_1277472166unknown

_1180800829unknown

_1180800610unknown

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 82: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

SS 2017 DuA - Kapitel 20 82

Gierige Loumlsung des fraktionalen Rucksack-Problems

Algorithmus Gieriges-Einpacken 1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

fuumlr Permutation π auf (1hellipn)

2 Bestimme maximales k so dass noch gilt ( ) Wgk

1iiπ lesum

=

3 Setze ( ) ( ) ( ) 121 ==== kaaa πππ und setze Alle anderen ia setze auf 0

( ) ( ) ( ) ( ) ( ) ( )nπnπ2π2π1π1π gvgvgv gege

( )( )

( )

ggW

a1kπ

k

1i iπ1kπ

+

=+

summinus=

Algorithmus Gieriges-Einpacken

1 Sortiere die Verhaumlltnisse vi gi absteigend Sei

image1wmf

p

fuumlr Permutation

image8wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

auf (1hellipn)

2 Bestimme maximales k so dass noch gilt

image2wmf

(

)

W

g

k

1

i

i

π

pound

aring

=

3 Setze

image3wmf

(

)

(

)

(

)

1

2

1

=

=

=

=

k

a

a

a

p

p

p

L

und setze

image5wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

Alle anderen

image4wmf

i

a

setze auf 0

EMBED Equation3 13

13

EMBED Equation3 13

13

13

image6wmf

(

)

(

)

(

)

g

g

W

a

1

k

π

k

1

i

i

π

1

k

π

+

=

+

aring

-

=

image7wmf

(

)

(

)

(

)

(

)

(

)

(

)

n

π

n

π

2

π

2

π

1

π

1

π

g

v

g

v

g

v

L

sup3

sup3

_1277472413unknown

_1347715719unknown

_1277472414unknown

_1180801732unknown

_1277472212unknown

_1180801263unknown

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 83: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

SS 2017 DuA - Kapitel 20 83

Gieriges Einpacken ist optimal

Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal

Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit

g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch

bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)

bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 84: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

84

Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und

unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert

mitnehmen

84SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 85: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

85

Beispielbull Rucksackgroumlszlige 6

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

85SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 86: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

86

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

86SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 87: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

87

Beispielbull Rucksackgroumlszlige 6

bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15

Groumlszlige 5 2 1 3 7 4

Wert 11 5 2 8 14 9

87SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 88: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

88

Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn

Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W

bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]

iisinS

iisinS

88SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 89: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

89

Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung

aus Objekten 1 bis i bei Rucksackgroumlszlige w

Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)

Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)

Opt(nW) = v[n] + Opt(n-1W-g[n])

89SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 90: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

90

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

90SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 91: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

91

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt passt in den Rucksack

91SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 92: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

92

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Kein Objekt steht zur Auswahl

92SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 93: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

93

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Passt aktuelles Objekt in den Rucksack

93SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 94: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

94

Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

Sonst verwende Rekursion

94SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 95: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

95

Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle

0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]

95SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 96: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

96

Beispiel

000000000 0 0 0 0 0 0 0 0

g v5 23 41 12 31 27 34 73 3

Groumlszlige Wert

0 1 W

0

1

n

1

2

n

96SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 97: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

97

Beispiel

00000000 0 0 0 00 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g[1]gtWAlso Opt(iw) = Opt(i-1w)

g v5 23 41 12 31 27 34 73 3

1

2

97SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 98: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

98

Beispiel

00000000 0 0 0 0 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])

g v5 23 41 12 31 27 34 73 3

1

2

98SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 99: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

99

Beispiel

00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

99SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 100: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

100

Beispiel

00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

100SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 101: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

101

Beispiel

00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

101SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 102: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

102

Beispiel

0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

102SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 103: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

103

Beispiel

0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

103SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 104: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

104

Beispiel

0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

104SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 105: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

105

Beispiel

0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

105SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 106: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

106

Beispiel

000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

106SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 107: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

107

Beispiel

000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

107SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 108: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

108

Beispiel

000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

108SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 109: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

109

Beispiel

000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

109SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 110: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

110

Beispiel

00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

110SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 111: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

111

Beispiel

0000 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

111SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 112: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

112

Beispiel

000 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

112SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 113: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

113

Beispiel

00 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

113SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 114: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

114

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

114SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 115: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

115

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

Optimaler Loumlsungswert fuumlr W=8

115SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 116: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

116

Beispiel

0 2 3 5 7 9 10 12 13

0 2 3 5 7 9 10 12 13

0 2 3 5 6 7 9 10 10

0 2 3 5 6 7 9 10 10

0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0

Groumlszlige Wert

0 1 W

0

1

n

n

g v5 23 41 12 31 27 34 73 3

1

2

116SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

Optimaler Loumlsungswert fuumlr W=8

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 117: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

117

Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert

einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks

117SS 2017 DuA - Kapitel 20

Dynamisches Programmieren ndash Rucksack

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 118: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz

von u nach v sowie einen kuumlrzesten Weg

21

-15

8

4

-4

5

6

7

a

a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0

b c

f

ed

SS 2017 DuA - Kapitel 20 118

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 119: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

SS 2017 DuA - Kapitel 20 119

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 120: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Knoten k tritt maximal einmal auf

SS 2017 DuA - Kapitel 20 120

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 121: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 121

Dynamische Programmierung - APSP

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 122: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus

erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt

bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt

bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft

ij

k

Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1

SS 2017 DuA - Kapitel 20 122

Dynamische Programmierung - APSP

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 123: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

123

bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt

von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1

ij

kFall (b)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 124: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

124

Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten

aus 1hellipk

bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung

d = w falls k=0min ( d d + d ) falls kge1

ij(k)

(k)(k-1) (k-1) (k-1)ij ijij ik kj

(n)ij(n)

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 125: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

125

Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D

(0)

(k)ij

(n)

(k-1)ij

(k-1)ik

(k-1)kj

SS 2017 DuA - Kapitel 20

Dynamische Programmierung - APSP

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 126: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

126

Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung

ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )

2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann

126SS 2017 DuA - Kapitel 20

Dynamische Programmierung

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 127: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

127

Beispiel 1 Matrixketten-Multiplikation

Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist

Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen

Beobachtung bull Sei Aij = AisdothellipsdotAj

bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)

127SS 2017 DuA - Kapitel 20

Dynamische Programmierung

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 128: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

128

bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen

Initialfall m[ii]=0 fuumlr alle iisin1hellipn

Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj

Optimaler Wert m[1n]

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1

128SS 2017 DuA - Kapitel 20

Dynamische Programmierung

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 129: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

129

Beispiel 2 Optimaler binaumlrer Suchbaum

Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1

Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T

(Tiefe der Wurzel ist 0) )

129SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 130: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

130

bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj

Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion

m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert

m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus

130SS 2017 DuA - Kapitel 20

Dynamische Programmierung

j

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 131: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

131

Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph

Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw

Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G

131SS 2017 DuA - Kapitel 20

Dynamische Programmierung

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 132: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

132

bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G

bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE

Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion

L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj

Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)

Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus

132SS 2017 DuA - Kapitel 20

Dynamische Programmierung

Falls die Menge leer ist ist maxhellip=0

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 133: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

133

Beispiel 4 Fahrstuhloptimierung

Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ

Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet

133SS 2017 DuA - Kapitel 20

Dynamische Programmierung

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 134: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

134

bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist

bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)

Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn

Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1

Optimaler Wert mink+1leilef m[ik]

134SS 2017 DuA - Kapitel 20

Dynamische Programmierung

n

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135
Page 135: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme

135

Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen

Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium

Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung

135SS 2017 DuA - Kapitel 20

Dynamische Programmierung

  • Foliennummer 1
  • Foliennummer 2
  • Foliennummer 3
  • Foliennummer 4
  • Foliennummer 5
  • Foliennummer 6
  • Foliennummer 7
  • Foliennummer 8
  • Foliennummer 9
  • Foliennummer 10
  • Foliennummer 11
  • Foliennummer 12
  • Foliennummer 13
  • Foliennummer 14
  • Foliennummer 15
  • Foliennummer 16
  • Foliennummer 17
  • Foliennummer 18
  • Foliennummer 19
  • Foliennummer 20
  • Foliennummer 21
  • Foliennummer 22
  • Foliennummer 23
  • Foliennummer 24
  • Foliennummer 25
  • Foliennummer 26
  • Foliennummer 27
  • Foliennummer 28
  • Foliennummer 29
  • Foliennummer 30
  • Foliennummer 31
  • Foliennummer 32
  • Foliennummer 33
  • Foliennummer 34
  • Foliennummer 35
  • Foliennummer 36
  • Foliennummer 37
  • Foliennummer 38
  • Foliennummer 39
  • Foliennummer 40
  • Foliennummer 41
  • Foliennummer 42
  • Foliennummer 43
  • Foliennummer 44
  • Foliennummer 45
  • Foliennummer 46
  • Foliennummer 47
  • Foliennummer 48
  • Foliennummer 49
  • Foliennummer 50
  • Foliennummer 51
  • Foliennummer 52
  • Foliennummer 53
  • Foliennummer 54
  • Foliennummer 55
  • Foliennummer 56
  • Foliennummer 57
  • Foliennummer 58
  • Foliennummer 59
  • Foliennummer 60
  • Foliennummer 61
  • Foliennummer 62
  • Foliennummer 63
  • Foliennummer 64
  • Foliennummer 65
  • Foliennummer 66
  • Foliennummer 67
  • Foliennummer 68
  • Foliennummer 69
  • Foliennummer 70
  • Foliennummer 71
  • Foliennummer 72
  • Foliennummer 73
  • Foliennummer 74
  • Foliennummer 75
  • Foliennummer 76
  • Foliennummer 77
  • Foliennummer 78
  • Foliennummer 79
  • Foliennummer 80
  • Fraktionales Rucksack-Problem
  • Gierige Loumlsung des fraktionalen Rucksack-Problems
  • Gieriges Einpacken ist optimal
  • Foliennummer 84
  • Foliennummer 85
  • Foliennummer 86
  • Foliennummer 87
  • Foliennummer 88
  • Foliennummer 89
  • Foliennummer 90
  • Foliennummer 91
  • Foliennummer 92
  • Foliennummer 93
  • Foliennummer 94
  • Foliennummer 95
  • Foliennummer 96
  • Foliennummer 97
  • Foliennummer 98
  • Foliennummer 99
  • Foliennummer 100
  • Foliennummer 101
  • Foliennummer 102
  • Foliennummer 103
  • Foliennummer 104
  • Foliennummer 105
  • Foliennummer 106
  • Foliennummer 107
  • Foliennummer 108
  • Foliennummer 109
  • Foliennummer 110
  • Foliennummer 111
  • Foliennummer 112
  • Foliennummer 113
  • Foliennummer 114
  • Foliennummer 115
  • Foliennummer 116
  • Foliennummer 117
  • Foliennummer 118
  • Foliennummer 119
  • Foliennummer 120
  • Foliennummer 121
  • Foliennummer 122
  • Foliennummer 123
  • Foliennummer 124
  • Foliennummer 125
  • Foliennummer 126
  • Foliennummer 127
  • Foliennummer 128
  • Foliennummer 129
  • Foliennummer 130
  • Foliennummer 131
  • Foliennummer 132
  • Foliennummer 133
  • Foliennummer 134
  • Foliennummer 135