20. dynamische programmierung gierige algorithmen · dua - kapitel 20. 1. divide&conquer: •...
TRANSCRIPT
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
=
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
=
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
=
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
=
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
=
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
=
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
=
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
=
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
=
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
=
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
=
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
=
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
=
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
=
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
=
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
=
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
=
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
=
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
=
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
=
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
=
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
=
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
=
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
=
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
=
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
=
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
=
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
=
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
=
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
=
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
=
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
=
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
=
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
=
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
=
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
=
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
=
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
=
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
=
j 0 1 2 3 4 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
=
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
=
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
=
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
=
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
=
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
=
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
=
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
=
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
=
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
=
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
=
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
=
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
=
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
=
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
=
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
=
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
=
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
=
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
=
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
=
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
=
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
=
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
=
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
=
0 0 0 0 0 0 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
=
0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4
j 0 1 2 3 4 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
=
0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4
j 0 1 2 3 4 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
=
0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4
j 0 1 2 3 4 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
=
0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4
j 0 1 2 3 4 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
=
0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4
j 0 1 2 3 4 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
=
0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4
j 0 1 2 3 4 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
=
0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4
j 0 1 2 3 4 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
=
0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4
j 0 1 2 3 4 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
=
0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4
j 0 1 2 3 4 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
=
0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4
j 0 1 2 3 4 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
=
0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4
j 0 1 2 3 4 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
=
0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4
j 0 1 2 3 4 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
=
0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4
j 0 1 2 3 4 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
=
0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4
j 0 1 2 3 4 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
=
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
=
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
=
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
=
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=
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also 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
-
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also 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
-
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also 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
-
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also 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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-