![Page 1: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/1.jpg)
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
=
![Page 2: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/2.jpg)
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
=
![Page 3: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/3.jpg)
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
=
![Page 4: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/4.jpg)
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
=
![Page 5: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/5.jpg)
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
=
![Page 6: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/6.jpg)
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
=
![Page 7: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/7.jpg)
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
=
![Page 8: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/8.jpg)
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
=
![Page 9: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/9.jpg)
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
=
![Page 10: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/10.jpg)
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
=
![Page 11: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/11.jpg)
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
=
![Page 12: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/12.jpg)
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
=
![Page 13: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/13.jpg)
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
=
![Page 14: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/14.jpg)
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
=
![Page 15: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/15.jpg)
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
=
![Page 16: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/16.jpg)
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
=
![Page 17: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/17.jpg)
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
=
![Page 18: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/18.jpg)
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
=
![Page 19: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/19.jpg)
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
=
![Page 20: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/20.jpg)
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
=
![Page 21: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/21.jpg)
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
=
![Page 22: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/22.jpg)
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
=
![Page 23: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/23.jpg)
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
=
![Page 24: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/24.jpg)
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
=
![Page 25: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/25.jpg)
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
=
![Page 26: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/26.jpg)
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
=
![Page 27: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/27.jpg)
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
=
![Page 28: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/28.jpg)
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
=
![Page 29: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/29.jpg)
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
=
![Page 30: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/30.jpg)
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
=
![Page 31: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/31.jpg)
LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to 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
=
![Page 32: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/32.jpg)
LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to 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
=
![Page 33: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/33.jpg)
LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 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
=
![Page 34: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/34.jpg)
LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 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
=
![Page 35: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/35.jpg)
LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 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
=
![Page 36: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/36.jpg)
LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to 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
=
![Page 37: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/37.jpg)
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
=
![Page 38: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/38.jpg)
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
=
![Page 39: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/39.jpg)
LCS-Laumlnge(Array X Y)1 m larr length[X]2 n larr length[Y]3 new array C[0m][0n]4 for i larr 0 to m do C[i][0] larr 05 for j larr 0 to n do C[0][j] larr 06 for i larr 1 to 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
=
![Page 40: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/40.jpg)
j 0 1 2 3 4 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
=
![Page 41: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/41.jpg)
00000000
j 0 1 2 3 4 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
=
![Page 42: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/42.jpg)
0 0 0 0 0 0 00000000
j 0 1 2 3 4 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
=
![Page 43: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/43.jpg)
0 0 0 0 0 0 00000000
j 0 1 2 3 4 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
=
![Page 44: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/44.jpg)
0 0 0 0 0 0 00000000
j 0 1 2 3 4 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
=
![Page 45: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/45.jpg)
0 0 0 0 0 0 00 0000000
j 0 1 2 3 4 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
=
![Page 46: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/46.jpg)
0 0 0 0 0 0 00 0000000
j 0 1 2 3 4 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
=
![Page 47: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/47.jpg)
0 0 0 0 0 0 00 0000000
j 0 1 2 3 4 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
=
![Page 48: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/48.jpg)
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
=
![Page 49: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/49.jpg)
0 0 0 0 0 0 00 0 0 0000000
j 0 1 2 3 4 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
=
![Page 50: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/50.jpg)
0 0 0 0 0 0 00 0 0 0000000
j 0 1 2 3 4 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
=
![Page 51: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/51.jpg)
0 0 0 0 0 0 00 0 0 0000000
j 0 1 2 3 4 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
=
![Page 52: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/52.jpg)
0 0 0 0 0 0 00 0 0 0 1000000
j 0 1 2 3 4 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
=
![Page 53: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/53.jpg)
0 0 0 0 0 0 00 0 0 0 1000000
j 0 1 2 3 4 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
=
![Page 54: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/54.jpg)
0 0 0 0 0 0 00 0 0 0 1000000
j 0 1 2 3 4 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
=
![Page 55: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/55.jpg)
0 0 0 0 0 0 00 0 0 0 1 1000000
j 0 1 2 3 4 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
=
![Page 56: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/56.jpg)
0 0 0 0 0 0 00 0 0 0 1 1000000
j 0 1 2 3 4 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
=
![Page 57: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/57.jpg)
0 0 0 0 0 0 00 0 0 0 1 1000000
j 0 1 2 3 4 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
=
![Page 58: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/58.jpg)
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
=
![Page 59: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/59.jpg)
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
=
![Page 60: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/60.jpg)
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
=
![Page 61: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/61.jpg)
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
=
![Page 62: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/62.jpg)
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
=
![Page 63: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/63.jpg)
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
=
![Page 64: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/64.jpg)
0 0 0 0 0 0 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
=
![Page 65: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/65.jpg)
0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4
j 0 1 2 3 4 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
=
![Page 66: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/66.jpg)
0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4
j 0 1 2 3 4 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
=
![Page 67: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/67.jpg)
0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4
j 0 1 2 3 4 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
=
![Page 68: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/68.jpg)
0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4
j 0 1 2 3 4 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
=
![Page 69: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/69.jpg)
0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4
j 0 1 2 3 4 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
=
![Page 70: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/70.jpg)
0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4
j 0 1 2 3 4 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
=
![Page 71: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/71.jpg)
0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4
j 0 1 2 3 4 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
=
![Page 72: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/72.jpg)
0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4
j 0 1 2 3 4 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
=
![Page 73: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/73.jpg)
0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4
j 0 1 2 3 4 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
=
![Page 74: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/74.jpg)
0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4
j 0 1 2 3 4 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
=
![Page 75: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/75.jpg)
0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4
j 0 1 2 3 4 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
=
![Page 76: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/76.jpg)
0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4
j 0 1 2 3 4 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
=
![Page 77: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/77.jpg)
0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4
j 0 1 2 3 4 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
=
![Page 78: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/78.jpg)
0 0 0 0 0 0 00 0 0 0 1 1 10 1 1 1 1 2 20 1 1 2 2 2 20 1 1 2 2 3 30 1 2 2 2 3 30 1 2 2 3 3 40 1 2 2 3 4 4
j 0 1 2 3 4 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
=
![Page 79: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/79.jpg)
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
=
![Page 80: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/80.jpg)
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
=
![Page 81: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/81.jpg)
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
=
![Page 82: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/82.jpg)
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=
![Page 83: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/83.jpg)
SS 2017 DuA - Kapitel 20 83
Gieriges Einpacken ist optimal
Satz 205 Gieriges Einpacken loumlst das fraktionaleRucksackproblem optimal
Beweisbull Sei (gvW) ein beliebiges fraktionales Rucksackproblem mit
g1hellipnrarrℕ v1hellipnrarrℕ und Wisinℕbull Betrachte das Rucksackproblem (gacutevacuteW) fuumlr das fuumlr jeden Gegenstand i im originalen Rucksackproblem gi Stuumlcke mit Gewicht gacutei=1 und Wert vacutei=vigi existieren Sei nacute=Σi gi die daraus resultierende Anzahl an Gegenstaumlnden Offensichtlich sind dieoptimalen Werte fuumlr beide Probleme identisch
bull Sei Sacutesube1hellipnacute eine optimale Loumlsung fuumlr (gacutevacuteW) Dann gilt fuumlr alle jisin1hellipnacuteSacute dass vacutej le miniisinS vacutei ist (Sonst wuumlrde einAustausch den Wert verbessern)
bull Da der Wert von Sacute dem des gierigen Einpackens fuumlr (gvW)entspricht folgt Satz 205
84
Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und
unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert
mitnehmen
84SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
85
Beispielbull Rucksackgroumlszlige 6
Groumlszlige 5 2 1 3 7 4
Wert 11 5 2 8 14 9
85SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
86
Beispielbull Rucksackgroumlszlige 6
bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal
Groumlszlige 5 2 1 3 7 4
Wert 11 5 2 8 14 9
86SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
87
Beispielbull Rucksackgroumlszlige 6
bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15
Groumlszlige 5 2 1 3 7 4
Wert 11 5 2 8 14 9
87SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
88
Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn
Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W
bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]
iisinS
iisinS
88SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
89
Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung
aus Objekten 1 bis i bei Rucksackgroumlszlige w
Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)
Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)
Opt(nW) = v[n] + Opt(n-1W-g[n])
89SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
90
Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst
Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])
90SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
91
Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst
Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])
Kein Objekt passt in den Rucksack
91SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
92
Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst
Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])
Kein Objekt steht zur Auswahl
92SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
93
Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst
Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])
Passt aktuelles Objekt in den Rucksack
93SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
94
Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst
Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])
Sonst verwende Rekursion
94SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
95
Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle
0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]
95SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
96
Beispiel
000000000 0 0 0 0 0 0 0 0
g v5 23 41 12 31 27 34 73 3
Groumlszlige Wert
0 1 W
0
1
n
1
2
n
96SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
97
Beispiel
00000000 0 0 0 00 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g[1]gtWAlso Opt(iw) = Opt(i-1w)
g v5 23 41 12 31 27 34 73 3
1
2
97SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
98
Beispiel
00000000 0 0 0 0 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])
g v5 23 41 12 31 27 34 73 3
1
2
98SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
99
Beispiel
00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
99SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
100
Beispiel
00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
100SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
101
Beispiel
00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
101SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
102
Beispiel
0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
102SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
103
Beispiel
0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
103SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
104
Beispiel
0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
104SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
105
Beispiel
0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
105SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
106
Beispiel
000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
106SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
107
Beispiel
000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
107SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
108
Beispiel
000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
108SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
109
Beispiel
000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
109SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
110
Beispiel
00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
110SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
111
Beispiel
0000 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
111SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
112
Beispiel
000 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
112SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
113
Beispiel
00 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
113SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
114
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
114SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
115
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
Optimaler Loumlsungswert fuumlr W=8
115SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
116
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
116SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
Optimaler Loumlsungswert fuumlr W=8
117
Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert
einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks
117SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz
von u nach v sowie einen kuumlrzesten Weg
21
-15
8
4
-4
5
6
7
a
a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0
b c
f
ed
SS 2017 DuA - Kapitel 20 118
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
SS 2017 DuA - Kapitel 20 119
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Knoten k tritt maximal einmal auf
SS 2017 DuA - Kapitel 20 120
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 121
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 122
Dynamische Programmierung - APSP
123
bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt
von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1
ij
kFall (b)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
124
Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten
aus 1hellipk
bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung
d = w falls k=0min ( d d + d ) falls kge1
ij(k)
(k)(k-1) (k-1) (k-1)ij ijij ik kj
(n)ij(n)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
125
Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D
(0)
(k)ij
(n)
(k-1)ij
(k-1)ik
(k-1)kj
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
126
Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung
ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )
2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann
126SS 2017 DuA - Kapitel 20
Dynamische Programmierung
127
Beispiel 1 Matrixketten-Multiplikation
Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist
Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen
Beobachtung bull Sei Aij = AisdothellipsdotAj
bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)
127SS 2017 DuA - Kapitel 20
Dynamische Programmierung
128
bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen
Initialfall m[ii]=0 fuumlr alle iisin1hellipn
Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj
Optimaler Wert m[1n]
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1
128SS 2017 DuA - Kapitel 20
Dynamische Programmierung
129
Beispiel 2 Optimaler binaumlrer Suchbaum
Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1
Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T
(Tiefe der Wurzel ist 0) )
129SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
130
bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj
Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion
m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert
m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus
130SS 2017 DuA - Kapitel 20
Dynamische Programmierung
j
131
Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph
Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw
Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G
131SS 2017 DuA - Kapitel 20
Dynamische Programmierung
132
bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G
bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE
Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion
L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj
Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus
132SS 2017 DuA - Kapitel 20
Dynamische Programmierung
Falls die Menge leer ist ist maxhellip=0
133
Beispiel 4 Fahrstuhloptimierung
Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ
Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet
133SS 2017 DuA - Kapitel 20
Dynamische Programmierung
134
bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist
bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)
Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn
Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1
Optimaler Wert mink+1leilef m[ik]
134SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
135
Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen
Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium
Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung
135SS 2017 DuA - Kapitel 20
Dynamische Programmierung
- Foliennummer 1
- Foliennummer 2
- Foliennummer 3
- Foliennummer 4
- Foliennummer 5
- Foliennummer 6
- Foliennummer 7
- Foliennummer 8
- Foliennummer 9
- Foliennummer 10
- Foliennummer 11
- Foliennummer 12
- Foliennummer 13
- Foliennummer 14
- Foliennummer 15
- Foliennummer 16
- Foliennummer 17
- Foliennummer 18
- Foliennummer 19
- Foliennummer 20
- Foliennummer 21
- Foliennummer 22
- Foliennummer 23
- Foliennummer 24
- Foliennummer 25
- Foliennummer 26
- Foliennummer 27
- Foliennummer 28
- Foliennummer 29
- Foliennummer 30
- Foliennummer 31
- Foliennummer 32
- Foliennummer 33
- Foliennummer 34
- Foliennummer 35
- Foliennummer 36
- Foliennummer 37
- Foliennummer 38
- Foliennummer 39
- Foliennummer 40
- Foliennummer 41
- Foliennummer 42
- Foliennummer 43
- Foliennummer 44
- Foliennummer 45
- Foliennummer 46
- Foliennummer 47
- Foliennummer 48
- Foliennummer 49
- Foliennummer 50
- Foliennummer 51
- Foliennummer 52
- Foliennummer 53
- Foliennummer 54
- Foliennummer 55
- Foliennummer 56
- Foliennummer 57
- Foliennummer 58
- Foliennummer 59
- Foliennummer 60
- Foliennummer 61
- Foliennummer 62
- Foliennummer 63
- Foliennummer 64
- Foliennummer 65
- Foliennummer 66
- Foliennummer 67
- Foliennummer 68
- Foliennummer 69
- Foliennummer 70
- Foliennummer 71
- Foliennummer 72
- Foliennummer 73
- Foliennummer 74
- Foliennummer 75
- Foliennummer 76
- Foliennummer 77
- Foliennummer 78
- Foliennummer 79
- Foliennummer 80
- Fraktionales Rucksack-Problem
- Gierige Loumlsung des fraktionalen Rucksack-Problems
- Gieriges Einpacken ist optimal
- Foliennummer 84
- Foliennummer 85
- Foliennummer 86
- Foliennummer 87
- Foliennummer 88
- Foliennummer 89
- Foliennummer 90
- Foliennummer 91
- Foliennummer 92
- Foliennummer 93
- Foliennummer 94
- Foliennummer 95
- Foliennummer 96
- Foliennummer 97
- Foliennummer 98
- Foliennummer 99
- Foliennummer 100
- Foliennummer 101
- Foliennummer 102
- Foliennummer 103
- Foliennummer 104
- Foliennummer 105
- Foliennummer 106
- Foliennummer 107
- Foliennummer 108
- Foliennummer 109
- Foliennummer 110
- Foliennummer 111
- Foliennummer 112
- Foliennummer 113
- Foliennummer 114
- Foliennummer 115
- Foliennummer 116
- Foliennummer 117
- Foliennummer 118
- Foliennummer 119
- Foliennummer 120
- Foliennummer 121
- Foliennummer 122
- Foliennummer 123
- Foliennummer 124
- Foliennummer 125
- Foliennummer 126
- Foliennummer 127
- Foliennummer 128
- Foliennummer 129
- Foliennummer 130
- Foliennummer 131
- Foliennummer 132
- Foliennummer 133
- Foliennummer 134
- Foliennummer 135
-
![Page 84: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/84.jpg)
84
Das Rucksackproblembull Rucksack mit begrenzter Kapazitaumltbull Objekte mit unterschiedlichem Wert und
unterschiedlicher Groumlszligebull Wir wollen Objekte von moumlglichst groszligem Gesamtwert
mitnehmen
84SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
85
Beispielbull Rucksackgroumlszlige 6
Groumlszlige 5 2 1 3 7 4
Wert 11 5 2 8 14 9
85SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
86
Beispielbull Rucksackgroumlszlige 6
bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal
Groumlszlige 5 2 1 3 7 4
Wert 11 5 2 8 14 9
86SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
87
Beispielbull Rucksackgroumlszlige 6
bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15
Groumlszlige 5 2 1 3 7 4
Wert 11 5 2 8 14 9
87SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
88
Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn
Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W
bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]
iisinS
iisinS
88SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
89
Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung
aus Objekten 1 bis i bei Rucksackgroumlszlige w
Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)
Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)
Opt(nW) = v[n] + Opt(n-1W-g[n])
89SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
90
Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst
Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])
90SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
91
Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst
Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])
Kein Objekt passt in den Rucksack
91SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
92
Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst
Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])
Kein Objekt steht zur Auswahl
92SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
93
Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst
Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])
Passt aktuelles Objekt in den Rucksack
93SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
94
Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst
Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])
Sonst verwende Rekursion
94SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
95
Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle
0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]
95SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
96
Beispiel
000000000 0 0 0 0 0 0 0 0
g v5 23 41 12 31 27 34 73 3
Groumlszlige Wert
0 1 W
0
1
n
1
2
n
96SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
97
Beispiel
00000000 0 0 0 00 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g[1]gtWAlso Opt(iw) = Opt(i-1w)
g v5 23 41 12 31 27 34 73 3
1
2
97SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
98
Beispiel
00000000 0 0 0 0 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])
g v5 23 41 12 31 27 34 73 3
1
2
98SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
99
Beispiel
00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
99SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
100
Beispiel
00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
100SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
101
Beispiel
00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
101SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
102
Beispiel
0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
102SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
103
Beispiel
0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
103SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
104
Beispiel
0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
104SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
105
Beispiel
0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
105SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
106
Beispiel
000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
106SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
107
Beispiel
000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
107SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
108
Beispiel
000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
108SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
109
Beispiel
000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
109SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
110
Beispiel
00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
110SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
111
Beispiel
0000 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
111SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
112
Beispiel
000 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
112SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
113
Beispiel
00 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
113SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
114
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
114SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
115
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
Optimaler Loumlsungswert fuumlr W=8
115SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
116
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
116SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
Optimaler Loumlsungswert fuumlr W=8
117
Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert
einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks
117SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz
von u nach v sowie einen kuumlrzesten Weg
21
-15
8
4
-4
5
6
7
a
a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0
b c
f
ed
SS 2017 DuA - Kapitel 20 118
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
SS 2017 DuA - Kapitel 20 119
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Knoten k tritt maximal einmal auf
SS 2017 DuA - Kapitel 20 120
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 121
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 122
Dynamische Programmierung - APSP
123
bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt
von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1
ij
kFall (b)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
124
Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten
aus 1hellipk
bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung
d = w falls k=0min ( d d + d ) falls kge1
ij(k)
(k)(k-1) (k-1) (k-1)ij ijij ik kj
(n)ij(n)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
125
Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D
(0)
(k)ij
(n)
(k-1)ij
(k-1)ik
(k-1)kj
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
126
Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung
ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )
2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann
126SS 2017 DuA - Kapitel 20
Dynamische Programmierung
127
Beispiel 1 Matrixketten-Multiplikation
Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist
Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen
Beobachtung bull Sei Aij = AisdothellipsdotAj
bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)
127SS 2017 DuA - Kapitel 20
Dynamische Programmierung
128
bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen
Initialfall m[ii]=0 fuumlr alle iisin1hellipn
Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj
Optimaler Wert m[1n]
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1
128SS 2017 DuA - Kapitel 20
Dynamische Programmierung
129
Beispiel 2 Optimaler binaumlrer Suchbaum
Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1
Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T
(Tiefe der Wurzel ist 0) )
129SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
130
bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj
Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion
m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert
m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus
130SS 2017 DuA - Kapitel 20
Dynamische Programmierung
j
131
Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph
Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw
Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G
131SS 2017 DuA - Kapitel 20
Dynamische Programmierung
132
bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G
bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE
Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion
L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj
Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus
132SS 2017 DuA - Kapitel 20
Dynamische Programmierung
Falls die Menge leer ist ist maxhellip=0
133
Beispiel 4 Fahrstuhloptimierung
Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ
Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet
133SS 2017 DuA - Kapitel 20
Dynamische Programmierung
134
bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist
bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)
Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn
Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1
Optimaler Wert mink+1leilef m[ik]
134SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
135
Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen
Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium
Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung
135SS 2017 DuA - Kapitel 20
Dynamische Programmierung
- Foliennummer 1
- Foliennummer 2
- Foliennummer 3
- Foliennummer 4
- Foliennummer 5
- Foliennummer 6
- Foliennummer 7
- Foliennummer 8
- Foliennummer 9
- Foliennummer 10
- Foliennummer 11
- Foliennummer 12
- Foliennummer 13
- Foliennummer 14
- Foliennummer 15
- Foliennummer 16
- Foliennummer 17
- Foliennummer 18
- Foliennummer 19
- Foliennummer 20
- Foliennummer 21
- Foliennummer 22
- Foliennummer 23
- Foliennummer 24
- Foliennummer 25
- Foliennummer 26
- Foliennummer 27
- Foliennummer 28
- Foliennummer 29
- Foliennummer 30
- Foliennummer 31
- Foliennummer 32
- Foliennummer 33
- Foliennummer 34
- Foliennummer 35
- Foliennummer 36
- Foliennummer 37
- Foliennummer 38
- Foliennummer 39
- Foliennummer 40
- Foliennummer 41
- Foliennummer 42
- Foliennummer 43
- Foliennummer 44
- Foliennummer 45
- Foliennummer 46
- Foliennummer 47
- Foliennummer 48
- Foliennummer 49
- Foliennummer 50
- Foliennummer 51
- Foliennummer 52
- Foliennummer 53
- Foliennummer 54
- Foliennummer 55
- Foliennummer 56
- Foliennummer 57
- Foliennummer 58
- Foliennummer 59
- Foliennummer 60
- Foliennummer 61
- Foliennummer 62
- Foliennummer 63
- Foliennummer 64
- Foliennummer 65
- Foliennummer 66
- Foliennummer 67
- Foliennummer 68
- Foliennummer 69
- Foliennummer 70
- Foliennummer 71
- Foliennummer 72
- Foliennummer 73
- Foliennummer 74
- Foliennummer 75
- Foliennummer 76
- Foliennummer 77
- Foliennummer 78
- Foliennummer 79
- Foliennummer 80
- Fraktionales Rucksack-Problem
- Gierige Loumlsung des fraktionalen Rucksack-Problems
- Gieriges Einpacken ist optimal
- Foliennummer 84
- Foliennummer 85
- Foliennummer 86
- Foliennummer 87
- Foliennummer 88
- Foliennummer 89
- Foliennummer 90
- Foliennummer 91
- Foliennummer 92
- Foliennummer 93
- Foliennummer 94
- Foliennummer 95
- Foliennummer 96
- Foliennummer 97
- Foliennummer 98
- Foliennummer 99
- Foliennummer 100
- Foliennummer 101
- Foliennummer 102
- Foliennummer 103
- Foliennummer 104
- Foliennummer 105
- Foliennummer 106
- Foliennummer 107
- Foliennummer 108
- Foliennummer 109
- Foliennummer 110
- Foliennummer 111
- Foliennummer 112
- Foliennummer 113
- Foliennummer 114
- Foliennummer 115
- Foliennummer 116
- Foliennummer 117
- Foliennummer 118
- Foliennummer 119
- Foliennummer 120
- Foliennummer 121
- Foliennummer 122
- Foliennummer 123
- Foliennummer 124
- Foliennummer 125
- Foliennummer 126
- Foliennummer 127
- Foliennummer 128
- Foliennummer 129
- Foliennummer 130
- Foliennummer 131
- Foliennummer 132
- Foliennummer 133
- Foliennummer 134
- Foliennummer 135
-
![Page 85: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/85.jpg)
85
Beispielbull Rucksackgroumlszlige 6
Groumlszlige 5 2 1 3 7 4
Wert 11 5 2 8 14 9
85SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
86
Beispielbull Rucksackgroumlszlige 6
bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal
Groumlszlige 5 2 1 3 7 4
Wert 11 5 2 8 14 9
86SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
87
Beispielbull Rucksackgroumlszlige 6
bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15
Groumlszlige 5 2 1 3 7 4
Wert 11 5 2 8 14 9
87SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
88
Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn
Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W
bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]
iisinS
iisinS
88SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
89
Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung
aus Objekten 1 bis i bei Rucksackgroumlszlige w
Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)
Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)
Opt(nW) = v[n] + Opt(n-1W-g[n])
89SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
90
Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst
Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])
90SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
91
Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst
Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])
Kein Objekt passt in den Rucksack
91SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
92
Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst
Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])
Kein Objekt steht zur Auswahl
92SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
93
Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst
Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])
Passt aktuelles Objekt in den Rucksack
93SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
94
Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst
Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])
Sonst verwende Rekursion
94SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
95
Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle
0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]
95SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
96
Beispiel
000000000 0 0 0 0 0 0 0 0
g v5 23 41 12 31 27 34 73 3
Groumlszlige Wert
0 1 W
0
1
n
1
2
n
96SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
97
Beispiel
00000000 0 0 0 00 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g[1]gtWAlso Opt(iw) = Opt(i-1w)
g v5 23 41 12 31 27 34 73 3
1
2
97SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
98
Beispiel
00000000 0 0 0 0 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])
g v5 23 41 12 31 27 34 73 3
1
2
98SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
99
Beispiel
00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
99SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
100
Beispiel
00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
100SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
101
Beispiel
00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
101SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
102
Beispiel
0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
102SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
103
Beispiel
0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
103SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
104
Beispiel
0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
104SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
105
Beispiel
0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
105SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
106
Beispiel
000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
106SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
107
Beispiel
000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
107SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
108
Beispiel
000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
108SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
109
Beispiel
000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
109SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
110
Beispiel
00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
110SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
111
Beispiel
0000 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
111SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
112
Beispiel
000 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
112SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
113
Beispiel
00 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
113SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
114
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
114SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
115
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
Optimaler Loumlsungswert fuumlr W=8
115SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
116
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
116SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
Optimaler Loumlsungswert fuumlr W=8
117
Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert
einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks
117SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz
von u nach v sowie einen kuumlrzesten Weg
21
-15
8
4
-4
5
6
7
a
a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0
b c
f
ed
SS 2017 DuA - Kapitel 20 118
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
SS 2017 DuA - Kapitel 20 119
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Knoten k tritt maximal einmal auf
SS 2017 DuA - Kapitel 20 120
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 121
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 122
Dynamische Programmierung - APSP
123
bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt
von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1
ij
kFall (b)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
124
Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten
aus 1hellipk
bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung
d = w falls k=0min ( d d + d ) falls kge1
ij(k)
(k)(k-1) (k-1) (k-1)ij ijij ik kj
(n)ij(n)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
125
Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D
(0)
(k)ij
(n)
(k-1)ij
(k-1)ik
(k-1)kj
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
126
Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung
ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )
2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann
126SS 2017 DuA - Kapitel 20
Dynamische Programmierung
127
Beispiel 1 Matrixketten-Multiplikation
Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist
Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen
Beobachtung bull Sei Aij = AisdothellipsdotAj
bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)
127SS 2017 DuA - Kapitel 20
Dynamische Programmierung
128
bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen
Initialfall m[ii]=0 fuumlr alle iisin1hellipn
Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj
Optimaler Wert m[1n]
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1
128SS 2017 DuA - Kapitel 20
Dynamische Programmierung
129
Beispiel 2 Optimaler binaumlrer Suchbaum
Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1
Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T
(Tiefe der Wurzel ist 0) )
129SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
130
bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj
Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion
m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert
m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus
130SS 2017 DuA - Kapitel 20
Dynamische Programmierung
j
131
Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph
Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw
Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G
131SS 2017 DuA - Kapitel 20
Dynamische Programmierung
132
bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G
bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE
Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion
L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj
Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus
132SS 2017 DuA - Kapitel 20
Dynamische Programmierung
Falls die Menge leer ist ist maxhellip=0
133
Beispiel 4 Fahrstuhloptimierung
Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ
Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet
133SS 2017 DuA - Kapitel 20
Dynamische Programmierung
134
bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist
bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)
Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn
Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1
Optimaler Wert mink+1leilef m[ik]
134SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
135
Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen
Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium
Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung
135SS 2017 DuA - Kapitel 20
Dynamische Programmierung
- Foliennummer 1
- Foliennummer 2
- Foliennummer 3
- Foliennummer 4
- Foliennummer 5
- Foliennummer 6
- Foliennummer 7
- Foliennummer 8
- Foliennummer 9
- Foliennummer 10
- Foliennummer 11
- Foliennummer 12
- Foliennummer 13
- Foliennummer 14
- Foliennummer 15
- Foliennummer 16
- Foliennummer 17
- Foliennummer 18
- Foliennummer 19
- Foliennummer 20
- Foliennummer 21
- Foliennummer 22
- Foliennummer 23
- Foliennummer 24
- Foliennummer 25
- Foliennummer 26
- Foliennummer 27
- Foliennummer 28
- Foliennummer 29
- Foliennummer 30
- Foliennummer 31
- Foliennummer 32
- Foliennummer 33
- Foliennummer 34
- Foliennummer 35
- Foliennummer 36
- Foliennummer 37
- Foliennummer 38
- Foliennummer 39
- Foliennummer 40
- Foliennummer 41
- Foliennummer 42
- Foliennummer 43
- Foliennummer 44
- Foliennummer 45
- Foliennummer 46
- Foliennummer 47
- Foliennummer 48
- Foliennummer 49
- Foliennummer 50
- Foliennummer 51
- Foliennummer 52
- Foliennummer 53
- Foliennummer 54
- Foliennummer 55
- Foliennummer 56
- Foliennummer 57
- Foliennummer 58
- Foliennummer 59
- Foliennummer 60
- Foliennummer 61
- Foliennummer 62
- Foliennummer 63
- Foliennummer 64
- Foliennummer 65
- Foliennummer 66
- Foliennummer 67
- Foliennummer 68
- Foliennummer 69
- Foliennummer 70
- Foliennummer 71
- Foliennummer 72
- Foliennummer 73
- Foliennummer 74
- Foliennummer 75
- Foliennummer 76
- Foliennummer 77
- Foliennummer 78
- Foliennummer 79
- Foliennummer 80
- Fraktionales Rucksack-Problem
- Gierige Loumlsung des fraktionalen Rucksack-Problems
- Gieriges Einpacken ist optimal
- Foliennummer 84
- Foliennummer 85
- Foliennummer 86
- Foliennummer 87
- Foliennummer 88
- Foliennummer 89
- Foliennummer 90
- Foliennummer 91
- Foliennummer 92
- Foliennummer 93
- Foliennummer 94
- Foliennummer 95
- Foliennummer 96
- Foliennummer 97
- Foliennummer 98
- Foliennummer 99
- Foliennummer 100
- Foliennummer 101
- Foliennummer 102
- Foliennummer 103
- Foliennummer 104
- Foliennummer 105
- Foliennummer 106
- Foliennummer 107
- Foliennummer 108
- Foliennummer 109
- Foliennummer 110
- Foliennummer 111
- Foliennummer 112
- Foliennummer 113
- Foliennummer 114
- Foliennummer 115
- Foliennummer 116
- Foliennummer 117
- Foliennummer 118
- Foliennummer 119
- Foliennummer 120
- Foliennummer 121
- Foliennummer 122
- Foliennummer 123
- Foliennummer 124
- Foliennummer 125
- Foliennummer 126
- Foliennummer 127
- Foliennummer 128
- Foliennummer 129
- Foliennummer 130
- Foliennummer 131
- Foliennummer 132
- Foliennummer 133
- Foliennummer 134
- Foliennummer 135
-
![Page 86: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/86.jpg)
86
Beispielbull Rucksackgroumlszlige 6
bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimal
Groumlszlige 5 2 1 3 7 4
Wert 11 5 2 8 14 9
86SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
87
Beispielbull Rucksackgroumlszlige 6
bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15
Groumlszlige 5 2 1 3 7 4
Wert 11 5 2 8 14 9
87SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
88
Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn
Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W
bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]
iisinS
iisinS
88SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
89
Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung
aus Objekten 1 bis i bei Rucksackgroumlszlige w
Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)
Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)
Opt(nW) = v[n] + Opt(n-1W-g[n])
89SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
90
Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst
Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])
90SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
91
Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst
Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])
Kein Objekt passt in den Rucksack
91SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
92
Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst
Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])
Kein Objekt steht zur Auswahl
92SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
93
Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst
Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])
Passt aktuelles Objekt in den Rucksack
93SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
94
Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst
Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])
Sonst verwende Rekursion
94SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
95
Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle
0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]
95SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
96
Beispiel
000000000 0 0 0 0 0 0 0 0
g v5 23 41 12 31 27 34 73 3
Groumlszlige Wert
0 1 W
0
1
n
1
2
n
96SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
97
Beispiel
00000000 0 0 0 00 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g[1]gtWAlso Opt(iw) = Opt(i-1w)
g v5 23 41 12 31 27 34 73 3
1
2
97SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
98
Beispiel
00000000 0 0 0 0 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])
g v5 23 41 12 31 27 34 73 3
1
2
98SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
99
Beispiel
00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
99SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
100
Beispiel
00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
100SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
101
Beispiel
00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
101SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
102
Beispiel
0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
102SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
103
Beispiel
0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
103SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
104
Beispiel
0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
104SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
105
Beispiel
0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
105SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
106
Beispiel
000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
106SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
107
Beispiel
000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
107SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
108
Beispiel
000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
108SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
109
Beispiel
000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
109SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
110
Beispiel
00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
110SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
111
Beispiel
0000 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
111SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
112
Beispiel
000 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
112SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
113
Beispiel
00 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
113SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
114
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
114SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
115
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
Optimaler Loumlsungswert fuumlr W=8
115SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
116
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
116SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
Optimaler Loumlsungswert fuumlr W=8
117
Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert
einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks
117SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz
von u nach v sowie einen kuumlrzesten Weg
21
-15
8
4
-4
5
6
7
a
a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0
b c
f
ed
SS 2017 DuA - Kapitel 20 118
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
SS 2017 DuA - Kapitel 20 119
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Knoten k tritt maximal einmal auf
SS 2017 DuA - Kapitel 20 120
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 121
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 122
Dynamische Programmierung - APSP
123
bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt
von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1
ij
kFall (b)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
124
Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten
aus 1hellipk
bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung
d = w falls k=0min ( d d + d ) falls kge1
ij(k)
(k)(k-1) (k-1) (k-1)ij ijij ik kj
(n)ij(n)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
125
Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D
(0)
(k)ij
(n)
(k-1)ij
(k-1)ik
(k-1)kj
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
126
Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung
ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )
2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann
126SS 2017 DuA - Kapitel 20
Dynamische Programmierung
127
Beispiel 1 Matrixketten-Multiplikation
Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist
Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen
Beobachtung bull Sei Aij = AisdothellipsdotAj
bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)
127SS 2017 DuA - Kapitel 20
Dynamische Programmierung
128
bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen
Initialfall m[ii]=0 fuumlr alle iisin1hellipn
Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj
Optimaler Wert m[1n]
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1
128SS 2017 DuA - Kapitel 20
Dynamische Programmierung
129
Beispiel 2 Optimaler binaumlrer Suchbaum
Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1
Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T
(Tiefe der Wurzel ist 0) )
129SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
130
bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj
Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion
m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert
m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus
130SS 2017 DuA - Kapitel 20
Dynamische Programmierung
j
131
Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph
Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw
Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G
131SS 2017 DuA - Kapitel 20
Dynamische Programmierung
132
bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G
bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE
Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion
L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj
Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus
132SS 2017 DuA - Kapitel 20
Dynamische Programmierung
Falls die Menge leer ist ist maxhellip=0
133
Beispiel 4 Fahrstuhloptimierung
Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ
Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet
133SS 2017 DuA - Kapitel 20
Dynamische Programmierung
134
bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist
bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)
Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn
Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1
Optimaler Wert mink+1leilef m[ik]
134SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
135
Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen
Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium
Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung
135SS 2017 DuA - Kapitel 20
Dynamische Programmierung
- Foliennummer 1
- Foliennummer 2
- Foliennummer 3
- Foliennummer 4
- Foliennummer 5
- Foliennummer 6
- Foliennummer 7
- Foliennummer 8
- Foliennummer 9
- Foliennummer 10
- Foliennummer 11
- Foliennummer 12
- Foliennummer 13
- Foliennummer 14
- Foliennummer 15
- Foliennummer 16
- Foliennummer 17
- Foliennummer 18
- Foliennummer 19
- Foliennummer 20
- Foliennummer 21
- Foliennummer 22
- Foliennummer 23
- Foliennummer 24
- Foliennummer 25
- Foliennummer 26
- Foliennummer 27
- Foliennummer 28
- Foliennummer 29
- Foliennummer 30
- Foliennummer 31
- Foliennummer 32
- Foliennummer 33
- Foliennummer 34
- Foliennummer 35
- Foliennummer 36
- Foliennummer 37
- Foliennummer 38
- Foliennummer 39
- Foliennummer 40
- Foliennummer 41
- Foliennummer 42
- Foliennummer 43
- Foliennummer 44
- Foliennummer 45
- Foliennummer 46
- Foliennummer 47
- Foliennummer 48
- Foliennummer 49
- Foliennummer 50
- Foliennummer 51
- Foliennummer 52
- Foliennummer 53
- Foliennummer 54
- Foliennummer 55
- Foliennummer 56
- Foliennummer 57
- Foliennummer 58
- Foliennummer 59
- Foliennummer 60
- Foliennummer 61
- Foliennummer 62
- Foliennummer 63
- Foliennummer 64
- Foliennummer 65
- Foliennummer 66
- Foliennummer 67
- Foliennummer 68
- Foliennummer 69
- Foliennummer 70
- Foliennummer 71
- Foliennummer 72
- Foliennummer 73
- Foliennummer 74
- Foliennummer 75
- Foliennummer 76
- Foliennummer 77
- Foliennummer 78
- Foliennummer 79
- Foliennummer 80
- Fraktionales Rucksack-Problem
- Gierige Loumlsung des fraktionalen Rucksack-Problems
- Gieriges Einpacken ist optimal
- Foliennummer 84
- Foliennummer 85
- Foliennummer 86
- Foliennummer 87
- Foliennummer 88
- Foliennummer 89
- Foliennummer 90
- Foliennummer 91
- Foliennummer 92
- Foliennummer 93
- Foliennummer 94
- Foliennummer 95
- Foliennummer 96
- Foliennummer 97
- Foliennummer 98
- Foliennummer 99
- Foliennummer 100
- Foliennummer 101
- Foliennummer 102
- Foliennummer 103
- Foliennummer 104
- Foliennummer 105
- Foliennummer 106
- Foliennummer 107
- Foliennummer 108
- Foliennummer 109
- Foliennummer 110
- Foliennummer 111
- Foliennummer 112
- Foliennummer 113
- Foliennummer 114
- Foliennummer 115
- Foliennummer 116
- Foliennummer 117
- Foliennummer 118
- Foliennummer 119
- Foliennummer 120
- Foliennummer 121
- Foliennummer 122
- Foliennummer 123
- Foliennummer 124
- Foliennummer 125
- Foliennummer 126
- Foliennummer 127
- Foliennummer 128
- Foliennummer 129
- Foliennummer 130
- Foliennummer 131
- Foliennummer 132
- Foliennummer 133
- Foliennummer 134
- Foliennummer 135
-
![Page 87: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/87.jpg)
87
Beispielbull Rucksackgroumlszlige 6
bull Objekt 1 und 3 passen und haben Gesamtwert 13bull Optimalbull Objekt 2 3 und 4 passen und haben Gesamtwert 15
Groumlszlige 5 2 1 3 7 4
Wert 11 5 2 8 14 9
87SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
88
Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn
Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W
bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]
iisinS
iisinS
88SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
89
Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung
aus Objekten 1 bis i bei Rucksackgroumlszlige w
Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)
Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)
Opt(nW) = v[n] + Opt(n-1W-g[n])
89SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
90
Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst
Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])
90SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
91
Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst
Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])
Kein Objekt passt in den Rucksack
91SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
92
Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst
Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])
Kein Objekt steht zur Auswahl
92SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
93
Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst
Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])
Passt aktuelles Objekt in den Rucksack
93SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
94
Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst
Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])
Sonst verwende Rekursion
94SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
95
Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle
0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]
95SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
96
Beispiel
000000000 0 0 0 0 0 0 0 0
g v5 23 41 12 31 27 34 73 3
Groumlszlige Wert
0 1 W
0
1
n
1
2
n
96SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
97
Beispiel
00000000 0 0 0 00 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g[1]gtWAlso Opt(iw) = Opt(i-1w)
g v5 23 41 12 31 27 34 73 3
1
2
97SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
98
Beispiel
00000000 0 0 0 0 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])
g v5 23 41 12 31 27 34 73 3
1
2
98SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
99
Beispiel
00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
99SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
100
Beispiel
00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
100SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
101
Beispiel
00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
101SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
102
Beispiel
0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
102SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
103
Beispiel
0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
103SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
104
Beispiel
0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
104SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
105
Beispiel
0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
105SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
106
Beispiel
000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
106SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
107
Beispiel
000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
107SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
108
Beispiel
000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
108SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
109
Beispiel
000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
109SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
110
Beispiel
00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
110SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
111
Beispiel
0000 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
111SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
112
Beispiel
000 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
112SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
113
Beispiel
00 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
113SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
114
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
114SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
115
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
Optimaler Loumlsungswert fuumlr W=8
115SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
116
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
116SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
Optimaler Loumlsungswert fuumlr W=8
117
Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert
einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks
117SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz
von u nach v sowie einen kuumlrzesten Weg
21
-15
8
4
-4
5
6
7
a
a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0
b c
f
ed
SS 2017 DuA - Kapitel 20 118
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
SS 2017 DuA - Kapitel 20 119
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Knoten k tritt maximal einmal auf
SS 2017 DuA - Kapitel 20 120
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 121
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 122
Dynamische Programmierung - APSP
123
bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt
von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1
ij
kFall (b)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
124
Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten
aus 1hellipk
bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung
d = w falls k=0min ( d d + d ) falls kge1
ij(k)
(k)(k-1) (k-1) (k-1)ij ijij ik kj
(n)ij(n)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
125
Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D
(0)
(k)ij
(n)
(k-1)ij
(k-1)ik
(k-1)kj
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
126
Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung
ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )
2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann
126SS 2017 DuA - Kapitel 20
Dynamische Programmierung
127
Beispiel 1 Matrixketten-Multiplikation
Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist
Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen
Beobachtung bull Sei Aij = AisdothellipsdotAj
bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)
127SS 2017 DuA - Kapitel 20
Dynamische Programmierung
128
bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen
Initialfall m[ii]=0 fuumlr alle iisin1hellipn
Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj
Optimaler Wert m[1n]
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1
128SS 2017 DuA - Kapitel 20
Dynamische Programmierung
129
Beispiel 2 Optimaler binaumlrer Suchbaum
Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1
Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T
(Tiefe der Wurzel ist 0) )
129SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
130
bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj
Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion
m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert
m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus
130SS 2017 DuA - Kapitel 20
Dynamische Programmierung
j
131
Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph
Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw
Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G
131SS 2017 DuA - Kapitel 20
Dynamische Programmierung
132
bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G
bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE
Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion
L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj
Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus
132SS 2017 DuA - Kapitel 20
Dynamische Programmierung
Falls die Menge leer ist ist maxhellip=0
133
Beispiel 4 Fahrstuhloptimierung
Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ
Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet
133SS 2017 DuA - Kapitel 20
Dynamische Programmierung
134
bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist
bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)
Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn
Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1
Optimaler Wert mink+1leilef m[ik]
134SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
135
Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen
Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium
Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung
135SS 2017 DuA - Kapitel 20
Dynamische Programmierung
- Foliennummer 1
- Foliennummer 2
- Foliennummer 3
- Foliennummer 4
- Foliennummer 5
- Foliennummer 6
- Foliennummer 7
- Foliennummer 8
- Foliennummer 9
- Foliennummer 10
- Foliennummer 11
- Foliennummer 12
- Foliennummer 13
- Foliennummer 14
- Foliennummer 15
- Foliennummer 16
- Foliennummer 17
- Foliennummer 18
- Foliennummer 19
- Foliennummer 20
- Foliennummer 21
- Foliennummer 22
- Foliennummer 23
- Foliennummer 24
- Foliennummer 25
- Foliennummer 26
- Foliennummer 27
- Foliennummer 28
- Foliennummer 29
- Foliennummer 30
- Foliennummer 31
- Foliennummer 32
- Foliennummer 33
- Foliennummer 34
- Foliennummer 35
- Foliennummer 36
- Foliennummer 37
- Foliennummer 38
- Foliennummer 39
- Foliennummer 40
- Foliennummer 41
- Foliennummer 42
- Foliennummer 43
- Foliennummer 44
- Foliennummer 45
- Foliennummer 46
- Foliennummer 47
- Foliennummer 48
- Foliennummer 49
- Foliennummer 50
- Foliennummer 51
- Foliennummer 52
- Foliennummer 53
- Foliennummer 54
- Foliennummer 55
- Foliennummer 56
- Foliennummer 57
- Foliennummer 58
- Foliennummer 59
- Foliennummer 60
- Foliennummer 61
- Foliennummer 62
- Foliennummer 63
- Foliennummer 64
- Foliennummer 65
- Foliennummer 66
- Foliennummer 67
- Foliennummer 68
- Foliennummer 69
- Foliennummer 70
- Foliennummer 71
- Foliennummer 72
- Foliennummer 73
- Foliennummer 74
- Foliennummer 75
- Foliennummer 76
- Foliennummer 77
- Foliennummer 78
- Foliennummer 79
- Foliennummer 80
- Fraktionales Rucksack-Problem
- Gierige Loumlsung des fraktionalen Rucksack-Problems
- Gieriges Einpacken ist optimal
- Foliennummer 84
- Foliennummer 85
- Foliennummer 86
- Foliennummer 87
- Foliennummer 88
- Foliennummer 89
- Foliennummer 90
- Foliennummer 91
- Foliennummer 92
- Foliennummer 93
- Foliennummer 94
- Foliennummer 95
- Foliennummer 96
- Foliennummer 97
- Foliennummer 98
- Foliennummer 99
- Foliennummer 100
- Foliennummer 101
- Foliennummer 102
- Foliennummer 103
- Foliennummer 104
- Foliennummer 105
- Foliennummer 106
- Foliennummer 107
- Foliennummer 108
- Foliennummer 109
- Foliennummer 110
- Foliennummer 111
- Foliennummer 112
- Foliennummer 113
- Foliennummer 114
- Foliennummer 115
- Foliennummer 116
- Foliennummer 117
- Foliennummer 118
- Foliennummer 119
- Foliennummer 120
- Foliennummer 121
- Foliennummer 122
- Foliennummer 123
- Foliennummer 124
- Foliennummer 125
- Foliennummer 126
- Foliennummer 127
- Foliennummer 128
- Foliennummer 129
- Foliennummer 130
- Foliennummer 131
- Foliennummer 132
- Foliennummer 133
- Foliennummer 134
- Foliennummer 135
-
![Page 88: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/88.jpg)
88
Das Rucksackproblem (Optimierungsversion)bull Eingabe n Objekte 1hellipn
Objekt i hat ganzz pos Groumlszlige g[i] und Wert v[i]Rucksackkapazitaumlt W
bull Ausgabe Menge Ssube1hellipn mit Σ g[i] le W undmaximalem Wert Σ v[i]
iisinS
iisinS
88SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
89
Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung
aus Objekten 1 bis i bei Rucksackgroumlszlige w
Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)
Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)
Opt(nW) = v[n] + Opt(n-1W-g[n])
89SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
90
Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst
Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])
90SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
91
Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst
Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])
Kein Objekt passt in den Rucksack
91SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
92
Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst
Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])
Kein Objekt steht zur Auswahl
92SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
93
Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst
Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])
Passt aktuelles Objekt in den Rucksack
93SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
94
Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst
Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])
Sonst verwende Rekursion
94SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
95
Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle
0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]
95SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
96
Beispiel
000000000 0 0 0 0 0 0 0 0
g v5 23 41 12 31 27 34 73 3
Groumlszlige Wert
0 1 W
0
1
n
1
2
n
96SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
97
Beispiel
00000000 0 0 0 00 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g[1]gtWAlso Opt(iw) = Opt(i-1w)
g v5 23 41 12 31 27 34 73 3
1
2
97SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
98
Beispiel
00000000 0 0 0 0 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])
g v5 23 41 12 31 27 34 73 3
1
2
98SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
99
Beispiel
00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
99SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
100
Beispiel
00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
100SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
101
Beispiel
00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
101SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
102
Beispiel
0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
102SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
103
Beispiel
0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
103SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
104
Beispiel
0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
104SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
105
Beispiel
0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
105SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
106
Beispiel
000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
106SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
107
Beispiel
000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
107SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
108
Beispiel
000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
108SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
109
Beispiel
000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
109SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
110
Beispiel
00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
110SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
111
Beispiel
0000 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
111SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
112
Beispiel
000 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
112SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
113
Beispiel
00 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
113SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
114
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
114SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
115
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
Optimaler Loumlsungswert fuumlr W=8
115SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
116
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
116SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
Optimaler Loumlsungswert fuumlr W=8
117
Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert
einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks
117SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz
von u nach v sowie einen kuumlrzesten Weg
21
-15
8
4
-4
5
6
7
a
a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0
b c
f
ed
SS 2017 DuA - Kapitel 20 118
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
SS 2017 DuA - Kapitel 20 119
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Knoten k tritt maximal einmal auf
SS 2017 DuA - Kapitel 20 120
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 121
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 122
Dynamische Programmierung - APSP
123
bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt
von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1
ij
kFall (b)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
124
Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten
aus 1hellipk
bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung
d = w falls k=0min ( d d + d ) falls kge1
ij(k)
(k)(k-1) (k-1) (k-1)ij ijij ik kj
(n)ij(n)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
125
Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D
(0)
(k)ij
(n)
(k-1)ij
(k-1)ik
(k-1)kj
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
126
Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung
ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )
2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann
126SS 2017 DuA - Kapitel 20
Dynamische Programmierung
127
Beispiel 1 Matrixketten-Multiplikation
Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist
Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen
Beobachtung bull Sei Aij = AisdothellipsdotAj
bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)
127SS 2017 DuA - Kapitel 20
Dynamische Programmierung
128
bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen
Initialfall m[ii]=0 fuumlr alle iisin1hellipn
Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj
Optimaler Wert m[1n]
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1
128SS 2017 DuA - Kapitel 20
Dynamische Programmierung
129
Beispiel 2 Optimaler binaumlrer Suchbaum
Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1
Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T
(Tiefe der Wurzel ist 0) )
129SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
130
bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj
Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion
m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert
m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus
130SS 2017 DuA - Kapitel 20
Dynamische Programmierung
j
131
Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph
Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw
Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G
131SS 2017 DuA - Kapitel 20
Dynamische Programmierung
132
bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G
bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE
Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion
L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj
Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus
132SS 2017 DuA - Kapitel 20
Dynamische Programmierung
Falls die Menge leer ist ist maxhellip=0
133
Beispiel 4 Fahrstuhloptimierung
Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ
Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet
133SS 2017 DuA - Kapitel 20
Dynamische Programmierung
134
bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist
bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)
Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn
Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1
Optimaler Wert mink+1leilef m[ik]
134SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
135
Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen
Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium
Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung
135SS 2017 DuA - Kapitel 20
Dynamische Programmierung
- Foliennummer 1
- Foliennummer 2
- Foliennummer 3
- Foliennummer 4
- Foliennummer 5
- Foliennummer 6
- Foliennummer 7
- Foliennummer 8
- Foliennummer 9
- Foliennummer 10
- Foliennummer 11
- Foliennummer 12
- Foliennummer 13
- Foliennummer 14
- Foliennummer 15
- Foliennummer 16
- Foliennummer 17
- Foliennummer 18
- Foliennummer 19
- Foliennummer 20
- Foliennummer 21
- Foliennummer 22
- Foliennummer 23
- Foliennummer 24
- Foliennummer 25
- Foliennummer 26
- Foliennummer 27
- Foliennummer 28
- Foliennummer 29
- Foliennummer 30
- Foliennummer 31
- Foliennummer 32
- Foliennummer 33
- Foliennummer 34
- Foliennummer 35
- Foliennummer 36
- Foliennummer 37
- Foliennummer 38
- Foliennummer 39
- Foliennummer 40
- Foliennummer 41
- Foliennummer 42
- Foliennummer 43
- Foliennummer 44
- Foliennummer 45
- Foliennummer 46
- Foliennummer 47
- Foliennummer 48
- Foliennummer 49
- Foliennummer 50
- Foliennummer 51
- Foliennummer 52
- Foliennummer 53
- Foliennummer 54
- Foliennummer 55
- Foliennummer 56
- Foliennummer 57
- Foliennummer 58
- Foliennummer 59
- Foliennummer 60
- Foliennummer 61
- Foliennummer 62
- Foliennummer 63
- Foliennummer 64
- Foliennummer 65
- Foliennummer 66
- Foliennummer 67
- Foliennummer 68
- Foliennummer 69
- Foliennummer 70
- Foliennummer 71
- Foliennummer 72
- Foliennummer 73
- Foliennummer 74
- Foliennummer 75
- Foliennummer 76
- Foliennummer 77
- Foliennummer 78
- Foliennummer 79
- Foliennummer 80
- Fraktionales Rucksack-Problem
- Gierige Loumlsung des fraktionalen Rucksack-Problems
- Gieriges Einpacken ist optimal
- Foliennummer 84
- Foliennummer 85
- Foliennummer 86
- Foliennummer 87
- Foliennummer 88
- Foliennummer 89
- Foliennummer 90
- Foliennummer 91
- Foliennummer 92
- Foliennummer 93
- Foliennummer 94
- Foliennummer 95
- Foliennummer 96
- Foliennummer 97
- Foliennummer 98
- Foliennummer 99
- Foliennummer 100
- Foliennummer 101
- Foliennummer 102
- Foliennummer 103
- Foliennummer 104
- Foliennummer 105
- Foliennummer 106
- Foliennummer 107
- Foliennummer 108
- Foliennummer 109
- Foliennummer 110
- Foliennummer 111
- Foliennummer 112
- Foliennummer 113
- Foliennummer 114
- Foliennummer 115
- Foliennummer 116
- Foliennummer 117
- Foliennummer 118
- Foliennummer 119
- Foliennummer 120
- Foliennummer 121
- Foliennummer 122
- Foliennummer 123
- Foliennummer 124
- Foliennummer 125
- Foliennummer 126
- Foliennummer 127
- Foliennummer 128
- Foliennummer 129
- Foliennummer 130
- Foliennummer 131
- Foliennummer 132
- Foliennummer 133
- Foliennummer 134
- Foliennummer 135
-
![Page 89: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/89.jpg)
89
Herleiten einer Rekursionbull Sei O optimale Loumlsungbull Bezeichne Opt(iw) den Wert einer optimalen Loumlsung
aus Objekten 1 bis i bei Rucksackgroumlszlige w
Unterscheide ob Objekt n in O istbull Fall 1(n nicht in O)
Opt(nW) = Opt(n-1W)bull Fall 2 (n in O)
Opt(nW) = v[n] + Opt(n-1W-g[n])
89SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
90
Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst
Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])
90SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
91
Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst
Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])
Kein Objekt passt in den Rucksack
91SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
92
Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst
Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])
Kein Objekt steht zur Auswahl
92SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
93
Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst
Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])
Passt aktuelles Objekt in den Rucksack
93SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
94
Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst
Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])
Sonst verwende Rekursion
94SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
95
Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle
0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]
95SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
96
Beispiel
000000000 0 0 0 0 0 0 0 0
g v5 23 41 12 31 27 34 73 3
Groumlszlige Wert
0 1 W
0
1
n
1
2
n
96SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
97
Beispiel
00000000 0 0 0 00 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g[1]gtWAlso Opt(iw) = Opt(i-1w)
g v5 23 41 12 31 27 34 73 3
1
2
97SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
98
Beispiel
00000000 0 0 0 0 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])
g v5 23 41 12 31 27 34 73 3
1
2
98SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
99
Beispiel
00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
99SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
100
Beispiel
00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
100SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
101
Beispiel
00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
101SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
102
Beispiel
0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
102SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
103
Beispiel
0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
103SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
104
Beispiel
0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
104SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
105
Beispiel
0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
105SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
106
Beispiel
000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
106SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
107
Beispiel
000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
107SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
108
Beispiel
000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
108SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
109
Beispiel
000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
109SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
110
Beispiel
00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
110SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
111
Beispiel
0000 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
111SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
112
Beispiel
000 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
112SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
113
Beispiel
00 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
113SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
114
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
114SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
115
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
Optimaler Loumlsungswert fuumlr W=8
115SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
116
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
116SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
Optimaler Loumlsungswert fuumlr W=8
117
Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert
einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks
117SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz
von u nach v sowie einen kuumlrzesten Weg
21
-15
8
4
-4
5
6
7
a
a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0
b c
f
ed
SS 2017 DuA - Kapitel 20 118
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
SS 2017 DuA - Kapitel 20 119
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Knoten k tritt maximal einmal auf
SS 2017 DuA - Kapitel 20 120
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 121
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 122
Dynamische Programmierung - APSP
123
bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt
von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1
ij
kFall (b)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
124
Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten
aus 1hellipk
bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung
d = w falls k=0min ( d d + d ) falls kge1
ij(k)
(k)(k-1) (k-1) (k-1)ij ijij ik kj
(n)ij(n)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
125
Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D
(0)
(k)ij
(n)
(k-1)ij
(k-1)ik
(k-1)kj
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
126
Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung
ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )
2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann
126SS 2017 DuA - Kapitel 20
Dynamische Programmierung
127
Beispiel 1 Matrixketten-Multiplikation
Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist
Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen
Beobachtung bull Sei Aij = AisdothellipsdotAj
bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)
127SS 2017 DuA - Kapitel 20
Dynamische Programmierung
128
bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen
Initialfall m[ii]=0 fuumlr alle iisin1hellipn
Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj
Optimaler Wert m[1n]
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1
128SS 2017 DuA - Kapitel 20
Dynamische Programmierung
129
Beispiel 2 Optimaler binaumlrer Suchbaum
Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1
Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T
(Tiefe der Wurzel ist 0) )
129SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
130
bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj
Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion
m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert
m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus
130SS 2017 DuA - Kapitel 20
Dynamische Programmierung
j
131
Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph
Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw
Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G
131SS 2017 DuA - Kapitel 20
Dynamische Programmierung
132
bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G
bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE
Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion
L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj
Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus
132SS 2017 DuA - Kapitel 20
Dynamische Programmierung
Falls die Menge leer ist ist maxhellip=0
133
Beispiel 4 Fahrstuhloptimierung
Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ
Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet
133SS 2017 DuA - Kapitel 20
Dynamische Programmierung
134
bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist
bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)
Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn
Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1
Optimaler Wert mink+1leilef m[ik]
134SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
135
Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen
Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium
Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung
135SS 2017 DuA - Kapitel 20
Dynamische Programmierung
- Foliennummer 1
- Foliennummer 2
- Foliennummer 3
- Foliennummer 4
- Foliennummer 5
- Foliennummer 6
- Foliennummer 7
- Foliennummer 8
- Foliennummer 9
- Foliennummer 10
- Foliennummer 11
- Foliennummer 12
- Foliennummer 13
- Foliennummer 14
- Foliennummer 15
- Foliennummer 16
- Foliennummer 17
- Foliennummer 18
- Foliennummer 19
- Foliennummer 20
- Foliennummer 21
- Foliennummer 22
- Foliennummer 23
- Foliennummer 24
- Foliennummer 25
- Foliennummer 26
- Foliennummer 27
- Foliennummer 28
- Foliennummer 29
- Foliennummer 30
- Foliennummer 31
- Foliennummer 32
- Foliennummer 33
- Foliennummer 34
- Foliennummer 35
- Foliennummer 36
- Foliennummer 37
- Foliennummer 38
- Foliennummer 39
- Foliennummer 40
- Foliennummer 41
- Foliennummer 42
- Foliennummer 43
- Foliennummer 44
- Foliennummer 45
- Foliennummer 46
- Foliennummer 47
- Foliennummer 48
- Foliennummer 49
- Foliennummer 50
- Foliennummer 51
- Foliennummer 52
- Foliennummer 53
- Foliennummer 54
- Foliennummer 55
- Foliennummer 56
- Foliennummer 57
- Foliennummer 58
- Foliennummer 59
- Foliennummer 60
- Foliennummer 61
- Foliennummer 62
- Foliennummer 63
- Foliennummer 64
- Foliennummer 65
- Foliennummer 66
- Foliennummer 67
- Foliennummer 68
- Foliennummer 69
- Foliennummer 70
- Foliennummer 71
- Foliennummer 72
- Foliennummer 73
- Foliennummer 74
- Foliennummer 75
- Foliennummer 76
- Foliennummer 77
- Foliennummer 78
- Foliennummer 79
- Foliennummer 80
- Fraktionales Rucksack-Problem
- Gierige Loumlsung des fraktionalen Rucksack-Problems
- Gieriges Einpacken ist optimal
- Foliennummer 84
- Foliennummer 85
- Foliennummer 86
- Foliennummer 87
- Foliennummer 88
- Foliennummer 89
- Foliennummer 90
- Foliennummer 91
- Foliennummer 92
- Foliennummer 93
- Foliennummer 94
- Foliennummer 95
- Foliennummer 96
- Foliennummer 97
- Foliennummer 98
- Foliennummer 99
- Foliennummer 100
- Foliennummer 101
- Foliennummer 102
- Foliennummer 103
- Foliennummer 104
- Foliennummer 105
- Foliennummer 106
- Foliennummer 107
- Foliennummer 108
- Foliennummer 109
- Foliennummer 110
- Foliennummer 111
- Foliennummer 112
- Foliennummer 113
- Foliennummer 114
- Foliennummer 115
- Foliennummer 116
- Foliennummer 117
- Foliennummer 118
- Foliennummer 119
- Foliennummer 120
- Foliennummer 121
- Foliennummer 122
- Foliennummer 123
- Foliennummer 124
- Foliennummer 125
- Foliennummer 126
- Foliennummer 127
- Foliennummer 128
- Foliennummer 129
- Foliennummer 130
- Foliennummer 131
- Foliennummer 132
- Foliennummer 133
- Foliennummer 134
- Foliennummer 135
-
![Page 90: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/90.jpg)
90
Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst
Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])
90SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
91
Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst
Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])
Kein Objekt passt in den Rucksack
91SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
92
Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst
Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])
Kein Objekt steht zur Auswahl
92SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
93
Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst
Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])
Passt aktuelles Objekt in den Rucksack
93SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
94
Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst
Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])
Sonst verwende Rekursion
94SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
95
Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle
0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]
95SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
96
Beispiel
000000000 0 0 0 0 0 0 0 0
g v5 23 41 12 31 27 34 73 3
Groumlszlige Wert
0 1 W
0
1
n
1
2
n
96SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
97
Beispiel
00000000 0 0 0 00 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g[1]gtWAlso Opt(iw) = Opt(i-1w)
g v5 23 41 12 31 27 34 73 3
1
2
97SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
98
Beispiel
00000000 0 0 0 0 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])
g v5 23 41 12 31 27 34 73 3
1
2
98SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
99
Beispiel
00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
99SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
100
Beispiel
00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
100SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
101
Beispiel
00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
101SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
102
Beispiel
0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
102SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
103
Beispiel
0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
103SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
104
Beispiel
0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
104SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
105
Beispiel
0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
105SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
106
Beispiel
000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
106SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
107
Beispiel
000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
107SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
108
Beispiel
000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
108SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
109
Beispiel
000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
109SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
110
Beispiel
00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
110SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
111
Beispiel
0000 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
111SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
112
Beispiel
000 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
112SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
113
Beispiel
00 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
113SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
114
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
114SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
115
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
Optimaler Loumlsungswert fuumlr W=8
115SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
116
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
116SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
Optimaler Loumlsungswert fuumlr W=8
117
Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert
einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks
117SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz
von u nach v sowie einen kuumlrzesten Weg
21
-15
8
4
-4
5
6
7
a
a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0
b c
f
ed
SS 2017 DuA - Kapitel 20 118
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
SS 2017 DuA - Kapitel 20 119
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Knoten k tritt maximal einmal auf
SS 2017 DuA - Kapitel 20 120
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 121
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 122
Dynamische Programmierung - APSP
123
bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt
von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1
ij
kFall (b)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
124
Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten
aus 1hellipk
bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung
d = w falls k=0min ( d d + d ) falls kge1
ij(k)
(k)(k-1) (k-1) (k-1)ij ijij ik kj
(n)ij(n)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
125
Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D
(0)
(k)ij
(n)
(k-1)ij
(k-1)ik
(k-1)kj
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
126
Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung
ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )
2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann
126SS 2017 DuA - Kapitel 20
Dynamische Programmierung
127
Beispiel 1 Matrixketten-Multiplikation
Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist
Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen
Beobachtung bull Sei Aij = AisdothellipsdotAj
bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)
127SS 2017 DuA - Kapitel 20
Dynamische Programmierung
128
bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen
Initialfall m[ii]=0 fuumlr alle iisin1hellipn
Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj
Optimaler Wert m[1n]
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1
128SS 2017 DuA - Kapitel 20
Dynamische Programmierung
129
Beispiel 2 Optimaler binaumlrer Suchbaum
Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1
Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T
(Tiefe der Wurzel ist 0) )
129SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
130
bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj
Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion
m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert
m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus
130SS 2017 DuA - Kapitel 20
Dynamische Programmierung
j
131
Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph
Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw
Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G
131SS 2017 DuA - Kapitel 20
Dynamische Programmierung
132
bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G
bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE
Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion
L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj
Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus
132SS 2017 DuA - Kapitel 20
Dynamische Programmierung
Falls die Menge leer ist ist maxhellip=0
133
Beispiel 4 Fahrstuhloptimierung
Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ
Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet
133SS 2017 DuA - Kapitel 20
Dynamische Programmierung
134
bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist
bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)
Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn
Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1
Optimaler Wert mink+1leilef m[ik]
134SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
135
Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen
Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium
Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung
135SS 2017 DuA - Kapitel 20
Dynamische Programmierung
- Foliennummer 1
- Foliennummer 2
- Foliennummer 3
- Foliennummer 4
- Foliennummer 5
- Foliennummer 6
- Foliennummer 7
- Foliennummer 8
- Foliennummer 9
- Foliennummer 10
- Foliennummer 11
- Foliennummer 12
- Foliennummer 13
- Foliennummer 14
- Foliennummer 15
- Foliennummer 16
- Foliennummer 17
- Foliennummer 18
- Foliennummer 19
- Foliennummer 20
- Foliennummer 21
- Foliennummer 22
- Foliennummer 23
- Foliennummer 24
- Foliennummer 25
- Foliennummer 26
- Foliennummer 27
- Foliennummer 28
- Foliennummer 29
- Foliennummer 30
- Foliennummer 31
- Foliennummer 32
- Foliennummer 33
- Foliennummer 34
- Foliennummer 35
- Foliennummer 36
- Foliennummer 37
- Foliennummer 38
- Foliennummer 39
- Foliennummer 40
- Foliennummer 41
- Foliennummer 42
- Foliennummer 43
- Foliennummer 44
- Foliennummer 45
- Foliennummer 46
- Foliennummer 47
- Foliennummer 48
- Foliennummer 49
- Foliennummer 50
- Foliennummer 51
- Foliennummer 52
- Foliennummer 53
- Foliennummer 54
- Foliennummer 55
- Foliennummer 56
- Foliennummer 57
- Foliennummer 58
- Foliennummer 59
- Foliennummer 60
- Foliennummer 61
- Foliennummer 62
- Foliennummer 63
- Foliennummer 64
- Foliennummer 65
- Foliennummer 66
- Foliennummer 67
- Foliennummer 68
- Foliennummer 69
- Foliennummer 70
- Foliennummer 71
- Foliennummer 72
- Foliennummer 73
- Foliennummer 74
- Foliennummer 75
- Foliennummer 76
- Foliennummer 77
- Foliennummer 78
- Foliennummer 79
- Foliennummer 80
- Fraktionales Rucksack-Problem
- Gierige Loumlsung des fraktionalen Rucksack-Problems
- Gieriges Einpacken ist optimal
- Foliennummer 84
- Foliennummer 85
- Foliennummer 86
- Foliennummer 87
- Foliennummer 88
- Foliennummer 89
- Foliennummer 90
- Foliennummer 91
- Foliennummer 92
- Foliennummer 93
- Foliennummer 94
- Foliennummer 95
- Foliennummer 96
- Foliennummer 97
- Foliennummer 98
- Foliennummer 99
- Foliennummer 100
- Foliennummer 101
- Foliennummer 102
- Foliennummer 103
- Foliennummer 104
- Foliennummer 105
- Foliennummer 106
- Foliennummer 107
- Foliennummer 108
- Foliennummer 109
- Foliennummer 110
- Foliennummer 111
- Foliennummer 112
- Foliennummer 113
- Foliennummer 114
- Foliennummer 115
- Foliennummer 116
- Foliennummer 117
- Foliennummer 118
- Foliennummer 119
- Foliennummer 120
- Foliennummer 121
- Foliennummer 122
- Foliennummer 123
- Foliennummer 124
- Foliennummer 125
- Foliennummer 126
- Foliennummer 127
- Foliennummer 128
- Foliennummer 129
- Foliennummer 130
- Foliennummer 131
- Foliennummer 132
- Foliennummer 133
- Foliennummer 134
- Foliennummer 135
-
![Page 91: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/91.jpg)
91
Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst
Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])
Kein Objekt passt in den Rucksack
91SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
92
Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst
Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])
Kein Objekt steht zur Auswahl
92SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
93
Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst
Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])
Passt aktuelles Objekt in den Rucksack
93SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
94
Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst
Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])
Sonst verwende Rekursion
94SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
95
Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle
0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]
95SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
96
Beispiel
000000000 0 0 0 0 0 0 0 0
g v5 23 41 12 31 27 34 73 3
Groumlszlige Wert
0 1 W
0
1
n
1
2
n
96SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
97
Beispiel
00000000 0 0 0 00 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g[1]gtWAlso Opt(iw) = Opt(i-1w)
g v5 23 41 12 31 27 34 73 3
1
2
97SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
98
Beispiel
00000000 0 0 0 0 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])
g v5 23 41 12 31 27 34 73 3
1
2
98SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
99
Beispiel
00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
99SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
100
Beispiel
00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
100SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
101
Beispiel
00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
101SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
102
Beispiel
0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
102SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
103
Beispiel
0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
103SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
104
Beispiel
0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
104SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
105
Beispiel
0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
105SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
106
Beispiel
000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
106SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
107
Beispiel
000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
107SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
108
Beispiel
000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
108SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
109
Beispiel
000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
109SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
110
Beispiel
00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
110SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
111
Beispiel
0000 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
111SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
112
Beispiel
000 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
112SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
113
Beispiel
00 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
113SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
114
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
114SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
115
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
Optimaler Loumlsungswert fuumlr W=8
115SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
116
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
116SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
Optimaler Loumlsungswert fuumlr W=8
117
Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert
einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks
117SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz
von u nach v sowie einen kuumlrzesten Weg
21
-15
8
4
-4
5
6
7
a
a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0
b c
f
ed
SS 2017 DuA - Kapitel 20 118
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
SS 2017 DuA - Kapitel 20 119
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Knoten k tritt maximal einmal auf
SS 2017 DuA - Kapitel 20 120
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 121
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 122
Dynamische Programmierung - APSP
123
bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt
von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1
ij
kFall (b)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
124
Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten
aus 1hellipk
bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung
d = w falls k=0min ( d d + d ) falls kge1
ij(k)
(k)(k-1) (k-1) (k-1)ij ijij ik kj
(n)ij(n)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
125
Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D
(0)
(k)ij
(n)
(k-1)ij
(k-1)ik
(k-1)kj
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
126
Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung
ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )
2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann
126SS 2017 DuA - Kapitel 20
Dynamische Programmierung
127
Beispiel 1 Matrixketten-Multiplikation
Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist
Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen
Beobachtung bull Sei Aij = AisdothellipsdotAj
bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)
127SS 2017 DuA - Kapitel 20
Dynamische Programmierung
128
bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen
Initialfall m[ii]=0 fuumlr alle iisin1hellipn
Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj
Optimaler Wert m[1n]
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1
128SS 2017 DuA - Kapitel 20
Dynamische Programmierung
129
Beispiel 2 Optimaler binaumlrer Suchbaum
Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1
Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T
(Tiefe der Wurzel ist 0) )
129SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
130
bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj
Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion
m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert
m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus
130SS 2017 DuA - Kapitel 20
Dynamische Programmierung
j
131
Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph
Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw
Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G
131SS 2017 DuA - Kapitel 20
Dynamische Programmierung
132
bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G
bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE
Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion
L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj
Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus
132SS 2017 DuA - Kapitel 20
Dynamische Programmierung
Falls die Menge leer ist ist maxhellip=0
133
Beispiel 4 Fahrstuhloptimierung
Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ
Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet
133SS 2017 DuA - Kapitel 20
Dynamische Programmierung
134
bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist
bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)
Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn
Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1
Optimaler Wert mink+1leilef m[ik]
134SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
135
Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen
Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium
Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung
135SS 2017 DuA - Kapitel 20
Dynamische Programmierung
- Foliennummer 1
- Foliennummer 2
- Foliennummer 3
- Foliennummer 4
- Foliennummer 5
- Foliennummer 6
- Foliennummer 7
- Foliennummer 8
- Foliennummer 9
- Foliennummer 10
- Foliennummer 11
- Foliennummer 12
- Foliennummer 13
- Foliennummer 14
- Foliennummer 15
- Foliennummer 16
- Foliennummer 17
- Foliennummer 18
- Foliennummer 19
- Foliennummer 20
- Foliennummer 21
- Foliennummer 22
- Foliennummer 23
- Foliennummer 24
- Foliennummer 25
- Foliennummer 26
- Foliennummer 27
- Foliennummer 28
- Foliennummer 29
- Foliennummer 30
- Foliennummer 31
- Foliennummer 32
- Foliennummer 33
- Foliennummer 34
- Foliennummer 35
- Foliennummer 36
- Foliennummer 37
- Foliennummer 38
- Foliennummer 39
- Foliennummer 40
- Foliennummer 41
- Foliennummer 42
- Foliennummer 43
- Foliennummer 44
- Foliennummer 45
- Foliennummer 46
- Foliennummer 47
- Foliennummer 48
- Foliennummer 49
- Foliennummer 50
- Foliennummer 51
- Foliennummer 52
- Foliennummer 53
- Foliennummer 54
- Foliennummer 55
- Foliennummer 56
- Foliennummer 57
- Foliennummer 58
- Foliennummer 59
- Foliennummer 60
- Foliennummer 61
- Foliennummer 62
- Foliennummer 63
- Foliennummer 64
- Foliennummer 65
- Foliennummer 66
- Foliennummer 67
- Foliennummer 68
- Foliennummer 69
- Foliennummer 70
- Foliennummer 71
- Foliennummer 72
- Foliennummer 73
- Foliennummer 74
- Foliennummer 75
- Foliennummer 76
- Foliennummer 77
- Foliennummer 78
- Foliennummer 79
- Foliennummer 80
- Fraktionales Rucksack-Problem
- Gierige Loumlsung des fraktionalen Rucksack-Problems
- Gieriges Einpacken ist optimal
- Foliennummer 84
- Foliennummer 85
- Foliennummer 86
- Foliennummer 87
- Foliennummer 88
- Foliennummer 89
- Foliennummer 90
- Foliennummer 91
- Foliennummer 92
- Foliennummer 93
- Foliennummer 94
- Foliennummer 95
- Foliennummer 96
- Foliennummer 97
- Foliennummer 98
- Foliennummer 99
- Foliennummer 100
- Foliennummer 101
- Foliennummer 102
- Foliennummer 103
- Foliennummer 104
- Foliennummer 105
- Foliennummer 106
- Foliennummer 107
- Foliennummer 108
- Foliennummer 109
- Foliennummer 110
- Foliennummer 111
- Foliennummer 112
- Foliennummer 113
- Foliennummer 114
- Foliennummer 115
- Foliennummer 116
- Foliennummer 117
- Foliennummer 118
- Foliennummer 119
- Foliennummer 120
- Foliennummer 121
- Foliennummer 122
- Foliennummer 123
- Foliennummer 124
- Foliennummer 125
- Foliennummer 126
- Foliennummer 127
- Foliennummer 128
- Foliennummer 129
- Foliennummer 130
- Foliennummer 131
- Foliennummer 132
- Foliennummer 133
- Foliennummer 134
- Foliennummer 135
-
![Page 92: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/92.jpg)
92
Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst
Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])
Kein Objekt steht zur Auswahl
92SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
93
Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst
Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])
Passt aktuelles Objekt in den Rucksack
93SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
94
Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst
Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])
Sonst verwende Rekursion
94SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
95
Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle
0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]
95SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
96
Beispiel
000000000 0 0 0 0 0 0 0 0
g v5 23 41 12 31 27 34 73 3
Groumlszlige Wert
0 1 W
0
1
n
1
2
n
96SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
97
Beispiel
00000000 0 0 0 00 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g[1]gtWAlso Opt(iw) = Opt(i-1w)
g v5 23 41 12 31 27 34 73 3
1
2
97SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
98
Beispiel
00000000 0 0 0 0 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])
g v5 23 41 12 31 27 34 73 3
1
2
98SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
99
Beispiel
00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
99SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
100
Beispiel
00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
100SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
101
Beispiel
00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
101SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
102
Beispiel
0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
102SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
103
Beispiel
0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
103SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
104
Beispiel
0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
104SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
105
Beispiel
0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
105SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
106
Beispiel
000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
106SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
107
Beispiel
000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
107SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
108
Beispiel
000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
108SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
109
Beispiel
000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
109SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
110
Beispiel
00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
110SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
111
Beispiel
0000 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
111SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
112
Beispiel
000 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
112SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
113
Beispiel
00 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
113SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
114
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
114SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
115
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
Optimaler Loumlsungswert fuumlr W=8
115SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
116
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
116SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
Optimaler Loumlsungswert fuumlr W=8
117
Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert
einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks
117SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz
von u nach v sowie einen kuumlrzesten Weg
21
-15
8
4
-4
5
6
7
a
a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0
b c
f
ed
SS 2017 DuA - Kapitel 20 118
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
SS 2017 DuA - Kapitel 20 119
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Knoten k tritt maximal einmal auf
SS 2017 DuA - Kapitel 20 120
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 121
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 122
Dynamische Programmierung - APSP
123
bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt
von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1
ij
kFall (b)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
124
Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten
aus 1hellipk
bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung
d = w falls k=0min ( d d + d ) falls kge1
ij(k)
(k)(k-1) (k-1) (k-1)ij ijij ik kj
(n)ij(n)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
125
Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D
(0)
(k)ij
(n)
(k-1)ij
(k-1)ik
(k-1)kj
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
126
Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung
ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )
2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann
126SS 2017 DuA - Kapitel 20
Dynamische Programmierung
127
Beispiel 1 Matrixketten-Multiplikation
Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist
Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen
Beobachtung bull Sei Aij = AisdothellipsdotAj
bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)
127SS 2017 DuA - Kapitel 20
Dynamische Programmierung
128
bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen
Initialfall m[ii]=0 fuumlr alle iisin1hellipn
Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj
Optimaler Wert m[1n]
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1
128SS 2017 DuA - Kapitel 20
Dynamische Programmierung
129
Beispiel 2 Optimaler binaumlrer Suchbaum
Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1
Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T
(Tiefe der Wurzel ist 0) )
129SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
130
bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj
Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion
m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert
m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus
130SS 2017 DuA - Kapitel 20
Dynamische Programmierung
j
131
Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph
Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw
Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G
131SS 2017 DuA - Kapitel 20
Dynamische Programmierung
132
bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G
bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE
Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion
L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj
Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus
132SS 2017 DuA - Kapitel 20
Dynamische Programmierung
Falls die Menge leer ist ist maxhellip=0
133
Beispiel 4 Fahrstuhloptimierung
Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ
Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet
133SS 2017 DuA - Kapitel 20
Dynamische Programmierung
134
bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist
bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)
Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn
Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1
Optimaler Wert mink+1leilef m[ik]
134SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
135
Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen
Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium
Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung
135SS 2017 DuA - Kapitel 20
Dynamische Programmierung
- Foliennummer 1
- Foliennummer 2
- Foliennummer 3
- Foliennummer 4
- Foliennummer 5
- Foliennummer 6
- Foliennummer 7
- Foliennummer 8
- Foliennummer 9
- Foliennummer 10
- Foliennummer 11
- Foliennummer 12
- Foliennummer 13
- Foliennummer 14
- Foliennummer 15
- Foliennummer 16
- Foliennummer 17
- Foliennummer 18
- Foliennummer 19
- Foliennummer 20
- Foliennummer 21
- Foliennummer 22
- Foliennummer 23
- Foliennummer 24
- Foliennummer 25
- Foliennummer 26
- Foliennummer 27
- Foliennummer 28
- Foliennummer 29
- Foliennummer 30
- Foliennummer 31
- Foliennummer 32
- Foliennummer 33
- Foliennummer 34
- Foliennummer 35
- Foliennummer 36
- Foliennummer 37
- Foliennummer 38
- Foliennummer 39
- Foliennummer 40
- Foliennummer 41
- Foliennummer 42
- Foliennummer 43
- Foliennummer 44
- Foliennummer 45
- Foliennummer 46
- Foliennummer 47
- Foliennummer 48
- Foliennummer 49
- Foliennummer 50
- Foliennummer 51
- Foliennummer 52
- Foliennummer 53
- Foliennummer 54
- Foliennummer 55
- Foliennummer 56
- Foliennummer 57
- Foliennummer 58
- Foliennummer 59
- Foliennummer 60
- Foliennummer 61
- Foliennummer 62
- Foliennummer 63
- Foliennummer 64
- Foliennummer 65
- Foliennummer 66
- Foliennummer 67
- Foliennummer 68
- Foliennummer 69
- Foliennummer 70
- Foliennummer 71
- Foliennummer 72
- Foliennummer 73
- Foliennummer 74
- Foliennummer 75
- Foliennummer 76
- Foliennummer 77
- Foliennummer 78
- Foliennummer 79
- Foliennummer 80
- Fraktionales Rucksack-Problem
- Gierige Loumlsung des fraktionalen Rucksack-Problems
- Gieriges Einpacken ist optimal
- Foliennummer 84
- Foliennummer 85
- Foliennummer 86
- Foliennummer 87
- Foliennummer 88
- Foliennummer 89
- Foliennummer 90
- Foliennummer 91
- Foliennummer 92
- Foliennummer 93
- Foliennummer 94
- Foliennummer 95
- Foliennummer 96
- Foliennummer 97
- Foliennummer 98
- Foliennummer 99
- Foliennummer 100
- Foliennummer 101
- Foliennummer 102
- Foliennummer 103
- Foliennummer 104
- Foliennummer 105
- Foliennummer 106
- Foliennummer 107
- Foliennummer 108
- Foliennummer 109
- Foliennummer 110
- Foliennummer 111
- Foliennummer 112
- Foliennummer 113
- Foliennummer 114
- Foliennummer 115
- Foliennummer 116
- Foliennummer 117
- Foliennummer 118
- Foliennummer 119
- Foliennummer 120
- Foliennummer 121
- Foliennummer 122
- Foliennummer 123
- Foliennummer 124
- Foliennummer 125
- Foliennummer 126
- Foliennummer 127
- Foliennummer 128
- Foliennummer 129
- Foliennummer 130
- Foliennummer 131
- Foliennummer 132
- Foliennummer 133
- Foliennummer 134
- Foliennummer 135
-
![Page 93: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/93.jpg)
93
Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst
Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])
Passt aktuelles Objekt in den Rucksack
93SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
94
Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst
Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])
Sonst verwende Rekursion
94SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
95
Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle
0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]
95SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
96
Beispiel
000000000 0 0 0 0 0 0 0 0
g v5 23 41 12 31 27 34 73 3
Groumlszlige Wert
0 1 W
0
1
n
1
2
n
96SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
97
Beispiel
00000000 0 0 0 00 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g[1]gtWAlso Opt(iw) = Opt(i-1w)
g v5 23 41 12 31 27 34 73 3
1
2
97SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
98
Beispiel
00000000 0 0 0 0 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])
g v5 23 41 12 31 27 34 73 3
1
2
98SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
99
Beispiel
00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
99SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
100
Beispiel
00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
100SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
101
Beispiel
00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
101SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
102
Beispiel
0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
102SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
103
Beispiel
0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
103SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
104
Beispiel
0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
104SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
105
Beispiel
0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
105SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
106
Beispiel
000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
106SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
107
Beispiel
000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
107SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
108
Beispiel
000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
108SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
109
Beispiel
000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
109SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
110
Beispiel
00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
110SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
111
Beispiel
0000 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
111SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
112
Beispiel
000 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
112SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
113
Beispiel
00 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
113SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
114
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
114SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
115
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
Optimaler Loumlsungswert fuumlr W=8
115SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
116
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
116SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
Optimaler Loumlsungswert fuumlr W=8
117
Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert
einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks
117SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz
von u nach v sowie einen kuumlrzesten Weg
21
-15
8
4
-4
5
6
7
a
a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0
b c
f
ed
SS 2017 DuA - Kapitel 20 118
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
SS 2017 DuA - Kapitel 20 119
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Knoten k tritt maximal einmal auf
SS 2017 DuA - Kapitel 20 120
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 121
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 122
Dynamische Programmierung - APSP
123
bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt
von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1
ij
kFall (b)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
124
Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten
aus 1hellipk
bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung
d = w falls k=0min ( d d + d ) falls kge1
ij(k)
(k)(k-1) (k-1) (k-1)ij ijij ik kj
(n)ij(n)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
125
Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D
(0)
(k)ij
(n)
(k-1)ij
(k-1)ik
(k-1)kj
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
126
Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung
ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )
2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann
126SS 2017 DuA - Kapitel 20
Dynamische Programmierung
127
Beispiel 1 Matrixketten-Multiplikation
Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist
Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen
Beobachtung bull Sei Aij = AisdothellipsdotAj
bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)
127SS 2017 DuA - Kapitel 20
Dynamische Programmierung
128
bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen
Initialfall m[ii]=0 fuumlr alle iisin1hellipn
Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj
Optimaler Wert m[1n]
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1
128SS 2017 DuA - Kapitel 20
Dynamische Programmierung
129
Beispiel 2 Optimaler binaumlrer Suchbaum
Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1
Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T
(Tiefe der Wurzel ist 0) )
129SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
130
bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj
Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion
m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert
m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus
130SS 2017 DuA - Kapitel 20
Dynamische Programmierung
j
131
Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph
Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw
Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G
131SS 2017 DuA - Kapitel 20
Dynamische Programmierung
132
bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G
bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE
Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion
L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj
Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus
132SS 2017 DuA - Kapitel 20
Dynamische Programmierung
Falls die Menge leer ist ist maxhellip=0
133
Beispiel 4 Fahrstuhloptimierung
Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ
Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet
133SS 2017 DuA - Kapitel 20
Dynamische Programmierung
134
bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist
bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)
Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn
Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1
Optimaler Wert mink+1leilef m[ik]
134SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
135
Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen
Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium
Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung
135SS 2017 DuA - Kapitel 20
Dynamische Programmierung
- Foliennummer 1
- Foliennummer 2
- Foliennummer 3
- Foliennummer 4
- Foliennummer 5
- Foliennummer 6
- Foliennummer 7
- Foliennummer 8
- Foliennummer 9
- Foliennummer 10
- Foliennummer 11
- Foliennummer 12
- Foliennummer 13
- Foliennummer 14
- Foliennummer 15
- Foliennummer 16
- Foliennummer 17
- Foliennummer 18
- Foliennummer 19
- Foliennummer 20
- Foliennummer 21
- Foliennummer 22
- Foliennummer 23
- Foliennummer 24
- Foliennummer 25
- Foliennummer 26
- Foliennummer 27
- Foliennummer 28
- Foliennummer 29
- Foliennummer 30
- Foliennummer 31
- Foliennummer 32
- Foliennummer 33
- Foliennummer 34
- Foliennummer 35
- Foliennummer 36
- Foliennummer 37
- Foliennummer 38
- Foliennummer 39
- Foliennummer 40
- Foliennummer 41
- Foliennummer 42
- Foliennummer 43
- Foliennummer 44
- Foliennummer 45
- Foliennummer 46
- Foliennummer 47
- Foliennummer 48
- Foliennummer 49
- Foliennummer 50
- Foliennummer 51
- Foliennummer 52
- Foliennummer 53
- Foliennummer 54
- Foliennummer 55
- Foliennummer 56
- Foliennummer 57
- Foliennummer 58
- Foliennummer 59
- Foliennummer 60
- Foliennummer 61
- Foliennummer 62
- Foliennummer 63
- Foliennummer 64
- Foliennummer 65
- Foliennummer 66
- Foliennummer 67
- Foliennummer 68
- Foliennummer 69
- Foliennummer 70
- Foliennummer 71
- Foliennummer 72
- Foliennummer 73
- Foliennummer 74
- Foliennummer 75
- Foliennummer 76
- Foliennummer 77
- Foliennummer 78
- Foliennummer 79
- Foliennummer 80
- Fraktionales Rucksack-Problem
- Gierige Loumlsung des fraktionalen Rucksack-Problems
- Gieriges Einpacken ist optimal
- Foliennummer 84
- Foliennummer 85
- Foliennummer 86
- Foliennummer 87
- Foliennummer 88
- Foliennummer 89
- Foliennummer 90
- Foliennummer 91
- Foliennummer 92
- Foliennummer 93
- Foliennummer 94
- Foliennummer 95
- Foliennummer 96
- Foliennummer 97
- Foliennummer 98
- Foliennummer 99
- Foliennummer 100
- Foliennummer 101
- Foliennummer 102
- Foliennummer 103
- Foliennummer 104
- Foliennummer 105
- Foliennummer 106
- Foliennummer 107
- Foliennummer 108
- Foliennummer 109
- Foliennummer 110
- Foliennummer 111
- Foliennummer 112
- Foliennummer 113
- Foliennummer 114
- Foliennummer 115
- Foliennummer 116
- Foliennummer 117
- Foliennummer 118
- Foliennummer 119
- Foliennummer 120
- Foliennummer 121
- Foliennummer 122
- Foliennummer 123
- Foliennummer 124
- Foliennummer 125
- Foliennummer 126
- Foliennummer 127
- Foliennummer 128
- Foliennummer 129
- Foliennummer 130
- Foliennummer 131
- Foliennummer 132
- Foliennummer 133
- Foliennummer 134
- Foliennummer 135
-
![Page 94: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/94.jpg)
94
Rekursionbull Opt(i0)= 0 fuumlr 0leilenbull Opt(0i)= 0 fuumlr 0leileWbull Wenn wltg[i] dann Opt(iw) = Opt(i-1w)bull Sonst
Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])
Sonst verwende Rekursion
94SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
95
Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle
0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]
95SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
96
Beispiel
000000000 0 0 0 0 0 0 0 0
g v5 23 41 12 31 27 34 73 3
Groumlszlige Wert
0 1 W
0
1
n
1
2
n
96SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
97
Beispiel
00000000 0 0 0 00 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g[1]gtWAlso Opt(iw) = Opt(i-1w)
g v5 23 41 12 31 27 34 73 3
1
2
97SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
98
Beispiel
00000000 0 0 0 0 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])
g v5 23 41 12 31 27 34 73 3
1
2
98SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
99
Beispiel
00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
99SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
100
Beispiel
00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
100SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
101
Beispiel
00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
101SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
102
Beispiel
0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
102SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
103
Beispiel
0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
103SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
104
Beispiel
0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
104SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
105
Beispiel
0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
105SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
106
Beispiel
000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
106SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
107
Beispiel
000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
107SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
108
Beispiel
000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
108SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
109
Beispiel
000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
109SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
110
Beispiel
00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
110SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
111
Beispiel
0000 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
111SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
112
Beispiel
000 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
112SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
113
Beispiel
00 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
113SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
114
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
114SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
115
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
Optimaler Loumlsungswert fuumlr W=8
115SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
116
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
116SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
Optimaler Loumlsungswert fuumlr W=8
117
Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert
einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks
117SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz
von u nach v sowie einen kuumlrzesten Weg
21
-15
8
4
-4
5
6
7
a
a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0
b c
f
ed
SS 2017 DuA - Kapitel 20 118
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
SS 2017 DuA - Kapitel 20 119
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Knoten k tritt maximal einmal auf
SS 2017 DuA - Kapitel 20 120
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 121
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 122
Dynamische Programmierung - APSP
123
bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt
von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1
ij
kFall (b)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
124
Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten
aus 1hellipk
bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung
d = w falls k=0min ( d d + d ) falls kge1
ij(k)
(k)(k-1) (k-1) (k-1)ij ijij ik kj
(n)ij(n)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
125
Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D
(0)
(k)ij
(n)
(k-1)ij
(k-1)ik
(k-1)kj
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
126
Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung
ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )
2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann
126SS 2017 DuA - Kapitel 20
Dynamische Programmierung
127
Beispiel 1 Matrixketten-Multiplikation
Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist
Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen
Beobachtung bull Sei Aij = AisdothellipsdotAj
bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)
127SS 2017 DuA - Kapitel 20
Dynamische Programmierung
128
bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen
Initialfall m[ii]=0 fuumlr alle iisin1hellipn
Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj
Optimaler Wert m[1n]
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1
128SS 2017 DuA - Kapitel 20
Dynamische Programmierung
129
Beispiel 2 Optimaler binaumlrer Suchbaum
Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1
Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T
(Tiefe der Wurzel ist 0) )
129SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
130
bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj
Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion
m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert
m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus
130SS 2017 DuA - Kapitel 20
Dynamische Programmierung
j
131
Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph
Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw
Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G
131SS 2017 DuA - Kapitel 20
Dynamische Programmierung
132
bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G
bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE
Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion
L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj
Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus
132SS 2017 DuA - Kapitel 20
Dynamische Programmierung
Falls die Menge leer ist ist maxhellip=0
133
Beispiel 4 Fahrstuhloptimierung
Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ
Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet
133SS 2017 DuA - Kapitel 20
Dynamische Programmierung
134
bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist
bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)
Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn
Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1
Optimaler Wert mink+1leilef m[ik]
134SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
135
Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen
Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium
Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung
135SS 2017 DuA - Kapitel 20
Dynamische Programmierung
- Foliennummer 1
- Foliennummer 2
- Foliennummer 3
- Foliennummer 4
- Foliennummer 5
- Foliennummer 6
- Foliennummer 7
- Foliennummer 8
- Foliennummer 9
- Foliennummer 10
- Foliennummer 11
- Foliennummer 12
- Foliennummer 13
- Foliennummer 14
- Foliennummer 15
- Foliennummer 16
- Foliennummer 17
- Foliennummer 18
- Foliennummer 19
- Foliennummer 20
- Foliennummer 21
- Foliennummer 22
- Foliennummer 23
- Foliennummer 24
- Foliennummer 25
- Foliennummer 26
- Foliennummer 27
- Foliennummer 28
- Foliennummer 29
- Foliennummer 30
- Foliennummer 31
- Foliennummer 32
- Foliennummer 33
- Foliennummer 34
- Foliennummer 35
- Foliennummer 36
- Foliennummer 37
- Foliennummer 38
- Foliennummer 39
- Foliennummer 40
- Foliennummer 41
- Foliennummer 42
- Foliennummer 43
- Foliennummer 44
- Foliennummer 45
- Foliennummer 46
- Foliennummer 47
- Foliennummer 48
- Foliennummer 49
- Foliennummer 50
- Foliennummer 51
- Foliennummer 52
- Foliennummer 53
- Foliennummer 54
- Foliennummer 55
- Foliennummer 56
- Foliennummer 57
- Foliennummer 58
- Foliennummer 59
- Foliennummer 60
- Foliennummer 61
- Foliennummer 62
- Foliennummer 63
- Foliennummer 64
- Foliennummer 65
- Foliennummer 66
- Foliennummer 67
- Foliennummer 68
- Foliennummer 69
- Foliennummer 70
- Foliennummer 71
- Foliennummer 72
- Foliennummer 73
- Foliennummer 74
- Foliennummer 75
- Foliennummer 76
- Foliennummer 77
- Foliennummer 78
- Foliennummer 79
- Foliennummer 80
- Fraktionales Rucksack-Problem
- Gierige Loumlsung des fraktionalen Rucksack-Problems
- Gieriges Einpacken ist optimal
- Foliennummer 84
- Foliennummer 85
- Foliennummer 86
- Foliennummer 87
- Foliennummer 88
- Foliennummer 89
- Foliennummer 90
- Foliennummer 91
- Foliennummer 92
- Foliennummer 93
- Foliennummer 94
- Foliennummer 95
- Foliennummer 96
- Foliennummer 97
- Foliennummer 98
- Foliennummer 99
- Foliennummer 100
- Foliennummer 101
- Foliennummer 102
- Foliennummer 103
- Foliennummer 104
- Foliennummer 105
- Foliennummer 106
- Foliennummer 107
- Foliennummer 108
- Foliennummer 109
- Foliennummer 110
- Foliennummer 111
- Foliennummer 112
- Foliennummer 113
- Foliennummer 114
- Foliennummer 115
- Foliennummer 116
- Foliennummer 117
- Foliennummer 118
- Foliennummer 119
- Foliennummer 120
- Foliennummer 121
- Foliennummer 122
- Foliennummer 123
- Foliennummer 124
- Foliennummer 125
- Foliennummer 126
- Foliennummer 127
- Foliennummer 128
- Foliennummer 129
- Foliennummer 130
- Foliennummer 131
- Foliennummer 132
- Foliennummer 133
- Foliennummer 134
- Foliennummer 135
-
![Page 95: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/95.jpg)
95
Rucksack(nW)1 Initialisiere Feld A[0n][0W] mit A[0i] =0 fuumlr alle
0leilen und A[j0]=0 fuumlr alle 0leileW2 for i larr 1 to n do3 for j larr 1 to W do4 Berechne A[ij] nach Rekursion5 return A[nW]
95SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
96
Beispiel
000000000 0 0 0 0 0 0 0 0
g v5 23 41 12 31 27 34 73 3
Groumlszlige Wert
0 1 W
0
1
n
1
2
n
96SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
97
Beispiel
00000000 0 0 0 00 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g[1]gtWAlso Opt(iw) = Opt(i-1w)
g v5 23 41 12 31 27 34 73 3
1
2
97SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
98
Beispiel
00000000 0 0 0 0 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])
g v5 23 41 12 31 27 34 73 3
1
2
98SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
99
Beispiel
00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
99SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
100
Beispiel
00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
100SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
101
Beispiel
00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
101SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
102
Beispiel
0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
102SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
103
Beispiel
0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
103SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
104
Beispiel
0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
104SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
105
Beispiel
0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
105SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
106
Beispiel
000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
106SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
107
Beispiel
000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
107SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
108
Beispiel
000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
108SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
109
Beispiel
000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
109SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
110
Beispiel
00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
110SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
111
Beispiel
0000 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
111SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
112
Beispiel
000 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
112SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
113
Beispiel
00 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
113SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
114
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
114SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
115
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
Optimaler Loumlsungswert fuumlr W=8
115SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
116
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
116SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
Optimaler Loumlsungswert fuumlr W=8
117
Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert
einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks
117SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz
von u nach v sowie einen kuumlrzesten Weg
21
-15
8
4
-4
5
6
7
a
a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0
b c
f
ed
SS 2017 DuA - Kapitel 20 118
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
SS 2017 DuA - Kapitel 20 119
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Knoten k tritt maximal einmal auf
SS 2017 DuA - Kapitel 20 120
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 121
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 122
Dynamische Programmierung - APSP
123
bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt
von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1
ij
kFall (b)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
124
Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten
aus 1hellipk
bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung
d = w falls k=0min ( d d + d ) falls kge1
ij(k)
(k)(k-1) (k-1) (k-1)ij ijij ik kj
(n)ij(n)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
125
Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D
(0)
(k)ij
(n)
(k-1)ij
(k-1)ik
(k-1)kj
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
126
Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung
ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )
2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann
126SS 2017 DuA - Kapitel 20
Dynamische Programmierung
127
Beispiel 1 Matrixketten-Multiplikation
Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist
Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen
Beobachtung bull Sei Aij = AisdothellipsdotAj
bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)
127SS 2017 DuA - Kapitel 20
Dynamische Programmierung
128
bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen
Initialfall m[ii]=0 fuumlr alle iisin1hellipn
Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj
Optimaler Wert m[1n]
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1
128SS 2017 DuA - Kapitel 20
Dynamische Programmierung
129
Beispiel 2 Optimaler binaumlrer Suchbaum
Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1
Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T
(Tiefe der Wurzel ist 0) )
129SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
130
bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj
Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion
m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert
m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus
130SS 2017 DuA - Kapitel 20
Dynamische Programmierung
j
131
Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph
Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw
Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G
131SS 2017 DuA - Kapitel 20
Dynamische Programmierung
132
bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G
bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE
Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion
L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj
Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus
132SS 2017 DuA - Kapitel 20
Dynamische Programmierung
Falls die Menge leer ist ist maxhellip=0
133
Beispiel 4 Fahrstuhloptimierung
Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ
Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet
133SS 2017 DuA - Kapitel 20
Dynamische Programmierung
134
bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist
bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)
Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn
Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1
Optimaler Wert mink+1leilef m[ik]
134SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
135
Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen
Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium
Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung
135SS 2017 DuA - Kapitel 20
Dynamische Programmierung
- Foliennummer 1
- Foliennummer 2
- Foliennummer 3
- Foliennummer 4
- Foliennummer 5
- Foliennummer 6
- Foliennummer 7
- Foliennummer 8
- Foliennummer 9
- Foliennummer 10
- Foliennummer 11
- Foliennummer 12
- Foliennummer 13
- Foliennummer 14
- Foliennummer 15
- Foliennummer 16
- Foliennummer 17
- Foliennummer 18
- Foliennummer 19
- Foliennummer 20
- Foliennummer 21
- Foliennummer 22
- Foliennummer 23
- Foliennummer 24
- Foliennummer 25
- Foliennummer 26
- Foliennummer 27
- Foliennummer 28
- Foliennummer 29
- Foliennummer 30
- Foliennummer 31
- Foliennummer 32
- Foliennummer 33
- Foliennummer 34
- Foliennummer 35
- Foliennummer 36
- Foliennummer 37
- Foliennummer 38
- Foliennummer 39
- Foliennummer 40
- Foliennummer 41
- Foliennummer 42
- Foliennummer 43
- Foliennummer 44
- Foliennummer 45
- Foliennummer 46
- Foliennummer 47
- Foliennummer 48
- Foliennummer 49
- Foliennummer 50
- Foliennummer 51
- Foliennummer 52
- Foliennummer 53
- Foliennummer 54
- Foliennummer 55
- Foliennummer 56
- Foliennummer 57
- Foliennummer 58
- Foliennummer 59
- Foliennummer 60
- Foliennummer 61
- Foliennummer 62
- Foliennummer 63
- Foliennummer 64
- Foliennummer 65
- Foliennummer 66
- Foliennummer 67
- Foliennummer 68
- Foliennummer 69
- Foliennummer 70
- Foliennummer 71
- Foliennummer 72
- Foliennummer 73
- Foliennummer 74
- Foliennummer 75
- Foliennummer 76
- Foliennummer 77
- Foliennummer 78
- Foliennummer 79
- Foliennummer 80
- Fraktionales Rucksack-Problem
- Gierige Loumlsung des fraktionalen Rucksack-Problems
- Gieriges Einpacken ist optimal
- Foliennummer 84
- Foliennummer 85
- Foliennummer 86
- Foliennummer 87
- Foliennummer 88
- Foliennummer 89
- Foliennummer 90
- Foliennummer 91
- Foliennummer 92
- Foliennummer 93
- Foliennummer 94
- Foliennummer 95
- Foliennummer 96
- Foliennummer 97
- Foliennummer 98
- Foliennummer 99
- Foliennummer 100
- Foliennummer 101
- Foliennummer 102
- Foliennummer 103
- Foliennummer 104
- Foliennummer 105
- Foliennummer 106
- Foliennummer 107
- Foliennummer 108
- Foliennummer 109
- Foliennummer 110
- Foliennummer 111
- Foliennummer 112
- Foliennummer 113
- Foliennummer 114
- Foliennummer 115
- Foliennummer 116
- Foliennummer 117
- Foliennummer 118
- Foliennummer 119
- Foliennummer 120
- Foliennummer 121
- Foliennummer 122
- Foliennummer 123
- Foliennummer 124
- Foliennummer 125
- Foliennummer 126
- Foliennummer 127
- Foliennummer 128
- Foliennummer 129
- Foliennummer 130
- Foliennummer 131
- Foliennummer 132
- Foliennummer 133
- Foliennummer 134
- Foliennummer 135
-
![Page 96: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/96.jpg)
96
Beispiel
000000000 0 0 0 0 0 0 0 0
g v5 23 41 12 31 27 34 73 3
Groumlszlige Wert
0 1 W
0
1
n
1
2
n
96SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
97
Beispiel
00000000 0 0 0 00 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g[1]gtWAlso Opt(iw) = Opt(i-1w)
g v5 23 41 12 31 27 34 73 3
1
2
97SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
98
Beispiel
00000000 0 0 0 0 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])
g v5 23 41 12 31 27 34 73 3
1
2
98SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
99
Beispiel
00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
99SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
100
Beispiel
00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
100SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
101
Beispiel
00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
101SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
102
Beispiel
0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
102SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
103
Beispiel
0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
103SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
104
Beispiel
0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
104SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
105
Beispiel
0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
105SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
106
Beispiel
000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
106SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
107
Beispiel
000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
107SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
108
Beispiel
000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
108SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
109
Beispiel
000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
109SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
110
Beispiel
00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
110SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
111
Beispiel
0000 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
111SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
112
Beispiel
000 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
112SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
113
Beispiel
00 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
113SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
114
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
114SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
115
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
Optimaler Loumlsungswert fuumlr W=8
115SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
116
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
116SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
Optimaler Loumlsungswert fuumlr W=8
117
Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert
einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks
117SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz
von u nach v sowie einen kuumlrzesten Weg
21
-15
8
4
-4
5
6
7
a
a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0
b c
f
ed
SS 2017 DuA - Kapitel 20 118
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
SS 2017 DuA - Kapitel 20 119
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Knoten k tritt maximal einmal auf
SS 2017 DuA - Kapitel 20 120
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 121
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 122
Dynamische Programmierung - APSP
123
bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt
von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1
ij
kFall (b)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
124
Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten
aus 1hellipk
bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung
d = w falls k=0min ( d d + d ) falls kge1
ij(k)
(k)(k-1) (k-1) (k-1)ij ijij ik kj
(n)ij(n)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
125
Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D
(0)
(k)ij
(n)
(k-1)ij
(k-1)ik
(k-1)kj
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
126
Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung
ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )
2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann
126SS 2017 DuA - Kapitel 20
Dynamische Programmierung
127
Beispiel 1 Matrixketten-Multiplikation
Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist
Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen
Beobachtung bull Sei Aij = AisdothellipsdotAj
bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)
127SS 2017 DuA - Kapitel 20
Dynamische Programmierung
128
bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen
Initialfall m[ii]=0 fuumlr alle iisin1hellipn
Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj
Optimaler Wert m[1n]
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1
128SS 2017 DuA - Kapitel 20
Dynamische Programmierung
129
Beispiel 2 Optimaler binaumlrer Suchbaum
Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1
Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T
(Tiefe der Wurzel ist 0) )
129SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
130
bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj
Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion
m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert
m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus
130SS 2017 DuA - Kapitel 20
Dynamische Programmierung
j
131
Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph
Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw
Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G
131SS 2017 DuA - Kapitel 20
Dynamische Programmierung
132
bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G
bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE
Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion
L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj
Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus
132SS 2017 DuA - Kapitel 20
Dynamische Programmierung
Falls die Menge leer ist ist maxhellip=0
133
Beispiel 4 Fahrstuhloptimierung
Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ
Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet
133SS 2017 DuA - Kapitel 20
Dynamische Programmierung
134
bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist
bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)
Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn
Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1
Optimaler Wert mink+1leilef m[ik]
134SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
135
Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen
Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium
Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung
135SS 2017 DuA - Kapitel 20
Dynamische Programmierung
- Foliennummer 1
- Foliennummer 2
- Foliennummer 3
- Foliennummer 4
- Foliennummer 5
- Foliennummer 6
- Foliennummer 7
- Foliennummer 8
- Foliennummer 9
- Foliennummer 10
- Foliennummer 11
- Foliennummer 12
- Foliennummer 13
- Foliennummer 14
- Foliennummer 15
- Foliennummer 16
- Foliennummer 17
- Foliennummer 18
- Foliennummer 19
- Foliennummer 20
- Foliennummer 21
- Foliennummer 22
- Foliennummer 23
- Foliennummer 24
- Foliennummer 25
- Foliennummer 26
- Foliennummer 27
- Foliennummer 28
- Foliennummer 29
- Foliennummer 30
- Foliennummer 31
- Foliennummer 32
- Foliennummer 33
- Foliennummer 34
- Foliennummer 35
- Foliennummer 36
- Foliennummer 37
- Foliennummer 38
- Foliennummer 39
- Foliennummer 40
- Foliennummer 41
- Foliennummer 42
- Foliennummer 43
- Foliennummer 44
- Foliennummer 45
- Foliennummer 46
- Foliennummer 47
- Foliennummer 48
- Foliennummer 49
- Foliennummer 50
- Foliennummer 51
- Foliennummer 52
- Foliennummer 53
- Foliennummer 54
- Foliennummer 55
- Foliennummer 56
- Foliennummer 57
- Foliennummer 58
- Foliennummer 59
- Foliennummer 60
- Foliennummer 61
- Foliennummer 62
- Foliennummer 63
- Foliennummer 64
- Foliennummer 65
- Foliennummer 66
- Foliennummer 67
- Foliennummer 68
- Foliennummer 69
- Foliennummer 70
- Foliennummer 71
- Foliennummer 72
- Foliennummer 73
- Foliennummer 74
- Foliennummer 75
- Foliennummer 76
- Foliennummer 77
- Foliennummer 78
- Foliennummer 79
- Foliennummer 80
- Fraktionales Rucksack-Problem
- Gierige Loumlsung des fraktionalen Rucksack-Problems
- Gieriges Einpacken ist optimal
- Foliennummer 84
- Foliennummer 85
- Foliennummer 86
- Foliennummer 87
- Foliennummer 88
- Foliennummer 89
- Foliennummer 90
- Foliennummer 91
- Foliennummer 92
- Foliennummer 93
- Foliennummer 94
- Foliennummer 95
- Foliennummer 96
- Foliennummer 97
- Foliennummer 98
- Foliennummer 99
- Foliennummer 100
- Foliennummer 101
- Foliennummer 102
- Foliennummer 103
- Foliennummer 104
- Foliennummer 105
- Foliennummer 106
- Foliennummer 107
- Foliennummer 108
- Foliennummer 109
- Foliennummer 110
- Foliennummer 111
- Foliennummer 112
- Foliennummer 113
- Foliennummer 114
- Foliennummer 115
- Foliennummer 116
- Foliennummer 117
- Foliennummer 118
- Foliennummer 119
- Foliennummer 120
- Foliennummer 121
- Foliennummer 122
- Foliennummer 123
- Foliennummer 124
- Foliennummer 125
- Foliennummer 126
- Foliennummer 127
- Foliennummer 128
- Foliennummer 129
- Foliennummer 130
- Foliennummer 131
- Foliennummer 132
- Foliennummer 133
- Foliennummer 134
- Foliennummer 135
-
![Page 97: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/97.jpg)
97
Beispiel
00000000 0 0 0 00 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g[1]gtWAlso Opt(iw) = Opt(i-1w)
g v5 23 41 12 31 27 34 73 3
1
2
97SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
98
Beispiel
00000000 0 0 0 0 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])
g v5 23 41 12 31 27 34 73 3
1
2
98SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
99
Beispiel
00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
99SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
100
Beispiel
00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
100SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
101
Beispiel
00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
101SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
102
Beispiel
0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
102SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
103
Beispiel
0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
103SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
104
Beispiel
0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
104SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
105
Beispiel
0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
105SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
106
Beispiel
000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
106SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
107
Beispiel
000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
107SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
108
Beispiel
000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
108SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
109
Beispiel
000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
109SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
110
Beispiel
00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
110SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
111
Beispiel
0000 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
111SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
112
Beispiel
000 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
112SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
113
Beispiel
00 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
113SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
114
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
114SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
115
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
Optimaler Loumlsungswert fuumlr W=8
115SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
116
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
116SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
Optimaler Loumlsungswert fuumlr W=8
117
Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert
einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks
117SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz
von u nach v sowie einen kuumlrzesten Weg
21
-15
8
4
-4
5
6
7
a
a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0
b c
f
ed
SS 2017 DuA - Kapitel 20 118
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
SS 2017 DuA - Kapitel 20 119
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Knoten k tritt maximal einmal auf
SS 2017 DuA - Kapitel 20 120
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 121
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 122
Dynamische Programmierung - APSP
123
bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt
von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1
ij
kFall (b)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
124
Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten
aus 1hellipk
bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung
d = w falls k=0min ( d d + d ) falls kge1
ij(k)
(k)(k-1) (k-1) (k-1)ij ijij ik kj
(n)ij(n)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
125
Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D
(0)
(k)ij
(n)
(k-1)ij
(k-1)ik
(k-1)kj
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
126
Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung
ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )
2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann
126SS 2017 DuA - Kapitel 20
Dynamische Programmierung
127
Beispiel 1 Matrixketten-Multiplikation
Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist
Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen
Beobachtung bull Sei Aij = AisdothellipsdotAj
bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)
127SS 2017 DuA - Kapitel 20
Dynamische Programmierung
128
bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen
Initialfall m[ii]=0 fuumlr alle iisin1hellipn
Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj
Optimaler Wert m[1n]
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1
128SS 2017 DuA - Kapitel 20
Dynamische Programmierung
129
Beispiel 2 Optimaler binaumlrer Suchbaum
Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1
Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T
(Tiefe der Wurzel ist 0) )
129SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
130
bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj
Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion
m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert
m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus
130SS 2017 DuA - Kapitel 20
Dynamische Programmierung
j
131
Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph
Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw
Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G
131SS 2017 DuA - Kapitel 20
Dynamische Programmierung
132
bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G
bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE
Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion
L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj
Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus
132SS 2017 DuA - Kapitel 20
Dynamische Programmierung
Falls die Menge leer ist ist maxhellip=0
133
Beispiel 4 Fahrstuhloptimierung
Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ
Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet
133SS 2017 DuA - Kapitel 20
Dynamische Programmierung
134
bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist
bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)
Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn
Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1
Optimaler Wert mink+1leilef m[ik]
134SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
135
Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen
Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium
Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung
135SS 2017 DuA - Kapitel 20
Dynamische Programmierung
- Foliennummer 1
- Foliennummer 2
- Foliennummer 3
- Foliennummer 4
- Foliennummer 5
- Foliennummer 6
- Foliennummer 7
- Foliennummer 8
- Foliennummer 9
- Foliennummer 10
- Foliennummer 11
- Foliennummer 12
- Foliennummer 13
- Foliennummer 14
- Foliennummer 15
- Foliennummer 16
- Foliennummer 17
- Foliennummer 18
- Foliennummer 19
- Foliennummer 20
- Foliennummer 21
- Foliennummer 22
- Foliennummer 23
- Foliennummer 24
- Foliennummer 25
- Foliennummer 26
- Foliennummer 27
- Foliennummer 28
- Foliennummer 29
- Foliennummer 30
- Foliennummer 31
- Foliennummer 32
- Foliennummer 33
- Foliennummer 34
- Foliennummer 35
- Foliennummer 36
- Foliennummer 37
- Foliennummer 38
- Foliennummer 39
- Foliennummer 40
- Foliennummer 41
- Foliennummer 42
- Foliennummer 43
- Foliennummer 44
- Foliennummer 45
- Foliennummer 46
- Foliennummer 47
- Foliennummer 48
- Foliennummer 49
- Foliennummer 50
- Foliennummer 51
- Foliennummer 52
- Foliennummer 53
- Foliennummer 54
- Foliennummer 55
- Foliennummer 56
- Foliennummer 57
- Foliennummer 58
- Foliennummer 59
- Foliennummer 60
- Foliennummer 61
- Foliennummer 62
- Foliennummer 63
- Foliennummer 64
- Foliennummer 65
- Foliennummer 66
- Foliennummer 67
- Foliennummer 68
- Foliennummer 69
- Foliennummer 70
- Foliennummer 71
- Foliennummer 72
- Foliennummer 73
- Foliennummer 74
- Foliennummer 75
- Foliennummer 76
- Foliennummer 77
- Foliennummer 78
- Foliennummer 79
- Foliennummer 80
- Fraktionales Rucksack-Problem
- Gierige Loumlsung des fraktionalen Rucksack-Problems
- Gieriges Einpacken ist optimal
- Foliennummer 84
- Foliennummer 85
- Foliennummer 86
- Foliennummer 87
- Foliennummer 88
- Foliennummer 89
- Foliennummer 90
- Foliennummer 91
- Foliennummer 92
- Foliennummer 93
- Foliennummer 94
- Foliennummer 95
- Foliennummer 96
- Foliennummer 97
- Foliennummer 98
- Foliennummer 99
- Foliennummer 100
- Foliennummer 101
- Foliennummer 102
- Foliennummer 103
- Foliennummer 104
- Foliennummer 105
- Foliennummer 106
- Foliennummer 107
- Foliennummer 108
- Foliennummer 109
- Foliennummer 110
- Foliennummer 111
- Foliennummer 112
- Foliennummer 113
- Foliennummer 114
- Foliennummer 115
- Foliennummer 116
- Foliennummer 117
- Foliennummer 118
- Foliennummer 119
- Foliennummer 120
- Foliennummer 121
- Foliennummer 122
- Foliennummer 123
- Foliennummer 124
- Foliennummer 125
- Foliennummer 126
- Foliennummer 127
- Foliennummer 128
- Foliennummer 129
- Foliennummer 130
- Foliennummer 131
- Foliennummer 132
- Foliennummer 133
- Foliennummer 134
- Foliennummer 135
-
![Page 98: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/98.jpg)
98
Beispiel
00000000 0 0 0 0 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
Opt(iw) = maxOpt(i-1w) v[i] + Opt(i-1w-g[i])
g v5 23 41 12 31 27 34 73 3
1
2
98SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
99
Beispiel
00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
99SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
100
Beispiel
00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
100SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
101
Beispiel
00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
101SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
102
Beispiel
0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
102SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
103
Beispiel
0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
103SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
104
Beispiel
0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
104SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
105
Beispiel
0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
105SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
106
Beispiel
000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
106SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
107
Beispiel
000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
107SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
108
Beispiel
000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
108SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
109
Beispiel
000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
109SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
110
Beispiel
00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
110SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
111
Beispiel
0000 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
111SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
112
Beispiel
000 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
112SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
113
Beispiel
00 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
113SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
114
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
114SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
115
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
Optimaler Loumlsungswert fuumlr W=8
115SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
116
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
116SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
Optimaler Loumlsungswert fuumlr W=8
117
Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert
einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks
117SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz
von u nach v sowie einen kuumlrzesten Weg
21
-15
8
4
-4
5
6
7
a
a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0
b c
f
ed
SS 2017 DuA - Kapitel 20 118
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
SS 2017 DuA - Kapitel 20 119
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Knoten k tritt maximal einmal auf
SS 2017 DuA - Kapitel 20 120
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 121
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 122
Dynamische Programmierung - APSP
123
bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt
von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1
ij
kFall (b)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
124
Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten
aus 1hellipk
bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung
d = w falls k=0min ( d d + d ) falls kge1
ij(k)
(k)(k-1) (k-1) (k-1)ij ijij ik kj
(n)ij(n)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
125
Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D
(0)
(k)ij
(n)
(k-1)ij
(k-1)ik
(k-1)kj
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
126
Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung
ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )
2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann
126SS 2017 DuA - Kapitel 20
Dynamische Programmierung
127
Beispiel 1 Matrixketten-Multiplikation
Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist
Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen
Beobachtung bull Sei Aij = AisdothellipsdotAj
bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)
127SS 2017 DuA - Kapitel 20
Dynamische Programmierung
128
bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen
Initialfall m[ii]=0 fuumlr alle iisin1hellipn
Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj
Optimaler Wert m[1n]
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1
128SS 2017 DuA - Kapitel 20
Dynamische Programmierung
129
Beispiel 2 Optimaler binaumlrer Suchbaum
Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1
Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T
(Tiefe der Wurzel ist 0) )
129SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
130
bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj
Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion
m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert
m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus
130SS 2017 DuA - Kapitel 20
Dynamische Programmierung
j
131
Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph
Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw
Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G
131SS 2017 DuA - Kapitel 20
Dynamische Programmierung
132
bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G
bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE
Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion
L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj
Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus
132SS 2017 DuA - Kapitel 20
Dynamische Programmierung
Falls die Menge leer ist ist maxhellip=0
133
Beispiel 4 Fahrstuhloptimierung
Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ
Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet
133SS 2017 DuA - Kapitel 20
Dynamische Programmierung
134
bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist
bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)
Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn
Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1
Optimaler Wert mink+1leilef m[ik]
134SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
135
Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen
Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium
Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung
135SS 2017 DuA - Kapitel 20
Dynamische Programmierung
- Foliennummer 1
- Foliennummer 2
- Foliennummer 3
- Foliennummer 4
- Foliennummer 5
- Foliennummer 6
- Foliennummer 7
- Foliennummer 8
- Foliennummer 9
- Foliennummer 10
- Foliennummer 11
- Foliennummer 12
- Foliennummer 13
- Foliennummer 14
- Foliennummer 15
- Foliennummer 16
- Foliennummer 17
- Foliennummer 18
- Foliennummer 19
- Foliennummer 20
- Foliennummer 21
- Foliennummer 22
- Foliennummer 23
- Foliennummer 24
- Foliennummer 25
- Foliennummer 26
- Foliennummer 27
- Foliennummer 28
- Foliennummer 29
- Foliennummer 30
- Foliennummer 31
- Foliennummer 32
- Foliennummer 33
- Foliennummer 34
- Foliennummer 35
- Foliennummer 36
- Foliennummer 37
- Foliennummer 38
- Foliennummer 39
- Foliennummer 40
- Foliennummer 41
- Foliennummer 42
- Foliennummer 43
- Foliennummer 44
- Foliennummer 45
- Foliennummer 46
- Foliennummer 47
- Foliennummer 48
- Foliennummer 49
- Foliennummer 50
- Foliennummer 51
- Foliennummer 52
- Foliennummer 53
- Foliennummer 54
- Foliennummer 55
- Foliennummer 56
- Foliennummer 57
- Foliennummer 58
- Foliennummer 59
- Foliennummer 60
- Foliennummer 61
- Foliennummer 62
- Foliennummer 63
- Foliennummer 64
- Foliennummer 65
- Foliennummer 66
- Foliennummer 67
- Foliennummer 68
- Foliennummer 69
- Foliennummer 70
- Foliennummer 71
- Foliennummer 72
- Foliennummer 73
- Foliennummer 74
- Foliennummer 75
- Foliennummer 76
- Foliennummer 77
- Foliennummer 78
- Foliennummer 79
- Foliennummer 80
- Fraktionales Rucksack-Problem
- Gierige Loumlsung des fraktionalen Rucksack-Problems
- Gieriges Einpacken ist optimal
- Foliennummer 84
- Foliennummer 85
- Foliennummer 86
- Foliennummer 87
- Foliennummer 88
- Foliennummer 89
- Foliennummer 90
- Foliennummer 91
- Foliennummer 92
- Foliennummer 93
- Foliennummer 94
- Foliennummer 95
- Foliennummer 96
- Foliennummer 97
- Foliennummer 98
- Foliennummer 99
- Foliennummer 100
- Foliennummer 101
- Foliennummer 102
- Foliennummer 103
- Foliennummer 104
- Foliennummer 105
- Foliennummer 106
- Foliennummer 107
- Foliennummer 108
- Foliennummer 109
- Foliennummer 110
- Foliennummer 111
- Foliennummer 112
- Foliennummer 113
- Foliennummer 114
- Foliennummer 115
- Foliennummer 116
- Foliennummer 117
- Foliennummer 118
- Foliennummer 119
- Foliennummer 120
- Foliennummer 121
- Foliennummer 122
- Foliennummer 123
- Foliennummer 124
- Foliennummer 125
- Foliennummer 126
- Foliennummer 127
- Foliennummer 128
- Foliennummer 129
- Foliennummer 130
- Foliennummer 131
- Foliennummer 132
- Foliennummer 133
- Foliennummer 134
- Foliennummer 135
-
![Page 99: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/99.jpg)
99
Beispiel
00000000 0 0 0 0 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
99SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
100
Beispiel
00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
100SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
101
Beispiel
00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
101SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
102
Beispiel
0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
102SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
103
Beispiel
0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
103SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
104
Beispiel
0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
104SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
105
Beispiel
0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
105SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
106
Beispiel
000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
106SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
107
Beispiel
000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
107SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
108
Beispiel
000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
108SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
109
Beispiel
000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
109SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
110
Beispiel
00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
110SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
111
Beispiel
0000 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
111SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
112
Beispiel
000 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
112SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
113
Beispiel
00 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
113SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
114
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
114SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
115
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
Optimaler Loumlsungswert fuumlr W=8
115SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
116
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
116SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
Optimaler Loumlsungswert fuumlr W=8
117
Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert
einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks
117SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz
von u nach v sowie einen kuumlrzesten Weg
21
-15
8
4
-4
5
6
7
a
a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0
b c
f
ed
SS 2017 DuA - Kapitel 20 118
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
SS 2017 DuA - Kapitel 20 119
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Knoten k tritt maximal einmal auf
SS 2017 DuA - Kapitel 20 120
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 121
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 122
Dynamische Programmierung - APSP
123
bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt
von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1
ij
kFall (b)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
124
Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten
aus 1hellipk
bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung
d = w falls k=0min ( d d + d ) falls kge1
ij(k)
(k)(k-1) (k-1) (k-1)ij ijij ik kj
(n)ij(n)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
125
Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D
(0)
(k)ij
(n)
(k-1)ij
(k-1)ik
(k-1)kj
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
126
Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung
ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )
2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann
126SS 2017 DuA - Kapitel 20
Dynamische Programmierung
127
Beispiel 1 Matrixketten-Multiplikation
Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist
Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen
Beobachtung bull Sei Aij = AisdothellipsdotAj
bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)
127SS 2017 DuA - Kapitel 20
Dynamische Programmierung
128
bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen
Initialfall m[ii]=0 fuumlr alle iisin1hellipn
Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj
Optimaler Wert m[1n]
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1
128SS 2017 DuA - Kapitel 20
Dynamische Programmierung
129
Beispiel 2 Optimaler binaumlrer Suchbaum
Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1
Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T
(Tiefe der Wurzel ist 0) )
129SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
130
bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj
Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion
m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert
m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus
130SS 2017 DuA - Kapitel 20
Dynamische Programmierung
j
131
Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph
Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw
Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G
131SS 2017 DuA - Kapitel 20
Dynamische Programmierung
132
bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G
bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE
Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion
L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj
Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus
132SS 2017 DuA - Kapitel 20
Dynamische Programmierung
Falls die Menge leer ist ist maxhellip=0
133
Beispiel 4 Fahrstuhloptimierung
Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ
Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet
133SS 2017 DuA - Kapitel 20
Dynamische Programmierung
134
bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist
bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)
Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn
Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1
Optimaler Wert mink+1leilef m[ik]
134SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
135
Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen
Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium
Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung
135SS 2017 DuA - Kapitel 20
Dynamische Programmierung
- Foliennummer 1
- Foliennummer 2
- Foliennummer 3
- Foliennummer 4
- Foliennummer 5
- Foliennummer 6
- Foliennummer 7
- Foliennummer 8
- Foliennummer 9
- Foliennummer 10
- Foliennummer 11
- Foliennummer 12
- Foliennummer 13
- Foliennummer 14
- Foliennummer 15
- Foliennummer 16
- Foliennummer 17
- Foliennummer 18
- Foliennummer 19
- Foliennummer 20
- Foliennummer 21
- Foliennummer 22
- Foliennummer 23
- Foliennummer 24
- Foliennummer 25
- Foliennummer 26
- Foliennummer 27
- Foliennummer 28
- Foliennummer 29
- Foliennummer 30
- Foliennummer 31
- Foliennummer 32
- Foliennummer 33
- Foliennummer 34
- Foliennummer 35
- Foliennummer 36
- Foliennummer 37
- Foliennummer 38
- Foliennummer 39
- Foliennummer 40
- Foliennummer 41
- Foliennummer 42
- Foliennummer 43
- Foliennummer 44
- Foliennummer 45
- Foliennummer 46
- Foliennummer 47
- Foliennummer 48
- Foliennummer 49
- Foliennummer 50
- Foliennummer 51
- Foliennummer 52
- Foliennummer 53
- Foliennummer 54
- Foliennummer 55
- Foliennummer 56
- Foliennummer 57
- Foliennummer 58
- Foliennummer 59
- Foliennummer 60
- Foliennummer 61
- Foliennummer 62
- Foliennummer 63
- Foliennummer 64
- Foliennummer 65
- Foliennummer 66
- Foliennummer 67
- Foliennummer 68
- Foliennummer 69
- Foliennummer 70
- Foliennummer 71
- Foliennummer 72
- Foliennummer 73
- Foliennummer 74
- Foliennummer 75
- Foliennummer 76
- Foliennummer 77
- Foliennummer 78
- Foliennummer 79
- Foliennummer 80
- Fraktionales Rucksack-Problem
- Gierige Loumlsung des fraktionalen Rucksack-Problems
- Gieriges Einpacken ist optimal
- Foliennummer 84
- Foliennummer 85
- Foliennummer 86
- Foliennummer 87
- Foliennummer 88
- Foliennummer 89
- Foliennummer 90
- Foliennummer 91
- Foliennummer 92
- Foliennummer 93
- Foliennummer 94
- Foliennummer 95
- Foliennummer 96
- Foliennummer 97
- Foliennummer 98
- Foliennummer 99
- Foliennummer 100
- Foliennummer 101
- Foliennummer 102
- Foliennummer 103
- Foliennummer 104
- Foliennummer 105
- Foliennummer 106
- Foliennummer 107
- Foliennummer 108
- Foliennummer 109
- Foliennummer 110
- Foliennummer 111
- Foliennummer 112
- Foliennummer 113
- Foliennummer 114
- Foliennummer 115
- Foliennummer 116
- Foliennummer 117
- Foliennummer 118
- Foliennummer 119
- Foliennummer 120
- Foliennummer 121
- Foliennummer 122
- Foliennummer 123
- Foliennummer 124
- Foliennummer 125
- Foliennummer 126
- Foliennummer 127
- Foliennummer 128
- Foliennummer 129
- Foliennummer 130
- Foliennummer 131
- Foliennummer 132
- Foliennummer 133
- Foliennummer 134
- Foliennummer 135
-
![Page 100: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/100.jpg)
100
Beispiel
00000000 0 0 0 0 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
100SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
101
Beispiel
00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
101SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
102
Beispiel
0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
102SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
103
Beispiel
0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
103SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
104
Beispiel
0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
104SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
105
Beispiel
0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
105SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
106
Beispiel
000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
106SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
107
Beispiel
000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
107SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
108
Beispiel
000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
108SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
109
Beispiel
000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
109SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
110
Beispiel
00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
110SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
111
Beispiel
0000 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
111SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
112
Beispiel
000 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
112SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
113
Beispiel
00 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
113SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
114
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
114SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
115
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
Optimaler Loumlsungswert fuumlr W=8
115SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
116
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
116SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
Optimaler Loumlsungswert fuumlr W=8
117
Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert
einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks
117SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz
von u nach v sowie einen kuumlrzesten Weg
21
-15
8
4
-4
5
6
7
a
a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0
b c
f
ed
SS 2017 DuA - Kapitel 20 118
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
SS 2017 DuA - Kapitel 20 119
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Knoten k tritt maximal einmal auf
SS 2017 DuA - Kapitel 20 120
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 121
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 122
Dynamische Programmierung - APSP
123
bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt
von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1
ij
kFall (b)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
124
Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten
aus 1hellipk
bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung
d = w falls k=0min ( d d + d ) falls kge1
ij(k)
(k)(k-1) (k-1) (k-1)ij ijij ik kj
(n)ij(n)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
125
Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D
(0)
(k)ij
(n)
(k-1)ij
(k-1)ik
(k-1)kj
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
126
Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung
ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )
2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann
126SS 2017 DuA - Kapitel 20
Dynamische Programmierung
127
Beispiel 1 Matrixketten-Multiplikation
Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist
Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen
Beobachtung bull Sei Aij = AisdothellipsdotAj
bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)
127SS 2017 DuA - Kapitel 20
Dynamische Programmierung
128
bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen
Initialfall m[ii]=0 fuumlr alle iisin1hellipn
Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj
Optimaler Wert m[1n]
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1
128SS 2017 DuA - Kapitel 20
Dynamische Programmierung
129
Beispiel 2 Optimaler binaumlrer Suchbaum
Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1
Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T
(Tiefe der Wurzel ist 0) )
129SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
130
bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj
Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion
m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert
m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus
130SS 2017 DuA - Kapitel 20
Dynamische Programmierung
j
131
Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph
Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw
Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G
131SS 2017 DuA - Kapitel 20
Dynamische Programmierung
132
bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G
bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE
Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion
L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj
Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus
132SS 2017 DuA - Kapitel 20
Dynamische Programmierung
Falls die Menge leer ist ist maxhellip=0
133
Beispiel 4 Fahrstuhloptimierung
Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ
Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet
133SS 2017 DuA - Kapitel 20
Dynamische Programmierung
134
bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist
bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)
Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn
Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1
Optimaler Wert mink+1leilef m[ik]
134SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
135
Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen
Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium
Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung
135SS 2017 DuA - Kapitel 20
Dynamische Programmierung
- Foliennummer 1
- Foliennummer 2
- Foliennummer 3
- Foliennummer 4
- Foliennummer 5
- Foliennummer 6
- Foliennummer 7
- Foliennummer 8
- Foliennummer 9
- Foliennummer 10
- Foliennummer 11
- Foliennummer 12
- Foliennummer 13
- Foliennummer 14
- Foliennummer 15
- Foliennummer 16
- Foliennummer 17
- Foliennummer 18
- Foliennummer 19
- Foliennummer 20
- Foliennummer 21
- Foliennummer 22
- Foliennummer 23
- Foliennummer 24
- Foliennummer 25
- Foliennummer 26
- Foliennummer 27
- Foliennummer 28
- Foliennummer 29
- Foliennummer 30
- Foliennummer 31
- Foliennummer 32
- Foliennummer 33
- Foliennummer 34
- Foliennummer 35
- Foliennummer 36
- Foliennummer 37
- Foliennummer 38
- Foliennummer 39
- Foliennummer 40
- Foliennummer 41
- Foliennummer 42
- Foliennummer 43
- Foliennummer 44
- Foliennummer 45
- Foliennummer 46
- Foliennummer 47
- Foliennummer 48
- Foliennummer 49
- Foliennummer 50
- Foliennummer 51
- Foliennummer 52
- Foliennummer 53
- Foliennummer 54
- Foliennummer 55
- Foliennummer 56
- Foliennummer 57
- Foliennummer 58
- Foliennummer 59
- Foliennummer 60
- Foliennummer 61
- Foliennummer 62
- Foliennummer 63
- Foliennummer 64
- Foliennummer 65
- Foliennummer 66
- Foliennummer 67
- Foliennummer 68
- Foliennummer 69
- Foliennummer 70
- Foliennummer 71
- Foliennummer 72
- Foliennummer 73
- Foliennummer 74
- Foliennummer 75
- Foliennummer 76
- Foliennummer 77
- Foliennummer 78
- Foliennummer 79
- Foliennummer 80
- Fraktionales Rucksack-Problem
- Gierige Loumlsung des fraktionalen Rucksack-Problems
- Gieriges Einpacken ist optimal
- Foliennummer 84
- Foliennummer 85
- Foliennummer 86
- Foliennummer 87
- Foliennummer 88
- Foliennummer 89
- Foliennummer 90
- Foliennummer 91
- Foliennummer 92
- Foliennummer 93
- Foliennummer 94
- Foliennummer 95
- Foliennummer 96
- Foliennummer 97
- Foliennummer 98
- Foliennummer 99
- Foliennummer 100
- Foliennummer 101
- Foliennummer 102
- Foliennummer 103
- Foliennummer 104
- Foliennummer 105
- Foliennummer 106
- Foliennummer 107
- Foliennummer 108
- Foliennummer 109
- Foliennummer 110
- Foliennummer 111
- Foliennummer 112
- Foliennummer 113
- Foliennummer 114
- Foliennummer 115
- Foliennummer 116
- Foliennummer 117
- Foliennummer 118
- Foliennummer 119
- Foliennummer 120
- Foliennummer 121
- Foliennummer 122
- Foliennummer 123
- Foliennummer 124
- Foliennummer 125
- Foliennummer 126
- Foliennummer 127
- Foliennummer 128
- Foliennummer 129
- Foliennummer 130
- Foliennummer 131
- Foliennummer 132
- Foliennummer 133
- Foliennummer 134
- Foliennummer 135
-
![Page 101: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/101.jpg)
101
Beispiel
00000000 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
101SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
102
Beispiel
0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
102SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
103
Beispiel
0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
103SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
104
Beispiel
0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
104SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
105
Beispiel
0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
105SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
106
Beispiel
000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
106SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
107
Beispiel
000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
107SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
108
Beispiel
000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
108SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
109
Beispiel
000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
109SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
110
Beispiel
00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
110SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
111
Beispiel
0000 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
111SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
112
Beispiel
000 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
112SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
113
Beispiel
00 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
113SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
114
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
114SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
115
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
Optimaler Loumlsungswert fuumlr W=8
115SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
116
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
116SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
Optimaler Loumlsungswert fuumlr W=8
117
Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert
einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks
117SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz
von u nach v sowie einen kuumlrzesten Weg
21
-15
8
4
-4
5
6
7
a
a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0
b c
f
ed
SS 2017 DuA - Kapitel 20 118
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
SS 2017 DuA - Kapitel 20 119
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Knoten k tritt maximal einmal auf
SS 2017 DuA - Kapitel 20 120
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 121
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 122
Dynamische Programmierung - APSP
123
bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt
von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1
ij
kFall (b)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
124
Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten
aus 1hellipk
bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung
d = w falls k=0min ( d d + d ) falls kge1
ij(k)
(k)(k-1) (k-1) (k-1)ij ijij ik kj
(n)ij(n)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
125
Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D
(0)
(k)ij
(n)
(k-1)ij
(k-1)ik
(k-1)kj
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
126
Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung
ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )
2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann
126SS 2017 DuA - Kapitel 20
Dynamische Programmierung
127
Beispiel 1 Matrixketten-Multiplikation
Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist
Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen
Beobachtung bull Sei Aij = AisdothellipsdotAj
bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)
127SS 2017 DuA - Kapitel 20
Dynamische Programmierung
128
bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen
Initialfall m[ii]=0 fuumlr alle iisin1hellipn
Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj
Optimaler Wert m[1n]
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1
128SS 2017 DuA - Kapitel 20
Dynamische Programmierung
129
Beispiel 2 Optimaler binaumlrer Suchbaum
Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1
Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T
(Tiefe der Wurzel ist 0) )
129SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
130
bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj
Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion
m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert
m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus
130SS 2017 DuA - Kapitel 20
Dynamische Programmierung
j
131
Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph
Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw
Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G
131SS 2017 DuA - Kapitel 20
Dynamische Programmierung
132
bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G
bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE
Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion
L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj
Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus
132SS 2017 DuA - Kapitel 20
Dynamische Programmierung
Falls die Menge leer ist ist maxhellip=0
133
Beispiel 4 Fahrstuhloptimierung
Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ
Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet
133SS 2017 DuA - Kapitel 20
Dynamische Programmierung
134
bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist
bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)
Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn
Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1
Optimaler Wert mink+1leilef m[ik]
134SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
135
Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen
Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium
Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung
135SS 2017 DuA - Kapitel 20
Dynamische Programmierung
- Foliennummer 1
- Foliennummer 2
- Foliennummer 3
- Foliennummer 4
- Foliennummer 5
- Foliennummer 6
- Foliennummer 7
- Foliennummer 8
- Foliennummer 9
- Foliennummer 10
- Foliennummer 11
- Foliennummer 12
- Foliennummer 13
- Foliennummer 14
- Foliennummer 15
- Foliennummer 16
- Foliennummer 17
- Foliennummer 18
- Foliennummer 19
- Foliennummer 20
- Foliennummer 21
- Foliennummer 22
- Foliennummer 23
- Foliennummer 24
- Foliennummer 25
- Foliennummer 26
- Foliennummer 27
- Foliennummer 28
- Foliennummer 29
- Foliennummer 30
- Foliennummer 31
- Foliennummer 32
- Foliennummer 33
- Foliennummer 34
- Foliennummer 35
- Foliennummer 36
- Foliennummer 37
- Foliennummer 38
- Foliennummer 39
- Foliennummer 40
- Foliennummer 41
- Foliennummer 42
- Foliennummer 43
- Foliennummer 44
- Foliennummer 45
- Foliennummer 46
- Foliennummer 47
- Foliennummer 48
- Foliennummer 49
- Foliennummer 50
- Foliennummer 51
- Foliennummer 52
- Foliennummer 53
- Foliennummer 54
- Foliennummer 55
- Foliennummer 56
- Foliennummer 57
- Foliennummer 58
- Foliennummer 59
- Foliennummer 60
- Foliennummer 61
- Foliennummer 62
- Foliennummer 63
- Foliennummer 64
- Foliennummer 65
- Foliennummer 66
- Foliennummer 67
- Foliennummer 68
- Foliennummer 69
- Foliennummer 70
- Foliennummer 71
- Foliennummer 72
- Foliennummer 73
- Foliennummer 74
- Foliennummer 75
- Foliennummer 76
- Foliennummer 77
- Foliennummer 78
- Foliennummer 79
- Foliennummer 80
- Fraktionales Rucksack-Problem
- Gierige Loumlsung des fraktionalen Rucksack-Problems
- Gieriges Einpacken ist optimal
- Foliennummer 84
- Foliennummer 85
- Foliennummer 86
- Foliennummer 87
- Foliennummer 88
- Foliennummer 89
- Foliennummer 90
- Foliennummer 91
- Foliennummer 92
- Foliennummer 93
- Foliennummer 94
- Foliennummer 95
- Foliennummer 96
- Foliennummer 97
- Foliennummer 98
- Foliennummer 99
- Foliennummer 100
- Foliennummer 101
- Foliennummer 102
- Foliennummer 103
- Foliennummer 104
- Foliennummer 105
- Foliennummer 106
- Foliennummer 107
- Foliennummer 108
- Foliennummer 109
- Foliennummer 110
- Foliennummer 111
- Foliennummer 112
- Foliennummer 113
- Foliennummer 114
- Foliennummer 115
- Foliennummer 116
- Foliennummer 117
- Foliennummer 118
- Foliennummer 119
- Foliennummer 120
- Foliennummer 121
- Foliennummer 122
- Foliennummer 123
- Foliennummer 124
- Foliennummer 125
- Foliennummer 126
- Foliennummer 127
- Foliennummer 128
- Foliennummer 129
- Foliennummer 130
- Foliennummer 131
- Foliennummer 132
- Foliennummer 133
- Foliennummer 134
- Foliennummer 135
-
![Page 102: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/102.jpg)
102
Beispiel
0000000 0 00 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
102SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
103
Beispiel
0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
103SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
104
Beispiel
0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
104SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
105
Beispiel
0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
105SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
106
Beispiel
000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
106SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
107
Beispiel
000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
107SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
108
Beispiel
000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
108SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
109
Beispiel
000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
109SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
110
Beispiel
00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
110SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
111
Beispiel
0000 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
111SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
112
Beispiel
000 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
112SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
113
Beispiel
00 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
113SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
114
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
114SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
115
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
Optimaler Loumlsungswert fuumlr W=8
115SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
116
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
116SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
Optimaler Loumlsungswert fuumlr W=8
117
Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert
einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks
117SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz
von u nach v sowie einen kuumlrzesten Weg
21
-15
8
4
-4
5
6
7
a
a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0
b c
f
ed
SS 2017 DuA - Kapitel 20 118
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
SS 2017 DuA - Kapitel 20 119
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Knoten k tritt maximal einmal auf
SS 2017 DuA - Kapitel 20 120
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 121
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 122
Dynamische Programmierung - APSP
123
bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt
von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1
ij
kFall (b)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
124
Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten
aus 1hellipk
bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung
d = w falls k=0min ( d d + d ) falls kge1
ij(k)
(k)(k-1) (k-1) (k-1)ij ijij ik kj
(n)ij(n)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
125
Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D
(0)
(k)ij
(n)
(k-1)ij
(k-1)ik
(k-1)kj
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
126
Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung
ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )
2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann
126SS 2017 DuA - Kapitel 20
Dynamische Programmierung
127
Beispiel 1 Matrixketten-Multiplikation
Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist
Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen
Beobachtung bull Sei Aij = AisdothellipsdotAj
bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)
127SS 2017 DuA - Kapitel 20
Dynamische Programmierung
128
bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen
Initialfall m[ii]=0 fuumlr alle iisin1hellipn
Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj
Optimaler Wert m[1n]
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1
128SS 2017 DuA - Kapitel 20
Dynamische Programmierung
129
Beispiel 2 Optimaler binaumlrer Suchbaum
Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1
Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T
(Tiefe der Wurzel ist 0) )
129SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
130
bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj
Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion
m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert
m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus
130SS 2017 DuA - Kapitel 20
Dynamische Programmierung
j
131
Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph
Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw
Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G
131SS 2017 DuA - Kapitel 20
Dynamische Programmierung
132
bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G
bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE
Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion
L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj
Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus
132SS 2017 DuA - Kapitel 20
Dynamische Programmierung
Falls die Menge leer ist ist maxhellip=0
133
Beispiel 4 Fahrstuhloptimierung
Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ
Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet
133SS 2017 DuA - Kapitel 20
Dynamische Programmierung
134
bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist
bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)
Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn
Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1
Optimaler Wert mink+1leilef m[ik]
134SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
135
Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen
Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium
Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung
135SS 2017 DuA - Kapitel 20
Dynamische Programmierung
- Foliennummer 1
- Foliennummer 2
- Foliennummer 3
- Foliennummer 4
- Foliennummer 5
- Foliennummer 6
- Foliennummer 7
- Foliennummer 8
- Foliennummer 9
- Foliennummer 10
- Foliennummer 11
- Foliennummer 12
- Foliennummer 13
- Foliennummer 14
- Foliennummer 15
- Foliennummer 16
- Foliennummer 17
- Foliennummer 18
- Foliennummer 19
- Foliennummer 20
- Foliennummer 21
- Foliennummer 22
- Foliennummer 23
- Foliennummer 24
- Foliennummer 25
- Foliennummer 26
- Foliennummer 27
- Foliennummer 28
- Foliennummer 29
- Foliennummer 30
- Foliennummer 31
- Foliennummer 32
- Foliennummer 33
- Foliennummer 34
- Foliennummer 35
- Foliennummer 36
- Foliennummer 37
- Foliennummer 38
- Foliennummer 39
- Foliennummer 40
- Foliennummer 41
- Foliennummer 42
- Foliennummer 43
- Foliennummer 44
- Foliennummer 45
- Foliennummer 46
- Foliennummer 47
- Foliennummer 48
- Foliennummer 49
- Foliennummer 50
- Foliennummer 51
- Foliennummer 52
- Foliennummer 53
- Foliennummer 54
- Foliennummer 55
- Foliennummer 56
- Foliennummer 57
- Foliennummer 58
- Foliennummer 59
- Foliennummer 60
- Foliennummer 61
- Foliennummer 62
- Foliennummer 63
- Foliennummer 64
- Foliennummer 65
- Foliennummer 66
- Foliennummer 67
- Foliennummer 68
- Foliennummer 69
- Foliennummer 70
- Foliennummer 71
- Foliennummer 72
- Foliennummer 73
- Foliennummer 74
- Foliennummer 75
- Foliennummer 76
- Foliennummer 77
- Foliennummer 78
- Foliennummer 79
- Foliennummer 80
- Fraktionales Rucksack-Problem
- Gierige Loumlsung des fraktionalen Rucksack-Problems
- Gieriges Einpacken ist optimal
- Foliennummer 84
- Foliennummer 85
- Foliennummer 86
- Foliennummer 87
- Foliennummer 88
- Foliennummer 89
- Foliennummer 90
- Foliennummer 91
- Foliennummer 92
- Foliennummer 93
- Foliennummer 94
- Foliennummer 95
- Foliennummer 96
- Foliennummer 97
- Foliennummer 98
- Foliennummer 99
- Foliennummer 100
- Foliennummer 101
- Foliennummer 102
- Foliennummer 103
- Foliennummer 104
- Foliennummer 105
- Foliennummer 106
- Foliennummer 107
- Foliennummer 108
- Foliennummer 109
- Foliennummer 110
- Foliennummer 111
- Foliennummer 112
- Foliennummer 113
- Foliennummer 114
- Foliennummer 115
- Foliennummer 116
- Foliennummer 117
- Foliennummer 118
- Foliennummer 119
- Foliennummer 120
- Foliennummer 121
- Foliennummer 122
- Foliennummer 123
- Foliennummer 124
- Foliennummer 125
- Foliennummer 126
- Foliennummer 127
- Foliennummer 128
- Foliennummer 129
- Foliennummer 130
- Foliennummer 131
- Foliennummer 132
- Foliennummer 133
- Foliennummer 134
- Foliennummer 135
-
![Page 103: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/103.jpg)
103
Beispiel
0000000 0 0 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
103SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
104
Beispiel
0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
104SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
105
Beispiel
0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
105SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
106
Beispiel
000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
106SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
107
Beispiel
000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
107SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
108
Beispiel
000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
108SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
109
Beispiel
000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
109SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
110
Beispiel
00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
110SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
111
Beispiel
0000 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
111SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
112
Beispiel
000 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
112SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
113
Beispiel
00 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
113SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
114
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
114SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
115
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
Optimaler Loumlsungswert fuumlr W=8
115SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
116
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
116SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
Optimaler Loumlsungswert fuumlr W=8
117
Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert
einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks
117SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz
von u nach v sowie einen kuumlrzesten Weg
21
-15
8
4
-4
5
6
7
a
a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0
b c
f
ed
SS 2017 DuA - Kapitel 20 118
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
SS 2017 DuA - Kapitel 20 119
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Knoten k tritt maximal einmal auf
SS 2017 DuA - Kapitel 20 120
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 121
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 122
Dynamische Programmierung - APSP
123
bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt
von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1
ij
kFall (b)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
124
Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten
aus 1hellipk
bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung
d = w falls k=0min ( d d + d ) falls kge1
ij(k)
(k)(k-1) (k-1) (k-1)ij ijij ik kj
(n)ij(n)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
125
Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D
(0)
(k)ij
(n)
(k-1)ij
(k-1)ik
(k-1)kj
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
126
Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung
ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )
2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann
126SS 2017 DuA - Kapitel 20
Dynamische Programmierung
127
Beispiel 1 Matrixketten-Multiplikation
Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist
Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen
Beobachtung bull Sei Aij = AisdothellipsdotAj
bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)
127SS 2017 DuA - Kapitel 20
Dynamische Programmierung
128
bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen
Initialfall m[ii]=0 fuumlr alle iisin1hellipn
Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj
Optimaler Wert m[1n]
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1
128SS 2017 DuA - Kapitel 20
Dynamische Programmierung
129
Beispiel 2 Optimaler binaumlrer Suchbaum
Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1
Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T
(Tiefe der Wurzel ist 0) )
129SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
130
bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj
Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion
m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert
m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus
130SS 2017 DuA - Kapitel 20
Dynamische Programmierung
j
131
Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph
Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw
Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G
131SS 2017 DuA - Kapitel 20
Dynamische Programmierung
132
bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G
bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE
Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion
L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj
Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus
132SS 2017 DuA - Kapitel 20
Dynamische Programmierung
Falls die Menge leer ist ist maxhellip=0
133
Beispiel 4 Fahrstuhloptimierung
Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ
Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet
133SS 2017 DuA - Kapitel 20
Dynamische Programmierung
134
bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist
bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)
Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn
Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1
Optimaler Wert mink+1leilef m[ik]
134SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
135
Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen
Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium
Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung
135SS 2017 DuA - Kapitel 20
Dynamische Programmierung
- Foliennummer 1
- Foliennummer 2
- Foliennummer 3
- Foliennummer 4
- Foliennummer 5
- Foliennummer 6
- Foliennummer 7
- Foliennummer 8
- Foliennummer 9
- Foliennummer 10
- Foliennummer 11
- Foliennummer 12
- Foliennummer 13
- Foliennummer 14
- Foliennummer 15
- Foliennummer 16
- Foliennummer 17
- Foliennummer 18
- Foliennummer 19
- Foliennummer 20
- Foliennummer 21
- Foliennummer 22
- Foliennummer 23
- Foliennummer 24
- Foliennummer 25
- Foliennummer 26
- Foliennummer 27
- Foliennummer 28
- Foliennummer 29
- Foliennummer 30
- Foliennummer 31
- Foliennummer 32
- Foliennummer 33
- Foliennummer 34
- Foliennummer 35
- Foliennummer 36
- Foliennummer 37
- Foliennummer 38
- Foliennummer 39
- Foliennummer 40
- Foliennummer 41
- Foliennummer 42
- Foliennummer 43
- Foliennummer 44
- Foliennummer 45
- Foliennummer 46
- Foliennummer 47
- Foliennummer 48
- Foliennummer 49
- Foliennummer 50
- Foliennummer 51
- Foliennummer 52
- Foliennummer 53
- Foliennummer 54
- Foliennummer 55
- Foliennummer 56
- Foliennummer 57
- Foliennummer 58
- Foliennummer 59
- Foliennummer 60
- Foliennummer 61
- Foliennummer 62
- Foliennummer 63
- Foliennummer 64
- Foliennummer 65
- Foliennummer 66
- Foliennummer 67
- Foliennummer 68
- Foliennummer 69
- Foliennummer 70
- Foliennummer 71
- Foliennummer 72
- Foliennummer 73
- Foliennummer 74
- Foliennummer 75
- Foliennummer 76
- Foliennummer 77
- Foliennummer 78
- Foliennummer 79
- Foliennummer 80
- Fraktionales Rucksack-Problem
- Gierige Loumlsung des fraktionalen Rucksack-Problems
- Gieriges Einpacken ist optimal
- Foliennummer 84
- Foliennummer 85
- Foliennummer 86
- Foliennummer 87
- Foliennummer 88
- Foliennummer 89
- Foliennummer 90
- Foliennummer 91
- Foliennummer 92
- Foliennummer 93
- Foliennummer 94
- Foliennummer 95
- Foliennummer 96
- Foliennummer 97
- Foliennummer 98
- Foliennummer 99
- Foliennummer 100
- Foliennummer 101
- Foliennummer 102
- Foliennummer 103
- Foliennummer 104
- Foliennummer 105
- Foliennummer 106
- Foliennummer 107
- Foliennummer 108
- Foliennummer 109
- Foliennummer 110
- Foliennummer 111
- Foliennummer 112
- Foliennummer 113
- Foliennummer 114
- Foliennummer 115
- Foliennummer 116
- Foliennummer 117
- Foliennummer 118
- Foliennummer 119
- Foliennummer 120
- Foliennummer 121
- Foliennummer 122
- Foliennummer 123
- Foliennummer 124
- Foliennummer 125
- Foliennummer 126
- Foliennummer 127
- Foliennummer 128
- Foliennummer 129
- Foliennummer 130
- Foliennummer 131
- Foliennummer 132
- Foliennummer 133
- Foliennummer 134
- Foliennummer 135
-
![Page 104: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/104.jpg)
104
Beispiel
0000000 0 0 4 4 4 4 40 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
104SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
105
Beispiel
0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
105SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
106
Beispiel
000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
106SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
107
Beispiel
000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
107SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
108
Beispiel
000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
108SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
109
Beispiel
000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
109SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
110
Beispiel
00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
110SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
111
Beispiel
0000 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
111SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
112
Beispiel
000 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
112SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
113
Beispiel
00 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
113SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
114
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
114SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
115
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
Optimaler Loumlsungswert fuumlr W=8
115SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
116
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
116SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
Optimaler Loumlsungswert fuumlr W=8
117
Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert
einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks
117SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz
von u nach v sowie einen kuumlrzesten Weg
21
-15
8
4
-4
5
6
7
a
a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0
b c
f
ed
SS 2017 DuA - Kapitel 20 118
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
SS 2017 DuA - Kapitel 20 119
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Knoten k tritt maximal einmal auf
SS 2017 DuA - Kapitel 20 120
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 121
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 122
Dynamische Programmierung - APSP
123
bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt
von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1
ij
kFall (b)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
124
Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten
aus 1hellipk
bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung
d = w falls k=0min ( d d + d ) falls kge1
ij(k)
(k)(k-1) (k-1) (k-1)ij ijij ik kj
(n)ij(n)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
125
Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D
(0)
(k)ij
(n)
(k-1)ij
(k-1)ik
(k-1)kj
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
126
Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung
ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )
2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann
126SS 2017 DuA - Kapitel 20
Dynamische Programmierung
127
Beispiel 1 Matrixketten-Multiplikation
Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist
Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen
Beobachtung bull Sei Aij = AisdothellipsdotAj
bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)
127SS 2017 DuA - Kapitel 20
Dynamische Programmierung
128
bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen
Initialfall m[ii]=0 fuumlr alle iisin1hellipn
Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj
Optimaler Wert m[1n]
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1
128SS 2017 DuA - Kapitel 20
Dynamische Programmierung
129
Beispiel 2 Optimaler binaumlrer Suchbaum
Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1
Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T
(Tiefe der Wurzel ist 0) )
129SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
130
bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj
Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion
m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert
m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus
130SS 2017 DuA - Kapitel 20
Dynamische Programmierung
j
131
Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph
Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw
Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G
131SS 2017 DuA - Kapitel 20
Dynamische Programmierung
132
bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G
bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE
Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion
L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj
Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus
132SS 2017 DuA - Kapitel 20
Dynamische Programmierung
Falls die Menge leer ist ist maxhellip=0
133
Beispiel 4 Fahrstuhloptimierung
Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ
Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet
133SS 2017 DuA - Kapitel 20
Dynamische Programmierung
134
bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist
bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)
Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn
Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1
Optimaler Wert mink+1leilef m[ik]
134SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
135
Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen
Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium
Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung
135SS 2017 DuA - Kapitel 20
Dynamische Programmierung
- Foliennummer 1
- Foliennummer 2
- Foliennummer 3
- Foliennummer 4
- Foliennummer 5
- Foliennummer 6
- Foliennummer 7
- Foliennummer 8
- Foliennummer 9
- Foliennummer 10
- Foliennummer 11
- Foliennummer 12
- Foliennummer 13
- Foliennummer 14
- Foliennummer 15
- Foliennummer 16
- Foliennummer 17
- Foliennummer 18
- Foliennummer 19
- Foliennummer 20
- Foliennummer 21
- Foliennummer 22
- Foliennummer 23
- Foliennummer 24
- Foliennummer 25
- Foliennummer 26
- Foliennummer 27
- Foliennummer 28
- Foliennummer 29
- Foliennummer 30
- Foliennummer 31
- Foliennummer 32
- Foliennummer 33
- Foliennummer 34
- Foliennummer 35
- Foliennummer 36
- Foliennummer 37
- Foliennummer 38
- Foliennummer 39
- Foliennummer 40
- Foliennummer 41
- Foliennummer 42
- Foliennummer 43
- Foliennummer 44
- Foliennummer 45
- Foliennummer 46
- Foliennummer 47
- Foliennummer 48
- Foliennummer 49
- Foliennummer 50
- Foliennummer 51
- Foliennummer 52
- Foliennummer 53
- Foliennummer 54
- Foliennummer 55
- Foliennummer 56
- Foliennummer 57
- Foliennummer 58
- Foliennummer 59
- Foliennummer 60
- Foliennummer 61
- Foliennummer 62
- Foliennummer 63
- Foliennummer 64
- Foliennummer 65
- Foliennummer 66
- Foliennummer 67
- Foliennummer 68
- Foliennummer 69
- Foliennummer 70
- Foliennummer 71
- Foliennummer 72
- Foliennummer 73
- Foliennummer 74
- Foliennummer 75
- Foliennummer 76
- Foliennummer 77
- Foliennummer 78
- Foliennummer 79
- Foliennummer 80
- Fraktionales Rucksack-Problem
- Gierige Loumlsung des fraktionalen Rucksack-Problems
- Gieriges Einpacken ist optimal
- Foliennummer 84
- Foliennummer 85
- Foliennummer 86
- Foliennummer 87
- Foliennummer 88
- Foliennummer 89
- Foliennummer 90
- Foliennummer 91
- Foliennummer 92
- Foliennummer 93
- Foliennummer 94
- Foliennummer 95
- Foliennummer 96
- Foliennummer 97
- Foliennummer 98
- Foliennummer 99
- Foliennummer 100
- Foliennummer 101
- Foliennummer 102
- Foliennummer 103
- Foliennummer 104
- Foliennummer 105
- Foliennummer 106
- Foliennummer 107
- Foliennummer 108
- Foliennummer 109
- Foliennummer 110
- Foliennummer 111
- Foliennummer 112
- Foliennummer 113
- Foliennummer 114
- Foliennummer 115
- Foliennummer 116
- Foliennummer 117
- Foliennummer 118
- Foliennummer 119
- Foliennummer 120
- Foliennummer 121
- Foliennummer 122
- Foliennummer 123
- Foliennummer 124
- Foliennummer 125
- Foliennummer 126
- Foliennummer 127
- Foliennummer 128
- Foliennummer 129
- Foliennummer 130
- Foliennummer 131
- Foliennummer 132
- Foliennummer 133
- Foliennummer 134
- Foliennummer 135
-
![Page 105: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/105.jpg)
105
Beispiel
0000000 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
105SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
106
Beispiel
000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
106SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
107
Beispiel
000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
107SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
108
Beispiel
000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
108SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
109
Beispiel
000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
109SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
110
Beispiel
00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
110SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
111
Beispiel
0000 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
111SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
112
Beispiel
000 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
112SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
113
Beispiel
00 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
113SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
114
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
114SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
115
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
Optimaler Loumlsungswert fuumlr W=8
115SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
116
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
116SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
Optimaler Loumlsungswert fuumlr W=8
117
Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert
einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks
117SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz
von u nach v sowie einen kuumlrzesten Weg
21
-15
8
4
-4
5
6
7
a
a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0
b c
f
ed
SS 2017 DuA - Kapitel 20 118
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
SS 2017 DuA - Kapitel 20 119
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Knoten k tritt maximal einmal auf
SS 2017 DuA - Kapitel 20 120
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 121
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 122
Dynamische Programmierung - APSP
123
bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt
von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1
ij
kFall (b)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
124
Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten
aus 1hellipk
bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung
d = w falls k=0min ( d d + d ) falls kge1
ij(k)
(k)(k-1) (k-1) (k-1)ij ijij ik kj
(n)ij(n)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
125
Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D
(0)
(k)ij
(n)
(k-1)ij
(k-1)ik
(k-1)kj
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
126
Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung
ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )
2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann
126SS 2017 DuA - Kapitel 20
Dynamische Programmierung
127
Beispiel 1 Matrixketten-Multiplikation
Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist
Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen
Beobachtung bull Sei Aij = AisdothellipsdotAj
bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)
127SS 2017 DuA - Kapitel 20
Dynamische Programmierung
128
bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen
Initialfall m[ii]=0 fuumlr alle iisin1hellipn
Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj
Optimaler Wert m[1n]
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1
128SS 2017 DuA - Kapitel 20
Dynamische Programmierung
129
Beispiel 2 Optimaler binaumlrer Suchbaum
Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1
Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T
(Tiefe der Wurzel ist 0) )
129SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
130
bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj
Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion
m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert
m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus
130SS 2017 DuA - Kapitel 20
Dynamische Programmierung
j
131
Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph
Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw
Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G
131SS 2017 DuA - Kapitel 20
Dynamische Programmierung
132
bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G
bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE
Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion
L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj
Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus
132SS 2017 DuA - Kapitel 20
Dynamische Programmierung
Falls die Menge leer ist ist maxhellip=0
133
Beispiel 4 Fahrstuhloptimierung
Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ
Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet
133SS 2017 DuA - Kapitel 20
Dynamische Programmierung
134
bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist
bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)
Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn
Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1
Optimaler Wert mink+1leilef m[ik]
134SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
135
Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen
Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium
Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung
135SS 2017 DuA - Kapitel 20
Dynamische Programmierung
- Foliennummer 1
- Foliennummer 2
- Foliennummer 3
- Foliennummer 4
- Foliennummer 5
- Foliennummer 6
- Foliennummer 7
- Foliennummer 8
- Foliennummer 9
- Foliennummer 10
- Foliennummer 11
- Foliennummer 12
- Foliennummer 13
- Foliennummer 14
- Foliennummer 15
- Foliennummer 16
- Foliennummer 17
- Foliennummer 18
- Foliennummer 19
- Foliennummer 20
- Foliennummer 21
- Foliennummer 22
- Foliennummer 23
- Foliennummer 24
- Foliennummer 25
- Foliennummer 26
- Foliennummer 27
- Foliennummer 28
- Foliennummer 29
- Foliennummer 30
- Foliennummer 31
- Foliennummer 32
- Foliennummer 33
- Foliennummer 34
- Foliennummer 35
- Foliennummer 36
- Foliennummer 37
- Foliennummer 38
- Foliennummer 39
- Foliennummer 40
- Foliennummer 41
- Foliennummer 42
- Foliennummer 43
- Foliennummer 44
- Foliennummer 45
- Foliennummer 46
- Foliennummer 47
- Foliennummer 48
- Foliennummer 49
- Foliennummer 50
- Foliennummer 51
- Foliennummer 52
- Foliennummer 53
- Foliennummer 54
- Foliennummer 55
- Foliennummer 56
- Foliennummer 57
- Foliennummer 58
- Foliennummer 59
- Foliennummer 60
- Foliennummer 61
- Foliennummer 62
- Foliennummer 63
- Foliennummer 64
- Foliennummer 65
- Foliennummer 66
- Foliennummer 67
- Foliennummer 68
- Foliennummer 69
- Foliennummer 70
- Foliennummer 71
- Foliennummer 72
- Foliennummer 73
- Foliennummer 74
- Foliennummer 75
- Foliennummer 76
- Foliennummer 77
- Foliennummer 78
- Foliennummer 79
- Foliennummer 80
- Fraktionales Rucksack-Problem
- Gierige Loumlsung des fraktionalen Rucksack-Problems
- Gieriges Einpacken ist optimal
- Foliennummer 84
- Foliennummer 85
- Foliennummer 86
- Foliennummer 87
- Foliennummer 88
- Foliennummer 89
- Foliennummer 90
- Foliennummer 91
- Foliennummer 92
- Foliennummer 93
- Foliennummer 94
- Foliennummer 95
- Foliennummer 96
- Foliennummer 97
- Foliennummer 98
- Foliennummer 99
- Foliennummer 100
- Foliennummer 101
- Foliennummer 102
- Foliennummer 103
- Foliennummer 104
- Foliennummer 105
- Foliennummer 106
- Foliennummer 107
- Foliennummer 108
- Foliennummer 109
- Foliennummer 110
- Foliennummer 111
- Foliennummer 112
- Foliennummer 113
- Foliennummer 114
- Foliennummer 115
- Foliennummer 116
- Foliennummer 117
- Foliennummer 118
- Foliennummer 119
- Foliennummer 120
- Foliennummer 121
- Foliennummer 122
- Foliennummer 123
- Foliennummer 124
- Foliennummer 125
- Foliennummer 126
- Foliennummer 127
- Foliennummer 128
- Foliennummer 129
- Foliennummer 130
- Foliennummer 131
- Foliennummer 132
- Foliennummer 133
- Foliennummer 134
- Foliennummer 135
-
![Page 106: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/106.jpg)
106
Beispiel
000000 1 10 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
106SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
107
Beispiel
000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
107SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
108
Beispiel
000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
108SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
109
Beispiel
000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
109SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
110
Beispiel
00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
110SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
111
Beispiel
0000 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
111SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
112
Beispiel
000 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
112SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
113
Beispiel
00 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
113SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
114
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
114SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
115
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
Optimaler Loumlsungswert fuumlr W=8
115SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
116
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
116SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
Optimaler Loumlsungswert fuumlr W=8
117
Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert
einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks
117SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz
von u nach v sowie einen kuumlrzesten Weg
21
-15
8
4
-4
5
6
7
a
a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0
b c
f
ed
SS 2017 DuA - Kapitel 20 118
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
SS 2017 DuA - Kapitel 20 119
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Knoten k tritt maximal einmal auf
SS 2017 DuA - Kapitel 20 120
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 121
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 122
Dynamische Programmierung - APSP
123
bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt
von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1
ij
kFall (b)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
124
Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten
aus 1hellipk
bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung
d = w falls k=0min ( d d + d ) falls kge1
ij(k)
(k)(k-1) (k-1) (k-1)ij ijij ik kj
(n)ij(n)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
125
Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D
(0)
(k)ij
(n)
(k-1)ij
(k-1)ik
(k-1)kj
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
126
Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung
ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )
2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann
126SS 2017 DuA - Kapitel 20
Dynamische Programmierung
127
Beispiel 1 Matrixketten-Multiplikation
Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist
Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen
Beobachtung bull Sei Aij = AisdothellipsdotAj
bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)
127SS 2017 DuA - Kapitel 20
Dynamische Programmierung
128
bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen
Initialfall m[ii]=0 fuumlr alle iisin1hellipn
Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj
Optimaler Wert m[1n]
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1
128SS 2017 DuA - Kapitel 20
Dynamische Programmierung
129
Beispiel 2 Optimaler binaumlrer Suchbaum
Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1
Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T
(Tiefe der Wurzel ist 0) )
129SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
130
bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj
Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion
m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert
m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus
130SS 2017 DuA - Kapitel 20
Dynamische Programmierung
j
131
Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph
Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw
Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G
131SS 2017 DuA - Kapitel 20
Dynamische Programmierung
132
bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G
bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE
Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion
L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj
Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus
132SS 2017 DuA - Kapitel 20
Dynamische Programmierung
Falls die Menge leer ist ist maxhellip=0
133
Beispiel 4 Fahrstuhloptimierung
Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ
Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet
133SS 2017 DuA - Kapitel 20
Dynamische Programmierung
134
bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist
bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)
Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn
Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1
Optimaler Wert mink+1leilef m[ik]
134SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
135
Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen
Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium
Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung
135SS 2017 DuA - Kapitel 20
Dynamische Programmierung
- Foliennummer 1
- Foliennummer 2
- Foliennummer 3
- Foliennummer 4
- Foliennummer 5
- Foliennummer 6
- Foliennummer 7
- Foliennummer 8
- Foliennummer 9
- Foliennummer 10
- Foliennummer 11
- Foliennummer 12
- Foliennummer 13
- Foliennummer 14
- Foliennummer 15
- Foliennummer 16
- Foliennummer 17
- Foliennummer 18
- Foliennummer 19
- Foliennummer 20
- Foliennummer 21
- Foliennummer 22
- Foliennummer 23
- Foliennummer 24
- Foliennummer 25
- Foliennummer 26
- Foliennummer 27
- Foliennummer 28
- Foliennummer 29
- Foliennummer 30
- Foliennummer 31
- Foliennummer 32
- Foliennummer 33
- Foliennummer 34
- Foliennummer 35
- Foliennummer 36
- Foliennummer 37
- Foliennummer 38
- Foliennummer 39
- Foliennummer 40
- Foliennummer 41
- Foliennummer 42
- Foliennummer 43
- Foliennummer 44
- Foliennummer 45
- Foliennummer 46
- Foliennummer 47
- Foliennummer 48
- Foliennummer 49
- Foliennummer 50
- Foliennummer 51
- Foliennummer 52
- Foliennummer 53
- Foliennummer 54
- Foliennummer 55
- Foliennummer 56
- Foliennummer 57
- Foliennummer 58
- Foliennummer 59
- Foliennummer 60
- Foliennummer 61
- Foliennummer 62
- Foliennummer 63
- Foliennummer 64
- Foliennummer 65
- Foliennummer 66
- Foliennummer 67
- Foliennummer 68
- Foliennummer 69
- Foliennummer 70
- Foliennummer 71
- Foliennummer 72
- Foliennummer 73
- Foliennummer 74
- Foliennummer 75
- Foliennummer 76
- Foliennummer 77
- Foliennummer 78
- Foliennummer 79
- Foliennummer 80
- Fraktionales Rucksack-Problem
- Gierige Loumlsung des fraktionalen Rucksack-Problems
- Gieriges Einpacken ist optimal
- Foliennummer 84
- Foliennummer 85
- Foliennummer 86
- Foliennummer 87
- Foliennummer 88
- Foliennummer 89
- Foliennummer 90
- Foliennummer 91
- Foliennummer 92
- Foliennummer 93
- Foliennummer 94
- Foliennummer 95
- Foliennummer 96
- Foliennummer 97
- Foliennummer 98
- Foliennummer 99
- Foliennummer 100
- Foliennummer 101
- Foliennummer 102
- Foliennummer 103
- Foliennummer 104
- Foliennummer 105
- Foliennummer 106
- Foliennummer 107
- Foliennummer 108
- Foliennummer 109
- Foliennummer 110
- Foliennummer 111
- Foliennummer 112
- Foliennummer 113
- Foliennummer 114
- Foliennummer 115
- Foliennummer 116
- Foliennummer 117
- Foliennummer 118
- Foliennummer 119
- Foliennummer 120
- Foliennummer 121
- Foliennummer 122
- Foliennummer 123
- Foliennummer 124
- Foliennummer 125
- Foliennummer 126
- Foliennummer 127
- Foliennummer 128
- Foliennummer 129
- Foliennummer 130
- Foliennummer 131
- Foliennummer 132
- Foliennummer 133
- Foliennummer 134
- Foliennummer 135
-
![Page 107: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/107.jpg)
107
Beispiel
000000 1 1 40 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
107SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
108
Beispiel
000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
108SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
109
Beispiel
000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
109SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
110
Beispiel
00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
110SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
111
Beispiel
0000 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
111SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
112
Beispiel
000 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
112SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
113
Beispiel
00 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
113SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
114
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
114SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
115
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
Optimaler Loumlsungswert fuumlr W=8
115SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
116
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
116SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
Optimaler Loumlsungswert fuumlr W=8
117
Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert
einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks
117SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz
von u nach v sowie einen kuumlrzesten Weg
21
-15
8
4
-4
5
6
7
a
a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0
b c
f
ed
SS 2017 DuA - Kapitel 20 118
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
SS 2017 DuA - Kapitel 20 119
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Knoten k tritt maximal einmal auf
SS 2017 DuA - Kapitel 20 120
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 121
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 122
Dynamische Programmierung - APSP
123
bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt
von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1
ij
kFall (b)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
124
Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten
aus 1hellipk
bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung
d = w falls k=0min ( d d + d ) falls kge1
ij(k)
(k)(k-1) (k-1) (k-1)ij ijij ik kj
(n)ij(n)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
125
Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D
(0)
(k)ij
(n)
(k-1)ij
(k-1)ik
(k-1)kj
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
126
Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung
ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )
2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann
126SS 2017 DuA - Kapitel 20
Dynamische Programmierung
127
Beispiel 1 Matrixketten-Multiplikation
Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist
Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen
Beobachtung bull Sei Aij = AisdothellipsdotAj
bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)
127SS 2017 DuA - Kapitel 20
Dynamische Programmierung
128
bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen
Initialfall m[ii]=0 fuumlr alle iisin1hellipn
Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj
Optimaler Wert m[1n]
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1
128SS 2017 DuA - Kapitel 20
Dynamische Programmierung
129
Beispiel 2 Optimaler binaumlrer Suchbaum
Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1
Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T
(Tiefe der Wurzel ist 0) )
129SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
130
bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj
Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion
m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert
m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus
130SS 2017 DuA - Kapitel 20
Dynamische Programmierung
j
131
Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph
Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw
Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G
131SS 2017 DuA - Kapitel 20
Dynamische Programmierung
132
bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G
bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE
Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion
L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj
Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus
132SS 2017 DuA - Kapitel 20
Dynamische Programmierung
Falls die Menge leer ist ist maxhellip=0
133
Beispiel 4 Fahrstuhloptimierung
Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ
Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet
133SS 2017 DuA - Kapitel 20
Dynamische Programmierung
134
bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist
bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)
Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn
Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1
Optimaler Wert mink+1leilef m[ik]
134SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
135
Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen
Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium
Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung
135SS 2017 DuA - Kapitel 20
Dynamische Programmierung
- Foliennummer 1
- Foliennummer 2
- Foliennummer 3
- Foliennummer 4
- Foliennummer 5
- Foliennummer 6
- Foliennummer 7
- Foliennummer 8
- Foliennummer 9
- Foliennummer 10
- Foliennummer 11
- Foliennummer 12
- Foliennummer 13
- Foliennummer 14
- Foliennummer 15
- Foliennummer 16
- Foliennummer 17
- Foliennummer 18
- Foliennummer 19
- Foliennummer 20
- Foliennummer 21
- Foliennummer 22
- Foliennummer 23
- Foliennummer 24
- Foliennummer 25
- Foliennummer 26
- Foliennummer 27
- Foliennummer 28
- Foliennummer 29
- Foliennummer 30
- Foliennummer 31
- Foliennummer 32
- Foliennummer 33
- Foliennummer 34
- Foliennummer 35
- Foliennummer 36
- Foliennummer 37
- Foliennummer 38
- Foliennummer 39
- Foliennummer 40
- Foliennummer 41
- Foliennummer 42
- Foliennummer 43
- Foliennummer 44
- Foliennummer 45
- Foliennummer 46
- Foliennummer 47
- Foliennummer 48
- Foliennummer 49
- Foliennummer 50
- Foliennummer 51
- Foliennummer 52
- Foliennummer 53
- Foliennummer 54
- Foliennummer 55
- Foliennummer 56
- Foliennummer 57
- Foliennummer 58
- Foliennummer 59
- Foliennummer 60
- Foliennummer 61
- Foliennummer 62
- Foliennummer 63
- Foliennummer 64
- Foliennummer 65
- Foliennummer 66
- Foliennummer 67
- Foliennummer 68
- Foliennummer 69
- Foliennummer 70
- Foliennummer 71
- Foliennummer 72
- Foliennummer 73
- Foliennummer 74
- Foliennummer 75
- Foliennummer 76
- Foliennummer 77
- Foliennummer 78
- Foliennummer 79
- Foliennummer 80
- Fraktionales Rucksack-Problem
- Gierige Loumlsung des fraktionalen Rucksack-Problems
- Gieriges Einpacken ist optimal
- Foliennummer 84
- Foliennummer 85
- Foliennummer 86
- Foliennummer 87
- Foliennummer 88
- Foliennummer 89
- Foliennummer 90
- Foliennummer 91
- Foliennummer 92
- Foliennummer 93
- Foliennummer 94
- Foliennummer 95
- Foliennummer 96
- Foliennummer 97
- Foliennummer 98
- Foliennummer 99
- Foliennummer 100
- Foliennummer 101
- Foliennummer 102
- Foliennummer 103
- Foliennummer 104
- Foliennummer 105
- Foliennummer 106
- Foliennummer 107
- Foliennummer 108
- Foliennummer 109
- Foliennummer 110
- Foliennummer 111
- Foliennummer 112
- Foliennummer 113
- Foliennummer 114
- Foliennummer 115
- Foliennummer 116
- Foliennummer 117
- Foliennummer 118
- Foliennummer 119
- Foliennummer 120
- Foliennummer 121
- Foliennummer 122
- Foliennummer 123
- Foliennummer 124
- Foliennummer 125
- Foliennummer 126
- Foliennummer 127
- Foliennummer 128
- Foliennummer 129
- Foliennummer 130
- Foliennummer 131
- Foliennummer 132
- Foliennummer 133
- Foliennummer 134
- Foliennummer 135
-
![Page 108: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/108.jpg)
108
Beispiel
000000 1 1 4 5 5 5 50 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
108SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
109
Beispiel
000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
109SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
110
Beispiel
00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
110SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
111
Beispiel
0000 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
111SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
112
Beispiel
000 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
112SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
113
Beispiel
00 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
113SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
114
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
114SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
115
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
Optimaler Loumlsungswert fuumlr W=8
115SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
116
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
116SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
Optimaler Loumlsungswert fuumlr W=8
117
Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert
einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks
117SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz
von u nach v sowie einen kuumlrzesten Weg
21
-15
8
4
-4
5
6
7
a
a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0
b c
f
ed
SS 2017 DuA - Kapitel 20 118
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
SS 2017 DuA - Kapitel 20 119
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Knoten k tritt maximal einmal auf
SS 2017 DuA - Kapitel 20 120
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 121
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 122
Dynamische Programmierung - APSP
123
bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt
von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1
ij
kFall (b)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
124
Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten
aus 1hellipk
bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung
d = w falls k=0min ( d d + d ) falls kge1
ij(k)
(k)(k-1) (k-1) (k-1)ij ijij ik kj
(n)ij(n)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
125
Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D
(0)
(k)ij
(n)
(k-1)ij
(k-1)ik
(k-1)kj
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
126
Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung
ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )
2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann
126SS 2017 DuA - Kapitel 20
Dynamische Programmierung
127
Beispiel 1 Matrixketten-Multiplikation
Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist
Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen
Beobachtung bull Sei Aij = AisdothellipsdotAj
bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)
127SS 2017 DuA - Kapitel 20
Dynamische Programmierung
128
bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen
Initialfall m[ii]=0 fuumlr alle iisin1hellipn
Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj
Optimaler Wert m[1n]
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1
128SS 2017 DuA - Kapitel 20
Dynamische Programmierung
129
Beispiel 2 Optimaler binaumlrer Suchbaum
Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1
Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T
(Tiefe der Wurzel ist 0) )
129SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
130
bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj
Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion
m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert
m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus
130SS 2017 DuA - Kapitel 20
Dynamische Programmierung
j
131
Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph
Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw
Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G
131SS 2017 DuA - Kapitel 20
Dynamische Programmierung
132
bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G
bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE
Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion
L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj
Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus
132SS 2017 DuA - Kapitel 20
Dynamische Programmierung
Falls die Menge leer ist ist maxhellip=0
133
Beispiel 4 Fahrstuhloptimierung
Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ
Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet
133SS 2017 DuA - Kapitel 20
Dynamische Programmierung
134
bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist
bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)
Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn
Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1
Optimaler Wert mink+1leilef m[ik]
134SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
135
Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen
Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium
Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung
135SS 2017 DuA - Kapitel 20
Dynamische Programmierung
- Foliennummer 1
- Foliennummer 2
- Foliennummer 3
- Foliennummer 4
- Foliennummer 5
- Foliennummer 6
- Foliennummer 7
- Foliennummer 8
- Foliennummer 9
- Foliennummer 10
- Foliennummer 11
- Foliennummer 12
- Foliennummer 13
- Foliennummer 14
- Foliennummer 15
- Foliennummer 16
- Foliennummer 17
- Foliennummer 18
- Foliennummer 19
- Foliennummer 20
- Foliennummer 21
- Foliennummer 22
- Foliennummer 23
- Foliennummer 24
- Foliennummer 25
- Foliennummer 26
- Foliennummer 27
- Foliennummer 28
- Foliennummer 29
- Foliennummer 30
- Foliennummer 31
- Foliennummer 32
- Foliennummer 33
- Foliennummer 34
- Foliennummer 35
- Foliennummer 36
- Foliennummer 37
- Foliennummer 38
- Foliennummer 39
- Foliennummer 40
- Foliennummer 41
- Foliennummer 42
- Foliennummer 43
- Foliennummer 44
- Foliennummer 45
- Foliennummer 46
- Foliennummer 47
- Foliennummer 48
- Foliennummer 49
- Foliennummer 50
- Foliennummer 51
- Foliennummer 52
- Foliennummer 53
- Foliennummer 54
- Foliennummer 55
- Foliennummer 56
- Foliennummer 57
- Foliennummer 58
- Foliennummer 59
- Foliennummer 60
- Foliennummer 61
- Foliennummer 62
- Foliennummer 63
- Foliennummer 64
- Foliennummer 65
- Foliennummer 66
- Foliennummer 67
- Foliennummer 68
- Foliennummer 69
- Foliennummer 70
- Foliennummer 71
- Foliennummer 72
- Foliennummer 73
- Foliennummer 74
- Foliennummer 75
- Foliennummer 76
- Foliennummer 77
- Foliennummer 78
- Foliennummer 79
- Foliennummer 80
- Fraktionales Rucksack-Problem
- Gierige Loumlsung des fraktionalen Rucksack-Problems
- Gieriges Einpacken ist optimal
- Foliennummer 84
- Foliennummer 85
- Foliennummer 86
- Foliennummer 87
- Foliennummer 88
- Foliennummer 89
- Foliennummer 90
- Foliennummer 91
- Foliennummer 92
- Foliennummer 93
- Foliennummer 94
- Foliennummer 95
- Foliennummer 96
- Foliennummer 97
- Foliennummer 98
- Foliennummer 99
- Foliennummer 100
- Foliennummer 101
- Foliennummer 102
- Foliennummer 103
- Foliennummer 104
- Foliennummer 105
- Foliennummer 106
- Foliennummer 107
- Foliennummer 108
- Foliennummer 109
- Foliennummer 110
- Foliennummer 111
- Foliennummer 112
- Foliennummer 113
- Foliennummer 114
- Foliennummer 115
- Foliennummer 116
- Foliennummer 117
- Foliennummer 118
- Foliennummer 119
- Foliennummer 120
- Foliennummer 121
- Foliennummer 122
- Foliennummer 123
- Foliennummer 124
- Foliennummer 125
- Foliennummer 126
- Foliennummer 127
- Foliennummer 128
- Foliennummer 129
- Foliennummer 130
- Foliennummer 131
- Foliennummer 132
- Foliennummer 133
- Foliennummer 134
- Foliennummer 135
-
![Page 109: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/109.jpg)
109
Beispiel
000000 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
109SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
110
Beispiel
00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
110SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
111
Beispiel
0000 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
111SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
112
Beispiel
000 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
112SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
113
Beispiel
00 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
113SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
114
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
114SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
115
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
Optimaler Loumlsungswert fuumlr W=8
115SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
116
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
116SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
Optimaler Loumlsungswert fuumlr W=8
117
Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert
einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks
117SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz
von u nach v sowie einen kuumlrzesten Weg
21
-15
8
4
-4
5
6
7
a
a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0
b c
f
ed
SS 2017 DuA - Kapitel 20 118
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
SS 2017 DuA - Kapitel 20 119
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Knoten k tritt maximal einmal auf
SS 2017 DuA - Kapitel 20 120
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 121
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 122
Dynamische Programmierung - APSP
123
bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt
von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1
ij
kFall (b)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
124
Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten
aus 1hellipk
bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung
d = w falls k=0min ( d d + d ) falls kge1
ij(k)
(k)(k-1) (k-1) (k-1)ij ijij ik kj
(n)ij(n)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
125
Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D
(0)
(k)ij
(n)
(k-1)ij
(k-1)ik
(k-1)kj
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
126
Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung
ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )
2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann
126SS 2017 DuA - Kapitel 20
Dynamische Programmierung
127
Beispiel 1 Matrixketten-Multiplikation
Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist
Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen
Beobachtung bull Sei Aij = AisdothellipsdotAj
bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)
127SS 2017 DuA - Kapitel 20
Dynamische Programmierung
128
bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen
Initialfall m[ii]=0 fuumlr alle iisin1hellipn
Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj
Optimaler Wert m[1n]
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1
128SS 2017 DuA - Kapitel 20
Dynamische Programmierung
129
Beispiel 2 Optimaler binaumlrer Suchbaum
Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1
Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T
(Tiefe der Wurzel ist 0) )
129SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
130
bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj
Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion
m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert
m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus
130SS 2017 DuA - Kapitel 20
Dynamische Programmierung
j
131
Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph
Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw
Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G
131SS 2017 DuA - Kapitel 20
Dynamische Programmierung
132
bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G
bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE
Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion
L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj
Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus
132SS 2017 DuA - Kapitel 20
Dynamische Programmierung
Falls die Menge leer ist ist maxhellip=0
133
Beispiel 4 Fahrstuhloptimierung
Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ
Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet
133SS 2017 DuA - Kapitel 20
Dynamische Programmierung
134
bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist
bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)
Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn
Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1
Optimaler Wert mink+1leilef m[ik]
134SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
135
Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen
Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium
Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung
135SS 2017 DuA - Kapitel 20
Dynamische Programmierung
- Foliennummer 1
- Foliennummer 2
- Foliennummer 3
- Foliennummer 4
- Foliennummer 5
- Foliennummer 6
- Foliennummer 7
- Foliennummer 8
- Foliennummer 9
- Foliennummer 10
- Foliennummer 11
- Foliennummer 12
- Foliennummer 13
- Foliennummer 14
- Foliennummer 15
- Foliennummer 16
- Foliennummer 17
- Foliennummer 18
- Foliennummer 19
- Foliennummer 20
- Foliennummer 21
- Foliennummer 22
- Foliennummer 23
- Foliennummer 24
- Foliennummer 25
- Foliennummer 26
- Foliennummer 27
- Foliennummer 28
- Foliennummer 29
- Foliennummer 30
- Foliennummer 31
- Foliennummer 32
- Foliennummer 33
- Foliennummer 34
- Foliennummer 35
- Foliennummer 36
- Foliennummer 37
- Foliennummer 38
- Foliennummer 39
- Foliennummer 40
- Foliennummer 41
- Foliennummer 42
- Foliennummer 43
- Foliennummer 44
- Foliennummer 45
- Foliennummer 46
- Foliennummer 47
- Foliennummer 48
- Foliennummer 49
- Foliennummer 50
- Foliennummer 51
- Foliennummer 52
- Foliennummer 53
- Foliennummer 54
- Foliennummer 55
- Foliennummer 56
- Foliennummer 57
- Foliennummer 58
- Foliennummer 59
- Foliennummer 60
- Foliennummer 61
- Foliennummer 62
- Foliennummer 63
- Foliennummer 64
- Foliennummer 65
- Foliennummer 66
- Foliennummer 67
- Foliennummer 68
- Foliennummer 69
- Foliennummer 70
- Foliennummer 71
- Foliennummer 72
- Foliennummer 73
- Foliennummer 74
- Foliennummer 75
- Foliennummer 76
- Foliennummer 77
- Foliennummer 78
- Foliennummer 79
- Foliennummer 80
- Fraktionales Rucksack-Problem
- Gierige Loumlsung des fraktionalen Rucksack-Problems
- Gieriges Einpacken ist optimal
- Foliennummer 84
- Foliennummer 85
- Foliennummer 86
- Foliennummer 87
- Foliennummer 88
- Foliennummer 89
- Foliennummer 90
- Foliennummer 91
- Foliennummer 92
- Foliennummer 93
- Foliennummer 94
- Foliennummer 95
- Foliennummer 96
- Foliennummer 97
- Foliennummer 98
- Foliennummer 99
- Foliennummer 100
- Foliennummer 101
- Foliennummer 102
- Foliennummer 103
- Foliennummer 104
- Foliennummer 105
- Foliennummer 106
- Foliennummer 107
- Foliennummer 108
- Foliennummer 109
- Foliennummer 110
- Foliennummer 111
- Foliennummer 112
- Foliennummer 113
- Foliennummer 114
- Foliennummer 115
- Foliennummer 116
- Foliennummer 117
- Foliennummer 118
- Foliennummer 119
- Foliennummer 120
- Foliennummer 121
- Foliennummer 122
- Foliennummer 123
- Foliennummer 124
- Foliennummer 125
- Foliennummer 126
- Foliennummer 127
- Foliennummer 128
- Foliennummer 129
- Foliennummer 130
- Foliennummer 131
- Foliennummer 132
- Foliennummer 133
- Foliennummer 134
- Foliennummer 135
-
![Page 110: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/110.jpg)
110
Beispiel
00000 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
110SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
111
Beispiel
0000 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
111SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
112
Beispiel
000 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
112SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
113
Beispiel
00 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
113SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
114
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
114SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
115
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
Optimaler Loumlsungswert fuumlr W=8
115SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
116
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
116SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
Optimaler Loumlsungswert fuumlr W=8
117
Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert
einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks
117SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz
von u nach v sowie einen kuumlrzesten Weg
21
-15
8
4
-4
5
6
7
a
a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0
b c
f
ed
SS 2017 DuA - Kapitel 20 118
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
SS 2017 DuA - Kapitel 20 119
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Knoten k tritt maximal einmal auf
SS 2017 DuA - Kapitel 20 120
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 121
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 122
Dynamische Programmierung - APSP
123
bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt
von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1
ij
kFall (b)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
124
Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten
aus 1hellipk
bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung
d = w falls k=0min ( d d + d ) falls kge1
ij(k)
(k)(k-1) (k-1) (k-1)ij ijij ik kj
(n)ij(n)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
125
Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D
(0)
(k)ij
(n)
(k-1)ij
(k-1)ik
(k-1)kj
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
126
Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung
ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )
2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann
126SS 2017 DuA - Kapitel 20
Dynamische Programmierung
127
Beispiel 1 Matrixketten-Multiplikation
Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist
Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen
Beobachtung bull Sei Aij = AisdothellipsdotAj
bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)
127SS 2017 DuA - Kapitel 20
Dynamische Programmierung
128
bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen
Initialfall m[ii]=0 fuumlr alle iisin1hellipn
Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj
Optimaler Wert m[1n]
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1
128SS 2017 DuA - Kapitel 20
Dynamische Programmierung
129
Beispiel 2 Optimaler binaumlrer Suchbaum
Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1
Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T
(Tiefe der Wurzel ist 0) )
129SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
130
bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj
Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion
m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert
m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus
130SS 2017 DuA - Kapitel 20
Dynamische Programmierung
j
131
Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph
Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw
Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G
131SS 2017 DuA - Kapitel 20
Dynamische Programmierung
132
bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G
bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE
Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion
L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj
Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus
132SS 2017 DuA - Kapitel 20
Dynamische Programmierung
Falls die Menge leer ist ist maxhellip=0
133
Beispiel 4 Fahrstuhloptimierung
Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ
Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet
133SS 2017 DuA - Kapitel 20
Dynamische Programmierung
134
bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist
bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)
Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn
Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1
Optimaler Wert mink+1leilef m[ik]
134SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
135
Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen
Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium
Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung
135SS 2017 DuA - Kapitel 20
Dynamische Programmierung
- Foliennummer 1
- Foliennummer 2
- Foliennummer 3
- Foliennummer 4
- Foliennummer 5
- Foliennummer 6
- Foliennummer 7
- Foliennummer 8
- Foliennummer 9
- Foliennummer 10
- Foliennummer 11
- Foliennummer 12
- Foliennummer 13
- Foliennummer 14
- Foliennummer 15
- Foliennummer 16
- Foliennummer 17
- Foliennummer 18
- Foliennummer 19
- Foliennummer 20
- Foliennummer 21
- Foliennummer 22
- Foliennummer 23
- Foliennummer 24
- Foliennummer 25
- Foliennummer 26
- Foliennummer 27
- Foliennummer 28
- Foliennummer 29
- Foliennummer 30
- Foliennummer 31
- Foliennummer 32
- Foliennummer 33
- Foliennummer 34
- Foliennummer 35
- Foliennummer 36
- Foliennummer 37
- Foliennummer 38
- Foliennummer 39
- Foliennummer 40
- Foliennummer 41
- Foliennummer 42
- Foliennummer 43
- Foliennummer 44
- Foliennummer 45
- Foliennummer 46
- Foliennummer 47
- Foliennummer 48
- Foliennummer 49
- Foliennummer 50
- Foliennummer 51
- Foliennummer 52
- Foliennummer 53
- Foliennummer 54
- Foliennummer 55
- Foliennummer 56
- Foliennummer 57
- Foliennummer 58
- Foliennummer 59
- Foliennummer 60
- Foliennummer 61
- Foliennummer 62
- Foliennummer 63
- Foliennummer 64
- Foliennummer 65
- Foliennummer 66
- Foliennummer 67
- Foliennummer 68
- Foliennummer 69
- Foliennummer 70
- Foliennummer 71
- Foliennummer 72
- Foliennummer 73
- Foliennummer 74
- Foliennummer 75
- Foliennummer 76
- Foliennummer 77
- Foliennummer 78
- Foliennummer 79
- Foliennummer 80
- Fraktionales Rucksack-Problem
- Gierige Loumlsung des fraktionalen Rucksack-Problems
- Gieriges Einpacken ist optimal
- Foliennummer 84
- Foliennummer 85
- Foliennummer 86
- Foliennummer 87
- Foliennummer 88
- Foliennummer 89
- Foliennummer 90
- Foliennummer 91
- Foliennummer 92
- Foliennummer 93
- Foliennummer 94
- Foliennummer 95
- Foliennummer 96
- Foliennummer 97
- Foliennummer 98
- Foliennummer 99
- Foliennummer 100
- Foliennummer 101
- Foliennummer 102
- Foliennummer 103
- Foliennummer 104
- Foliennummer 105
- Foliennummer 106
- Foliennummer 107
- Foliennummer 108
- Foliennummer 109
- Foliennummer 110
- Foliennummer 111
- Foliennummer 112
- Foliennummer 113
- Foliennummer 114
- Foliennummer 115
- Foliennummer 116
- Foliennummer 117
- Foliennummer 118
- Foliennummer 119
- Foliennummer 120
- Foliennummer 121
- Foliennummer 122
- Foliennummer 123
- Foliennummer 124
- Foliennummer 125
- Foliennummer 126
- Foliennummer 127
- Foliennummer 128
- Foliennummer 129
- Foliennummer 130
- Foliennummer 131
- Foliennummer 132
- Foliennummer 133
- Foliennummer 134
- Foliennummer 135
-
![Page 111: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/111.jpg)
111
Beispiel
0000 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
111SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
112
Beispiel
000 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
112SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
113
Beispiel
00 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
113SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
114
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
114SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
115
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
Optimaler Loumlsungswert fuumlr W=8
115SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
116
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
116SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
Optimaler Loumlsungswert fuumlr W=8
117
Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert
einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks
117SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz
von u nach v sowie einen kuumlrzesten Weg
21
-15
8
4
-4
5
6
7
a
a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0
b c
f
ed
SS 2017 DuA - Kapitel 20 118
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
SS 2017 DuA - Kapitel 20 119
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Knoten k tritt maximal einmal auf
SS 2017 DuA - Kapitel 20 120
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 121
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 122
Dynamische Programmierung - APSP
123
bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt
von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1
ij
kFall (b)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
124
Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten
aus 1hellipk
bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung
d = w falls k=0min ( d d + d ) falls kge1
ij(k)
(k)(k-1) (k-1) (k-1)ij ijij ik kj
(n)ij(n)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
125
Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D
(0)
(k)ij
(n)
(k-1)ij
(k-1)ik
(k-1)kj
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
126
Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung
ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )
2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann
126SS 2017 DuA - Kapitel 20
Dynamische Programmierung
127
Beispiel 1 Matrixketten-Multiplikation
Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist
Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen
Beobachtung bull Sei Aij = AisdothellipsdotAj
bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)
127SS 2017 DuA - Kapitel 20
Dynamische Programmierung
128
bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen
Initialfall m[ii]=0 fuumlr alle iisin1hellipn
Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj
Optimaler Wert m[1n]
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1
128SS 2017 DuA - Kapitel 20
Dynamische Programmierung
129
Beispiel 2 Optimaler binaumlrer Suchbaum
Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1
Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T
(Tiefe der Wurzel ist 0) )
129SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
130
bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj
Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion
m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert
m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus
130SS 2017 DuA - Kapitel 20
Dynamische Programmierung
j
131
Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph
Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw
Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G
131SS 2017 DuA - Kapitel 20
Dynamische Programmierung
132
bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G
bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE
Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion
L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj
Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus
132SS 2017 DuA - Kapitel 20
Dynamische Programmierung
Falls die Menge leer ist ist maxhellip=0
133
Beispiel 4 Fahrstuhloptimierung
Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ
Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet
133SS 2017 DuA - Kapitel 20
Dynamische Programmierung
134
bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist
bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)
Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn
Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1
Optimaler Wert mink+1leilef m[ik]
134SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
135
Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen
Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium
Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung
135SS 2017 DuA - Kapitel 20
Dynamische Programmierung
- Foliennummer 1
- Foliennummer 2
- Foliennummer 3
- Foliennummer 4
- Foliennummer 5
- Foliennummer 6
- Foliennummer 7
- Foliennummer 8
- Foliennummer 9
- Foliennummer 10
- Foliennummer 11
- Foliennummer 12
- Foliennummer 13
- Foliennummer 14
- Foliennummer 15
- Foliennummer 16
- Foliennummer 17
- Foliennummer 18
- Foliennummer 19
- Foliennummer 20
- Foliennummer 21
- Foliennummer 22
- Foliennummer 23
- Foliennummer 24
- Foliennummer 25
- Foliennummer 26
- Foliennummer 27
- Foliennummer 28
- Foliennummer 29
- Foliennummer 30
- Foliennummer 31
- Foliennummer 32
- Foliennummer 33
- Foliennummer 34
- Foliennummer 35
- Foliennummer 36
- Foliennummer 37
- Foliennummer 38
- Foliennummer 39
- Foliennummer 40
- Foliennummer 41
- Foliennummer 42
- Foliennummer 43
- Foliennummer 44
- Foliennummer 45
- Foliennummer 46
- Foliennummer 47
- Foliennummer 48
- Foliennummer 49
- Foliennummer 50
- Foliennummer 51
- Foliennummer 52
- Foliennummer 53
- Foliennummer 54
- Foliennummer 55
- Foliennummer 56
- Foliennummer 57
- Foliennummer 58
- Foliennummer 59
- Foliennummer 60
- Foliennummer 61
- Foliennummer 62
- Foliennummer 63
- Foliennummer 64
- Foliennummer 65
- Foliennummer 66
- Foliennummer 67
- Foliennummer 68
- Foliennummer 69
- Foliennummer 70
- Foliennummer 71
- Foliennummer 72
- Foliennummer 73
- Foliennummer 74
- Foliennummer 75
- Foliennummer 76
- Foliennummer 77
- Foliennummer 78
- Foliennummer 79
- Foliennummer 80
- Fraktionales Rucksack-Problem
- Gierige Loumlsung des fraktionalen Rucksack-Problems
- Gieriges Einpacken ist optimal
- Foliennummer 84
- Foliennummer 85
- Foliennummer 86
- Foliennummer 87
- Foliennummer 88
- Foliennummer 89
- Foliennummer 90
- Foliennummer 91
- Foliennummer 92
- Foliennummer 93
- Foliennummer 94
- Foliennummer 95
- Foliennummer 96
- Foliennummer 97
- Foliennummer 98
- Foliennummer 99
- Foliennummer 100
- Foliennummer 101
- Foliennummer 102
- Foliennummer 103
- Foliennummer 104
- Foliennummer 105
- Foliennummer 106
- Foliennummer 107
- Foliennummer 108
- Foliennummer 109
- Foliennummer 110
- Foliennummer 111
- Foliennummer 112
- Foliennummer 113
- Foliennummer 114
- Foliennummer 115
- Foliennummer 116
- Foliennummer 117
- Foliennummer 118
- Foliennummer 119
- Foliennummer 120
- Foliennummer 121
- Foliennummer 122
- Foliennummer 123
- Foliennummer 124
- Foliennummer 125
- Foliennummer 126
- Foliennummer 127
- Foliennummer 128
- Foliennummer 129
- Foliennummer 130
- Foliennummer 131
- Foliennummer 132
- Foliennummer 133
- Foliennummer 134
- Foliennummer 135
-
![Page 112: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/112.jpg)
112
Beispiel
000 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
112SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
113
Beispiel
00 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
113SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
114
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
114SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
115
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
Optimaler Loumlsungswert fuumlr W=8
115SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
116
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
116SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
Optimaler Loumlsungswert fuumlr W=8
117
Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert
einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks
117SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz
von u nach v sowie einen kuumlrzesten Weg
21
-15
8
4
-4
5
6
7
a
a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0
b c
f
ed
SS 2017 DuA - Kapitel 20 118
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
SS 2017 DuA - Kapitel 20 119
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Knoten k tritt maximal einmal auf
SS 2017 DuA - Kapitel 20 120
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 121
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 122
Dynamische Programmierung - APSP
123
bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt
von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1
ij
kFall (b)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
124
Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten
aus 1hellipk
bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung
d = w falls k=0min ( d d + d ) falls kge1
ij(k)
(k)(k-1) (k-1) (k-1)ij ijij ik kj
(n)ij(n)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
125
Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D
(0)
(k)ij
(n)
(k-1)ij
(k-1)ik
(k-1)kj
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
126
Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung
ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )
2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann
126SS 2017 DuA - Kapitel 20
Dynamische Programmierung
127
Beispiel 1 Matrixketten-Multiplikation
Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist
Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen
Beobachtung bull Sei Aij = AisdothellipsdotAj
bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)
127SS 2017 DuA - Kapitel 20
Dynamische Programmierung
128
bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen
Initialfall m[ii]=0 fuumlr alle iisin1hellipn
Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj
Optimaler Wert m[1n]
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1
128SS 2017 DuA - Kapitel 20
Dynamische Programmierung
129
Beispiel 2 Optimaler binaumlrer Suchbaum
Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1
Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T
(Tiefe der Wurzel ist 0) )
129SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
130
bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj
Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion
m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert
m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus
130SS 2017 DuA - Kapitel 20
Dynamische Programmierung
j
131
Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph
Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw
Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G
131SS 2017 DuA - Kapitel 20
Dynamische Programmierung
132
bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G
bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE
Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion
L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj
Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus
132SS 2017 DuA - Kapitel 20
Dynamische Programmierung
Falls die Menge leer ist ist maxhellip=0
133
Beispiel 4 Fahrstuhloptimierung
Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ
Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet
133SS 2017 DuA - Kapitel 20
Dynamische Programmierung
134
bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist
bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)
Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn
Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1
Optimaler Wert mink+1leilef m[ik]
134SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
135
Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen
Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium
Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung
135SS 2017 DuA - Kapitel 20
Dynamische Programmierung
- Foliennummer 1
- Foliennummer 2
- Foliennummer 3
- Foliennummer 4
- Foliennummer 5
- Foliennummer 6
- Foliennummer 7
- Foliennummer 8
- Foliennummer 9
- Foliennummer 10
- Foliennummer 11
- Foliennummer 12
- Foliennummer 13
- Foliennummer 14
- Foliennummer 15
- Foliennummer 16
- Foliennummer 17
- Foliennummer 18
- Foliennummer 19
- Foliennummer 20
- Foliennummer 21
- Foliennummer 22
- Foliennummer 23
- Foliennummer 24
- Foliennummer 25
- Foliennummer 26
- Foliennummer 27
- Foliennummer 28
- Foliennummer 29
- Foliennummer 30
- Foliennummer 31
- Foliennummer 32
- Foliennummer 33
- Foliennummer 34
- Foliennummer 35
- Foliennummer 36
- Foliennummer 37
- Foliennummer 38
- Foliennummer 39
- Foliennummer 40
- Foliennummer 41
- Foliennummer 42
- Foliennummer 43
- Foliennummer 44
- Foliennummer 45
- Foliennummer 46
- Foliennummer 47
- Foliennummer 48
- Foliennummer 49
- Foliennummer 50
- Foliennummer 51
- Foliennummer 52
- Foliennummer 53
- Foliennummer 54
- Foliennummer 55
- Foliennummer 56
- Foliennummer 57
- Foliennummer 58
- Foliennummer 59
- Foliennummer 60
- Foliennummer 61
- Foliennummer 62
- Foliennummer 63
- Foliennummer 64
- Foliennummer 65
- Foliennummer 66
- Foliennummer 67
- Foliennummer 68
- Foliennummer 69
- Foliennummer 70
- Foliennummer 71
- Foliennummer 72
- Foliennummer 73
- Foliennummer 74
- Foliennummer 75
- Foliennummer 76
- Foliennummer 77
- Foliennummer 78
- Foliennummer 79
- Foliennummer 80
- Fraktionales Rucksack-Problem
- Gierige Loumlsung des fraktionalen Rucksack-Problems
- Gieriges Einpacken ist optimal
- Foliennummer 84
- Foliennummer 85
- Foliennummer 86
- Foliennummer 87
- Foliennummer 88
- Foliennummer 89
- Foliennummer 90
- Foliennummer 91
- Foliennummer 92
- Foliennummer 93
- Foliennummer 94
- Foliennummer 95
- Foliennummer 96
- Foliennummer 97
- Foliennummer 98
- Foliennummer 99
- Foliennummer 100
- Foliennummer 101
- Foliennummer 102
- Foliennummer 103
- Foliennummer 104
- Foliennummer 105
- Foliennummer 106
- Foliennummer 107
- Foliennummer 108
- Foliennummer 109
- Foliennummer 110
- Foliennummer 111
- Foliennummer 112
- Foliennummer 113
- Foliennummer 114
- Foliennummer 115
- Foliennummer 116
- Foliennummer 117
- Foliennummer 118
- Foliennummer 119
- Foliennummer 120
- Foliennummer 121
- Foliennummer 122
- Foliennummer 123
- Foliennummer 124
- Foliennummer 125
- Foliennummer 126
- Foliennummer 127
- Foliennummer 128
- Foliennummer 129
- Foliennummer 130
- Foliennummer 131
- Foliennummer 132
- Foliennummer 133
- Foliennummer 134
- Foliennummer 135
-
![Page 113: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/113.jpg)
113
Beispiel
00 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
113SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
114
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
114SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
115
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
Optimaler Loumlsungswert fuumlr W=8
115SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
116
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
116SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
Optimaler Loumlsungswert fuumlr W=8
117
Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert
einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks
117SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz
von u nach v sowie einen kuumlrzesten Weg
21
-15
8
4
-4
5
6
7
a
a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0
b c
f
ed
SS 2017 DuA - Kapitel 20 118
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
SS 2017 DuA - Kapitel 20 119
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Knoten k tritt maximal einmal auf
SS 2017 DuA - Kapitel 20 120
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 121
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 122
Dynamische Programmierung - APSP
123
bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt
von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1
ij
kFall (b)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
124
Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten
aus 1hellipk
bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung
d = w falls k=0min ( d d + d ) falls kge1
ij(k)
(k)(k-1) (k-1) (k-1)ij ijij ik kj
(n)ij(n)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
125
Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D
(0)
(k)ij
(n)
(k-1)ij
(k-1)ik
(k-1)kj
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
126
Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung
ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )
2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann
126SS 2017 DuA - Kapitel 20
Dynamische Programmierung
127
Beispiel 1 Matrixketten-Multiplikation
Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist
Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen
Beobachtung bull Sei Aij = AisdothellipsdotAj
bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)
127SS 2017 DuA - Kapitel 20
Dynamische Programmierung
128
bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen
Initialfall m[ii]=0 fuumlr alle iisin1hellipn
Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj
Optimaler Wert m[1n]
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1
128SS 2017 DuA - Kapitel 20
Dynamische Programmierung
129
Beispiel 2 Optimaler binaumlrer Suchbaum
Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1
Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T
(Tiefe der Wurzel ist 0) )
129SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
130
bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj
Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion
m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert
m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus
130SS 2017 DuA - Kapitel 20
Dynamische Programmierung
j
131
Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph
Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw
Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G
131SS 2017 DuA - Kapitel 20
Dynamische Programmierung
132
bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G
bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE
Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion
L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj
Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus
132SS 2017 DuA - Kapitel 20
Dynamische Programmierung
Falls die Menge leer ist ist maxhellip=0
133
Beispiel 4 Fahrstuhloptimierung
Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ
Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet
133SS 2017 DuA - Kapitel 20
Dynamische Programmierung
134
bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist
bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)
Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn
Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1
Optimaler Wert mink+1leilef m[ik]
134SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
135
Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen
Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium
Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung
135SS 2017 DuA - Kapitel 20
Dynamische Programmierung
- Foliennummer 1
- Foliennummer 2
- Foliennummer 3
- Foliennummer 4
- Foliennummer 5
- Foliennummer 6
- Foliennummer 7
- Foliennummer 8
- Foliennummer 9
- Foliennummer 10
- Foliennummer 11
- Foliennummer 12
- Foliennummer 13
- Foliennummer 14
- Foliennummer 15
- Foliennummer 16
- Foliennummer 17
- Foliennummer 18
- Foliennummer 19
- Foliennummer 20
- Foliennummer 21
- Foliennummer 22
- Foliennummer 23
- Foliennummer 24
- Foliennummer 25
- Foliennummer 26
- Foliennummer 27
- Foliennummer 28
- Foliennummer 29
- Foliennummer 30
- Foliennummer 31
- Foliennummer 32
- Foliennummer 33
- Foliennummer 34
- Foliennummer 35
- Foliennummer 36
- Foliennummer 37
- Foliennummer 38
- Foliennummer 39
- Foliennummer 40
- Foliennummer 41
- Foliennummer 42
- Foliennummer 43
- Foliennummer 44
- Foliennummer 45
- Foliennummer 46
- Foliennummer 47
- Foliennummer 48
- Foliennummer 49
- Foliennummer 50
- Foliennummer 51
- Foliennummer 52
- Foliennummer 53
- Foliennummer 54
- Foliennummer 55
- Foliennummer 56
- Foliennummer 57
- Foliennummer 58
- Foliennummer 59
- Foliennummer 60
- Foliennummer 61
- Foliennummer 62
- Foliennummer 63
- Foliennummer 64
- Foliennummer 65
- Foliennummer 66
- Foliennummer 67
- Foliennummer 68
- Foliennummer 69
- Foliennummer 70
- Foliennummer 71
- Foliennummer 72
- Foliennummer 73
- Foliennummer 74
- Foliennummer 75
- Foliennummer 76
- Foliennummer 77
- Foliennummer 78
- Foliennummer 79
- Foliennummer 80
- Fraktionales Rucksack-Problem
- Gierige Loumlsung des fraktionalen Rucksack-Problems
- Gieriges Einpacken ist optimal
- Foliennummer 84
- Foliennummer 85
- Foliennummer 86
- Foliennummer 87
- Foliennummer 88
- Foliennummer 89
- Foliennummer 90
- Foliennummer 91
- Foliennummer 92
- Foliennummer 93
- Foliennummer 94
- Foliennummer 95
- Foliennummer 96
- Foliennummer 97
- Foliennummer 98
- Foliennummer 99
- Foliennummer 100
- Foliennummer 101
- Foliennummer 102
- Foliennummer 103
- Foliennummer 104
- Foliennummer 105
- Foliennummer 106
- Foliennummer 107
- Foliennummer 108
- Foliennummer 109
- Foliennummer 110
- Foliennummer 111
- Foliennummer 112
- Foliennummer 113
- Foliennummer 114
- Foliennummer 115
- Foliennummer 116
- Foliennummer 117
- Foliennummer 118
- Foliennummer 119
- Foliennummer 120
- Foliennummer 121
- Foliennummer 122
- Foliennummer 123
- Foliennummer 124
- Foliennummer 125
- Foliennummer 126
- Foliennummer 127
- Foliennummer 128
- Foliennummer 129
- Foliennummer 130
- Foliennummer 131
- Foliennummer 132
- Foliennummer 133
- Foliennummer 134
- Foliennummer 135
-
![Page 114: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/114.jpg)
114
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
114SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
115
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
Optimaler Loumlsungswert fuumlr W=8
115SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
116
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
116SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
Optimaler Loumlsungswert fuumlr W=8
117
Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert
einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks
117SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz
von u nach v sowie einen kuumlrzesten Weg
21
-15
8
4
-4
5
6
7
a
a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0
b c
f
ed
SS 2017 DuA - Kapitel 20 118
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
SS 2017 DuA - Kapitel 20 119
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Knoten k tritt maximal einmal auf
SS 2017 DuA - Kapitel 20 120
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 121
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 122
Dynamische Programmierung - APSP
123
bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt
von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1
ij
kFall (b)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
124
Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten
aus 1hellipk
bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung
d = w falls k=0min ( d d + d ) falls kge1
ij(k)
(k)(k-1) (k-1) (k-1)ij ijij ik kj
(n)ij(n)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
125
Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D
(0)
(k)ij
(n)
(k-1)ij
(k-1)ik
(k-1)kj
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
126
Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung
ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )
2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann
126SS 2017 DuA - Kapitel 20
Dynamische Programmierung
127
Beispiel 1 Matrixketten-Multiplikation
Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist
Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen
Beobachtung bull Sei Aij = AisdothellipsdotAj
bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)
127SS 2017 DuA - Kapitel 20
Dynamische Programmierung
128
bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen
Initialfall m[ii]=0 fuumlr alle iisin1hellipn
Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj
Optimaler Wert m[1n]
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1
128SS 2017 DuA - Kapitel 20
Dynamische Programmierung
129
Beispiel 2 Optimaler binaumlrer Suchbaum
Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1
Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T
(Tiefe der Wurzel ist 0) )
129SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
130
bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj
Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion
m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert
m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus
130SS 2017 DuA - Kapitel 20
Dynamische Programmierung
j
131
Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph
Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw
Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G
131SS 2017 DuA - Kapitel 20
Dynamische Programmierung
132
bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G
bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE
Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion
L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj
Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus
132SS 2017 DuA - Kapitel 20
Dynamische Programmierung
Falls die Menge leer ist ist maxhellip=0
133
Beispiel 4 Fahrstuhloptimierung
Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ
Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet
133SS 2017 DuA - Kapitel 20
Dynamische Programmierung
134
bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist
bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)
Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn
Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1
Optimaler Wert mink+1leilef m[ik]
134SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
135
Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen
Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium
Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung
135SS 2017 DuA - Kapitel 20
Dynamische Programmierung
- Foliennummer 1
- Foliennummer 2
- Foliennummer 3
- Foliennummer 4
- Foliennummer 5
- Foliennummer 6
- Foliennummer 7
- Foliennummer 8
- Foliennummer 9
- Foliennummer 10
- Foliennummer 11
- Foliennummer 12
- Foliennummer 13
- Foliennummer 14
- Foliennummer 15
- Foliennummer 16
- Foliennummer 17
- Foliennummer 18
- Foliennummer 19
- Foliennummer 20
- Foliennummer 21
- Foliennummer 22
- Foliennummer 23
- Foliennummer 24
- Foliennummer 25
- Foliennummer 26
- Foliennummer 27
- Foliennummer 28
- Foliennummer 29
- Foliennummer 30
- Foliennummer 31
- Foliennummer 32
- Foliennummer 33
- Foliennummer 34
- Foliennummer 35
- Foliennummer 36
- Foliennummer 37
- Foliennummer 38
- Foliennummer 39
- Foliennummer 40
- Foliennummer 41
- Foliennummer 42
- Foliennummer 43
- Foliennummer 44
- Foliennummer 45
- Foliennummer 46
- Foliennummer 47
- Foliennummer 48
- Foliennummer 49
- Foliennummer 50
- Foliennummer 51
- Foliennummer 52
- Foliennummer 53
- Foliennummer 54
- Foliennummer 55
- Foliennummer 56
- Foliennummer 57
- Foliennummer 58
- Foliennummer 59
- Foliennummer 60
- Foliennummer 61
- Foliennummer 62
- Foliennummer 63
- Foliennummer 64
- Foliennummer 65
- Foliennummer 66
- Foliennummer 67
- Foliennummer 68
- Foliennummer 69
- Foliennummer 70
- Foliennummer 71
- Foliennummer 72
- Foliennummer 73
- Foliennummer 74
- Foliennummer 75
- Foliennummer 76
- Foliennummer 77
- Foliennummer 78
- Foliennummer 79
- Foliennummer 80
- Fraktionales Rucksack-Problem
- Gierige Loumlsung des fraktionalen Rucksack-Problems
- Gieriges Einpacken ist optimal
- Foliennummer 84
- Foliennummer 85
- Foliennummer 86
- Foliennummer 87
- Foliennummer 88
- Foliennummer 89
- Foliennummer 90
- Foliennummer 91
- Foliennummer 92
- Foliennummer 93
- Foliennummer 94
- Foliennummer 95
- Foliennummer 96
- Foliennummer 97
- Foliennummer 98
- Foliennummer 99
- Foliennummer 100
- Foliennummer 101
- Foliennummer 102
- Foliennummer 103
- Foliennummer 104
- Foliennummer 105
- Foliennummer 106
- Foliennummer 107
- Foliennummer 108
- Foliennummer 109
- Foliennummer 110
- Foliennummer 111
- Foliennummer 112
- Foliennummer 113
- Foliennummer 114
- Foliennummer 115
- Foliennummer 116
- Foliennummer 117
- Foliennummer 118
- Foliennummer 119
- Foliennummer 120
- Foliennummer 121
- Foliennummer 122
- Foliennummer 123
- Foliennummer 124
- Foliennummer 125
- Foliennummer 126
- Foliennummer 127
- Foliennummer 128
- Foliennummer 129
- Foliennummer 130
- Foliennummer 131
- Foliennummer 132
- Foliennummer 133
- Foliennummer 134
- Foliennummer 135
-
![Page 115: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/115.jpg)
115
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
Optimaler Loumlsungswert fuumlr W=8
115SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
116
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
116SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
Optimaler Loumlsungswert fuumlr W=8
117
Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert
einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks
117SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz
von u nach v sowie einen kuumlrzesten Weg
21
-15
8
4
-4
5
6
7
a
a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0
b c
f
ed
SS 2017 DuA - Kapitel 20 118
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
SS 2017 DuA - Kapitel 20 119
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Knoten k tritt maximal einmal auf
SS 2017 DuA - Kapitel 20 120
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 121
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 122
Dynamische Programmierung - APSP
123
bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt
von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1
ij
kFall (b)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
124
Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten
aus 1hellipk
bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung
d = w falls k=0min ( d d + d ) falls kge1
ij(k)
(k)(k-1) (k-1) (k-1)ij ijij ik kj
(n)ij(n)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
125
Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D
(0)
(k)ij
(n)
(k-1)ij
(k-1)ik
(k-1)kj
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
126
Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung
ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )
2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann
126SS 2017 DuA - Kapitel 20
Dynamische Programmierung
127
Beispiel 1 Matrixketten-Multiplikation
Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist
Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen
Beobachtung bull Sei Aij = AisdothellipsdotAj
bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)
127SS 2017 DuA - Kapitel 20
Dynamische Programmierung
128
bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen
Initialfall m[ii]=0 fuumlr alle iisin1hellipn
Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj
Optimaler Wert m[1n]
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1
128SS 2017 DuA - Kapitel 20
Dynamische Programmierung
129
Beispiel 2 Optimaler binaumlrer Suchbaum
Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1
Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T
(Tiefe der Wurzel ist 0) )
129SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
130
bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj
Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion
m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert
m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus
130SS 2017 DuA - Kapitel 20
Dynamische Programmierung
j
131
Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph
Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw
Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G
131SS 2017 DuA - Kapitel 20
Dynamische Programmierung
132
bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G
bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE
Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion
L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj
Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus
132SS 2017 DuA - Kapitel 20
Dynamische Programmierung
Falls die Menge leer ist ist maxhellip=0
133
Beispiel 4 Fahrstuhloptimierung
Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ
Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet
133SS 2017 DuA - Kapitel 20
Dynamische Programmierung
134
bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist
bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)
Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn
Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1
Optimaler Wert mink+1leilef m[ik]
134SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
135
Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen
Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium
Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung
135SS 2017 DuA - Kapitel 20
Dynamische Programmierung
- Foliennummer 1
- Foliennummer 2
- Foliennummer 3
- Foliennummer 4
- Foliennummer 5
- Foliennummer 6
- Foliennummer 7
- Foliennummer 8
- Foliennummer 9
- Foliennummer 10
- Foliennummer 11
- Foliennummer 12
- Foliennummer 13
- Foliennummer 14
- Foliennummer 15
- Foliennummer 16
- Foliennummer 17
- Foliennummer 18
- Foliennummer 19
- Foliennummer 20
- Foliennummer 21
- Foliennummer 22
- Foliennummer 23
- Foliennummer 24
- Foliennummer 25
- Foliennummer 26
- Foliennummer 27
- Foliennummer 28
- Foliennummer 29
- Foliennummer 30
- Foliennummer 31
- Foliennummer 32
- Foliennummer 33
- Foliennummer 34
- Foliennummer 35
- Foliennummer 36
- Foliennummer 37
- Foliennummer 38
- Foliennummer 39
- Foliennummer 40
- Foliennummer 41
- Foliennummer 42
- Foliennummer 43
- Foliennummer 44
- Foliennummer 45
- Foliennummer 46
- Foliennummer 47
- Foliennummer 48
- Foliennummer 49
- Foliennummer 50
- Foliennummer 51
- Foliennummer 52
- Foliennummer 53
- Foliennummer 54
- Foliennummer 55
- Foliennummer 56
- Foliennummer 57
- Foliennummer 58
- Foliennummer 59
- Foliennummer 60
- Foliennummer 61
- Foliennummer 62
- Foliennummer 63
- Foliennummer 64
- Foliennummer 65
- Foliennummer 66
- Foliennummer 67
- Foliennummer 68
- Foliennummer 69
- Foliennummer 70
- Foliennummer 71
- Foliennummer 72
- Foliennummer 73
- Foliennummer 74
- Foliennummer 75
- Foliennummer 76
- Foliennummer 77
- Foliennummer 78
- Foliennummer 79
- Foliennummer 80
- Fraktionales Rucksack-Problem
- Gierige Loumlsung des fraktionalen Rucksack-Problems
- Gieriges Einpacken ist optimal
- Foliennummer 84
- Foliennummer 85
- Foliennummer 86
- Foliennummer 87
- Foliennummer 88
- Foliennummer 89
- Foliennummer 90
- Foliennummer 91
- Foliennummer 92
- Foliennummer 93
- Foliennummer 94
- Foliennummer 95
- Foliennummer 96
- Foliennummer 97
- Foliennummer 98
- Foliennummer 99
- Foliennummer 100
- Foliennummer 101
- Foliennummer 102
- Foliennummer 103
- Foliennummer 104
- Foliennummer 105
- Foliennummer 106
- Foliennummer 107
- Foliennummer 108
- Foliennummer 109
- Foliennummer 110
- Foliennummer 111
- Foliennummer 112
- Foliennummer 113
- Foliennummer 114
- Foliennummer 115
- Foliennummer 116
- Foliennummer 117
- Foliennummer 118
- Foliennummer 119
- Foliennummer 120
- Foliennummer 121
- Foliennummer 122
- Foliennummer 123
- Foliennummer 124
- Foliennummer 125
- Foliennummer 126
- Foliennummer 127
- Foliennummer 128
- Foliennummer 129
- Foliennummer 130
- Foliennummer 131
- Foliennummer 132
- Foliennummer 133
- Foliennummer 134
- Foliennummer 135
-
![Page 116: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/116.jpg)
116
Beispiel
0 2 3 5 7 9 10 12 13
0 2 3 5 7 9 10 12 13
0 2 3 5 6 7 9 10 10
0 2 3 5 6 7 9 10 10
0 1 3 4 5 7 8 8 80 1 1 4 5 5 5 5 60 0 0 4 4 4 4 4 60 0 0 0 0 2 2 2 20 0 0 0 0 0 0 0 0
Groumlszlige Wert
0 1 W
0
1
n
n
g v5 23 41 12 31 27 34 73 3
1
2
116SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
Optimaler Loumlsungswert fuumlr W=8
117
Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert
einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks
117SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz
von u nach v sowie einen kuumlrzesten Weg
21
-15
8
4
-4
5
6
7
a
a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0
b c
f
ed
SS 2017 DuA - Kapitel 20 118
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
SS 2017 DuA - Kapitel 20 119
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Knoten k tritt maximal einmal auf
SS 2017 DuA - Kapitel 20 120
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 121
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 122
Dynamische Programmierung - APSP
123
bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt
von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1
ij
kFall (b)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
124
Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten
aus 1hellipk
bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung
d = w falls k=0min ( d d + d ) falls kge1
ij(k)
(k)(k-1) (k-1) (k-1)ij ijij ik kj
(n)ij(n)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
125
Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D
(0)
(k)ij
(n)
(k-1)ij
(k-1)ik
(k-1)kj
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
126
Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung
ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )
2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann
126SS 2017 DuA - Kapitel 20
Dynamische Programmierung
127
Beispiel 1 Matrixketten-Multiplikation
Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist
Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen
Beobachtung bull Sei Aij = AisdothellipsdotAj
bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)
127SS 2017 DuA - Kapitel 20
Dynamische Programmierung
128
bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen
Initialfall m[ii]=0 fuumlr alle iisin1hellipn
Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj
Optimaler Wert m[1n]
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1
128SS 2017 DuA - Kapitel 20
Dynamische Programmierung
129
Beispiel 2 Optimaler binaumlrer Suchbaum
Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1
Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T
(Tiefe der Wurzel ist 0) )
129SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
130
bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj
Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion
m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert
m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus
130SS 2017 DuA - Kapitel 20
Dynamische Programmierung
j
131
Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph
Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw
Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G
131SS 2017 DuA - Kapitel 20
Dynamische Programmierung
132
bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G
bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE
Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion
L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj
Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus
132SS 2017 DuA - Kapitel 20
Dynamische Programmierung
Falls die Menge leer ist ist maxhellip=0
133
Beispiel 4 Fahrstuhloptimierung
Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ
Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet
133SS 2017 DuA - Kapitel 20
Dynamische Programmierung
134
bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist
bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)
Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn
Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1
Optimaler Wert mink+1leilef m[ik]
134SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
135
Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen
Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium
Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung
135SS 2017 DuA - Kapitel 20
Dynamische Programmierung
- Foliennummer 1
- Foliennummer 2
- Foliennummer 3
- Foliennummer 4
- Foliennummer 5
- Foliennummer 6
- Foliennummer 7
- Foliennummer 8
- Foliennummer 9
- Foliennummer 10
- Foliennummer 11
- Foliennummer 12
- Foliennummer 13
- Foliennummer 14
- Foliennummer 15
- Foliennummer 16
- Foliennummer 17
- Foliennummer 18
- Foliennummer 19
- Foliennummer 20
- Foliennummer 21
- Foliennummer 22
- Foliennummer 23
- Foliennummer 24
- Foliennummer 25
- Foliennummer 26
- Foliennummer 27
- Foliennummer 28
- Foliennummer 29
- Foliennummer 30
- Foliennummer 31
- Foliennummer 32
- Foliennummer 33
- Foliennummer 34
- Foliennummer 35
- Foliennummer 36
- Foliennummer 37
- Foliennummer 38
- Foliennummer 39
- Foliennummer 40
- Foliennummer 41
- Foliennummer 42
- Foliennummer 43
- Foliennummer 44
- Foliennummer 45
- Foliennummer 46
- Foliennummer 47
- Foliennummer 48
- Foliennummer 49
- Foliennummer 50
- Foliennummer 51
- Foliennummer 52
- Foliennummer 53
- Foliennummer 54
- Foliennummer 55
- Foliennummer 56
- Foliennummer 57
- Foliennummer 58
- Foliennummer 59
- Foliennummer 60
- Foliennummer 61
- Foliennummer 62
- Foliennummer 63
- Foliennummer 64
- Foliennummer 65
- Foliennummer 66
- Foliennummer 67
- Foliennummer 68
- Foliennummer 69
- Foliennummer 70
- Foliennummer 71
- Foliennummer 72
- Foliennummer 73
- Foliennummer 74
- Foliennummer 75
- Foliennummer 76
- Foliennummer 77
- Foliennummer 78
- Foliennummer 79
- Foliennummer 80
- Fraktionales Rucksack-Problem
- Gierige Loumlsung des fraktionalen Rucksack-Problems
- Gieriges Einpacken ist optimal
- Foliennummer 84
- Foliennummer 85
- Foliennummer 86
- Foliennummer 87
- Foliennummer 88
- Foliennummer 89
- Foliennummer 90
- Foliennummer 91
- Foliennummer 92
- Foliennummer 93
- Foliennummer 94
- Foliennummer 95
- Foliennummer 96
- Foliennummer 97
- Foliennummer 98
- Foliennummer 99
- Foliennummer 100
- Foliennummer 101
- Foliennummer 102
- Foliennummer 103
- Foliennummer 104
- Foliennummer 105
- Foliennummer 106
- Foliennummer 107
- Foliennummer 108
- Foliennummer 109
- Foliennummer 110
- Foliennummer 111
- Foliennummer 112
- Foliennummer 113
- Foliennummer 114
- Foliennummer 115
- Foliennummer 116
- Foliennummer 117
- Foliennummer 118
- Foliennummer 119
- Foliennummer 120
- Foliennummer 121
- Foliennummer 122
- Foliennummer 123
- Foliennummer 124
- Foliennummer 125
- Foliennummer 126
- Foliennummer 127
- Foliennummer 128
- Foliennummer 129
- Foliennummer 130
- Foliennummer 131
- Foliennummer 132
- Foliennummer 133
- Foliennummer 134
- Foliennummer 135
-
![Page 117: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/117.jpg)
117
Satz 206Algorithmus Rucksack berechnet in Θ(nW) Zeit den Wert
einer optimalen Loumlsung wobei n die Anzahl der Objekte ist und W die Groumlszlige des Rucksacks
117SS 2017 DuA - Kapitel 20
Dynamisches Programmieren ndash Rucksack
All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz
von u nach v sowie einen kuumlrzesten Weg
21
-15
8
4
-4
5
6
7
a
a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0
b c
f
ed
SS 2017 DuA - Kapitel 20 118
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
SS 2017 DuA - Kapitel 20 119
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Knoten k tritt maximal einmal auf
SS 2017 DuA - Kapitel 20 120
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 121
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 122
Dynamische Programmierung - APSP
123
bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt
von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1
ij
kFall (b)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
124
Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten
aus 1hellipk
bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung
d = w falls k=0min ( d d + d ) falls kge1
ij(k)
(k)(k-1) (k-1) (k-1)ij ijij ik kj
(n)ij(n)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
125
Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D
(0)
(k)ij
(n)
(k-1)ij
(k-1)ik
(k-1)kj
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
126
Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung
ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )
2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann
126SS 2017 DuA - Kapitel 20
Dynamische Programmierung
127
Beispiel 1 Matrixketten-Multiplikation
Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist
Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen
Beobachtung bull Sei Aij = AisdothellipsdotAj
bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)
127SS 2017 DuA - Kapitel 20
Dynamische Programmierung
128
bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen
Initialfall m[ii]=0 fuumlr alle iisin1hellipn
Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj
Optimaler Wert m[1n]
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1
128SS 2017 DuA - Kapitel 20
Dynamische Programmierung
129
Beispiel 2 Optimaler binaumlrer Suchbaum
Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1
Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T
(Tiefe der Wurzel ist 0) )
129SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
130
bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj
Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion
m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert
m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus
130SS 2017 DuA - Kapitel 20
Dynamische Programmierung
j
131
Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph
Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw
Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G
131SS 2017 DuA - Kapitel 20
Dynamische Programmierung
132
bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G
bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE
Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion
L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj
Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus
132SS 2017 DuA - Kapitel 20
Dynamische Programmierung
Falls die Menge leer ist ist maxhellip=0
133
Beispiel 4 Fahrstuhloptimierung
Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ
Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet
133SS 2017 DuA - Kapitel 20
Dynamische Programmierung
134
bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist
bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)
Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn
Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1
Optimaler Wert mink+1leilef m[ik]
134SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
135
Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen
Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium
Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung
135SS 2017 DuA - Kapitel 20
Dynamische Programmierung
- Foliennummer 1
- Foliennummer 2
- Foliennummer 3
- Foliennummer 4
- Foliennummer 5
- Foliennummer 6
- Foliennummer 7
- Foliennummer 8
- Foliennummer 9
- Foliennummer 10
- Foliennummer 11
- Foliennummer 12
- Foliennummer 13
- Foliennummer 14
- Foliennummer 15
- Foliennummer 16
- Foliennummer 17
- Foliennummer 18
- Foliennummer 19
- Foliennummer 20
- Foliennummer 21
- Foliennummer 22
- Foliennummer 23
- Foliennummer 24
- Foliennummer 25
- Foliennummer 26
- Foliennummer 27
- Foliennummer 28
- Foliennummer 29
- Foliennummer 30
- Foliennummer 31
- Foliennummer 32
- Foliennummer 33
- Foliennummer 34
- Foliennummer 35
- Foliennummer 36
- Foliennummer 37
- Foliennummer 38
- Foliennummer 39
- Foliennummer 40
- Foliennummer 41
- Foliennummer 42
- Foliennummer 43
- Foliennummer 44
- Foliennummer 45
- Foliennummer 46
- Foliennummer 47
- Foliennummer 48
- Foliennummer 49
- Foliennummer 50
- Foliennummer 51
- Foliennummer 52
- Foliennummer 53
- Foliennummer 54
- Foliennummer 55
- Foliennummer 56
- Foliennummer 57
- Foliennummer 58
- Foliennummer 59
- Foliennummer 60
- Foliennummer 61
- Foliennummer 62
- Foliennummer 63
- Foliennummer 64
- Foliennummer 65
- Foliennummer 66
- Foliennummer 67
- Foliennummer 68
- Foliennummer 69
- Foliennummer 70
- Foliennummer 71
- Foliennummer 72
- Foliennummer 73
- Foliennummer 74
- Foliennummer 75
- Foliennummer 76
- Foliennummer 77
- Foliennummer 78
- Foliennummer 79
- Foliennummer 80
- Fraktionales Rucksack-Problem
- Gierige Loumlsung des fraktionalen Rucksack-Problems
- Gieriges Einpacken ist optimal
- Foliennummer 84
- Foliennummer 85
- Foliennummer 86
- Foliennummer 87
- Foliennummer 88
- Foliennummer 89
- Foliennummer 90
- Foliennummer 91
- Foliennummer 92
- Foliennummer 93
- Foliennummer 94
- Foliennummer 95
- Foliennummer 96
- Foliennummer 97
- Foliennummer 98
- Foliennummer 99
- Foliennummer 100
- Foliennummer 101
- Foliennummer 102
- Foliennummer 103
- Foliennummer 104
- Foliennummer 105
- Foliennummer 106
- Foliennummer 107
- Foliennummer 108
- Foliennummer 109
- Foliennummer 110
- Foliennummer 111
- Foliennummer 112
- Foliennummer 113
- Foliennummer 114
- Foliennummer 115
- Foliennummer 116
- Foliennummer 117
- Foliennummer 118
- Foliennummer 119
- Foliennummer 120
- Foliennummer 121
- Foliennummer 122
- Foliennummer 123
- Foliennummer 124
- Foliennummer 125
- Foliennummer 126
- Foliennummer 127
- Foliennummer 128
- Foliennummer 129
- Foliennummer 130
- Foliennummer 131
- Foliennummer 132
- Foliennummer 133
- Foliennummer 134
- Foliennummer 135
-
![Page 118: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/118.jpg)
All Pairs Shortest Path (APSP)bull Eingabe Gewichteter Graph G=(VE)bull Ausgabe Fuumlr jedes Paar von Knoten uvisinV die Distanz
von u nach v sowie einen kuumlrzesten Weg
21
-15
8
4
-4
5
6
7
a
a b c d e fa 0 1 5 5 10 9b infin 0 4 5 10 9c infin -3 0 1 6 5d infin -4 0 0 5 4e infin 5 8 9 0 -1f infin infin infin infin infin 0
b c
f
ed
SS 2017 DuA - Kapitel 20 118
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
SS 2017 DuA - Kapitel 20 119
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Knoten k tritt maximal einmal auf
SS 2017 DuA - Kapitel 20 120
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 121
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 122
Dynamische Programmierung - APSP
123
bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt
von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1
ij
kFall (b)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
124
Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten
aus 1hellipk
bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung
d = w falls k=0min ( d d + d ) falls kge1
ij(k)
(k)(k-1) (k-1) (k-1)ij ijij ik kj
(n)ij(n)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
125
Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D
(0)
(k)ij
(n)
(k-1)ij
(k-1)ik
(k-1)kj
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
126
Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung
ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )
2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann
126SS 2017 DuA - Kapitel 20
Dynamische Programmierung
127
Beispiel 1 Matrixketten-Multiplikation
Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist
Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen
Beobachtung bull Sei Aij = AisdothellipsdotAj
bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)
127SS 2017 DuA - Kapitel 20
Dynamische Programmierung
128
bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen
Initialfall m[ii]=0 fuumlr alle iisin1hellipn
Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj
Optimaler Wert m[1n]
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1
128SS 2017 DuA - Kapitel 20
Dynamische Programmierung
129
Beispiel 2 Optimaler binaumlrer Suchbaum
Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1
Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T
(Tiefe der Wurzel ist 0) )
129SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
130
bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj
Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion
m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert
m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus
130SS 2017 DuA - Kapitel 20
Dynamische Programmierung
j
131
Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph
Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw
Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G
131SS 2017 DuA - Kapitel 20
Dynamische Programmierung
132
bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G
bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE
Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion
L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj
Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus
132SS 2017 DuA - Kapitel 20
Dynamische Programmierung
Falls die Menge leer ist ist maxhellip=0
133
Beispiel 4 Fahrstuhloptimierung
Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ
Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet
133SS 2017 DuA - Kapitel 20
Dynamische Programmierung
134
bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist
bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)
Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn
Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1
Optimaler Wert mink+1leilef m[ik]
134SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
135
Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen
Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium
Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung
135SS 2017 DuA - Kapitel 20
Dynamische Programmierung
- Foliennummer 1
- Foliennummer 2
- Foliennummer 3
- Foliennummer 4
- Foliennummer 5
- Foliennummer 6
- Foliennummer 7
- Foliennummer 8
- Foliennummer 9
- Foliennummer 10
- Foliennummer 11
- Foliennummer 12
- Foliennummer 13
- Foliennummer 14
- Foliennummer 15
- Foliennummer 16
- Foliennummer 17
- Foliennummer 18
- Foliennummer 19
- Foliennummer 20
- Foliennummer 21
- Foliennummer 22
- Foliennummer 23
- Foliennummer 24
- Foliennummer 25
- Foliennummer 26
- Foliennummer 27
- Foliennummer 28
- Foliennummer 29
- Foliennummer 30
- Foliennummer 31
- Foliennummer 32
- Foliennummer 33
- Foliennummer 34
- Foliennummer 35
- Foliennummer 36
- Foliennummer 37
- Foliennummer 38
- Foliennummer 39
- Foliennummer 40
- Foliennummer 41
- Foliennummer 42
- Foliennummer 43
- Foliennummer 44
- Foliennummer 45
- Foliennummer 46
- Foliennummer 47
- Foliennummer 48
- Foliennummer 49
- Foliennummer 50
- Foliennummer 51
- Foliennummer 52
- Foliennummer 53
- Foliennummer 54
- Foliennummer 55
- Foliennummer 56
- Foliennummer 57
- Foliennummer 58
- Foliennummer 59
- Foliennummer 60
- Foliennummer 61
- Foliennummer 62
- Foliennummer 63
- Foliennummer 64
- Foliennummer 65
- Foliennummer 66
- Foliennummer 67
- Foliennummer 68
- Foliennummer 69
- Foliennummer 70
- Foliennummer 71
- Foliennummer 72
- Foliennummer 73
- Foliennummer 74
- Foliennummer 75
- Foliennummer 76
- Foliennummer 77
- Foliennummer 78
- Foliennummer 79
- Foliennummer 80
- Fraktionales Rucksack-Problem
- Gierige Loumlsung des fraktionalen Rucksack-Problems
- Gieriges Einpacken ist optimal
- Foliennummer 84
- Foliennummer 85
- Foliennummer 86
- Foliennummer 87
- Foliennummer 88
- Foliennummer 89
- Foliennummer 90
- Foliennummer 91
- Foliennummer 92
- Foliennummer 93
- Foliennummer 94
- Foliennummer 95
- Foliennummer 96
- Foliennummer 97
- Foliennummer 98
- Foliennummer 99
- Foliennummer 100
- Foliennummer 101
- Foliennummer 102
- Foliennummer 103
- Foliennummer 104
- Foliennummer 105
- Foliennummer 106
- Foliennummer 107
- Foliennummer 108
- Foliennummer 109
- Foliennummer 110
- Foliennummer 111
- Foliennummer 112
- Foliennummer 113
- Foliennummer 114
- Foliennummer 115
- Foliennummer 116
- Foliennummer 117
- Foliennummer 118
- Foliennummer 119
- Foliennummer 120
- Foliennummer 121
- Foliennummer 122
- Foliennummer 123
- Foliennummer 124
- Foliennummer 125
- Foliennummer 126
- Foliennummer 127
- Foliennummer 128
- Foliennummer 129
- Foliennummer 130
- Foliennummer 131
- Foliennummer 132
- Foliennummer 133
- Foliennummer 134
- Foliennummer 135
-
![Page 119: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/119.jpg)
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
SS 2017 DuA - Kapitel 20 119
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Knoten k tritt maximal einmal auf
SS 2017 DuA - Kapitel 20 120
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 121
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 122
Dynamische Programmierung - APSP
123
bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt
von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1
ij
kFall (b)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
124
Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten
aus 1hellipk
bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung
d = w falls k=0min ( d d + d ) falls kge1
ij(k)
(k)(k-1) (k-1) (k-1)ij ijij ik kj
(n)ij(n)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
125
Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D
(0)
(k)ij
(n)
(k-1)ij
(k-1)ik
(k-1)kj
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
126
Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung
ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )
2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann
126SS 2017 DuA - Kapitel 20
Dynamische Programmierung
127
Beispiel 1 Matrixketten-Multiplikation
Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist
Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen
Beobachtung bull Sei Aij = AisdothellipsdotAj
bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)
127SS 2017 DuA - Kapitel 20
Dynamische Programmierung
128
bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen
Initialfall m[ii]=0 fuumlr alle iisin1hellipn
Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj
Optimaler Wert m[1n]
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1
128SS 2017 DuA - Kapitel 20
Dynamische Programmierung
129
Beispiel 2 Optimaler binaumlrer Suchbaum
Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1
Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T
(Tiefe der Wurzel ist 0) )
129SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
130
bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj
Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion
m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert
m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus
130SS 2017 DuA - Kapitel 20
Dynamische Programmierung
j
131
Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph
Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw
Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G
131SS 2017 DuA - Kapitel 20
Dynamische Programmierung
132
bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G
bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE
Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion
L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj
Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus
132SS 2017 DuA - Kapitel 20
Dynamische Programmierung
Falls die Menge leer ist ist maxhellip=0
133
Beispiel 4 Fahrstuhloptimierung
Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ
Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet
133SS 2017 DuA - Kapitel 20
Dynamische Programmierung
134
bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist
bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)
Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn
Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1
Optimaler Wert mink+1leilef m[ik]
134SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
135
Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen
Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium
Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung
135SS 2017 DuA - Kapitel 20
Dynamische Programmierung
- Foliennummer 1
- Foliennummer 2
- Foliennummer 3
- Foliennummer 4
- Foliennummer 5
- Foliennummer 6
- Foliennummer 7
- Foliennummer 8
- Foliennummer 9
- Foliennummer 10
- Foliennummer 11
- Foliennummer 12
- Foliennummer 13
- Foliennummer 14
- Foliennummer 15
- Foliennummer 16
- Foliennummer 17
- Foliennummer 18
- Foliennummer 19
- Foliennummer 20
- Foliennummer 21
- Foliennummer 22
- Foliennummer 23
- Foliennummer 24
- Foliennummer 25
- Foliennummer 26
- Foliennummer 27
- Foliennummer 28
- Foliennummer 29
- Foliennummer 30
- Foliennummer 31
- Foliennummer 32
- Foliennummer 33
- Foliennummer 34
- Foliennummer 35
- Foliennummer 36
- Foliennummer 37
- Foliennummer 38
- Foliennummer 39
- Foliennummer 40
- Foliennummer 41
- Foliennummer 42
- Foliennummer 43
- Foliennummer 44
- Foliennummer 45
- Foliennummer 46
- Foliennummer 47
- Foliennummer 48
- Foliennummer 49
- Foliennummer 50
- Foliennummer 51
- Foliennummer 52
- Foliennummer 53
- Foliennummer 54
- Foliennummer 55
- Foliennummer 56
- Foliennummer 57
- Foliennummer 58
- Foliennummer 59
- Foliennummer 60
- Foliennummer 61
- Foliennummer 62
- Foliennummer 63
- Foliennummer 64
- Foliennummer 65
- Foliennummer 66
- Foliennummer 67
- Foliennummer 68
- Foliennummer 69
- Foliennummer 70
- Foliennummer 71
- Foliennummer 72
- Foliennummer 73
- Foliennummer 74
- Foliennummer 75
- Foliennummer 76
- Foliennummer 77
- Foliennummer 78
- Foliennummer 79
- Foliennummer 80
- Fraktionales Rucksack-Problem
- Gierige Loumlsung des fraktionalen Rucksack-Problems
- Gieriges Einpacken ist optimal
- Foliennummer 84
- Foliennummer 85
- Foliennummer 86
- Foliennummer 87
- Foliennummer 88
- Foliennummer 89
- Foliennummer 90
- Foliennummer 91
- Foliennummer 92
- Foliennummer 93
- Foliennummer 94
- Foliennummer 95
- Foliennummer 96
- Foliennummer 97
- Foliennummer 98
- Foliennummer 99
- Foliennummer 100
- Foliennummer 101
- Foliennummer 102
- Foliennummer 103
- Foliennummer 104
- Foliennummer 105
- Foliennummer 106
- Foliennummer 107
- Foliennummer 108
- Foliennummer 109
- Foliennummer 110
- Foliennummer 111
- Foliennummer 112
- Foliennummer 113
- Foliennummer 114
- Foliennummer 115
- Foliennummer 116
- Foliennummer 117
- Foliennummer 118
- Foliennummer 119
- Foliennummer 120
- Foliennummer 121
- Foliennummer 122
- Foliennummer 123
- Foliennummer 124
- Foliennummer 125
- Foliennummer 126
- Foliennummer 127
- Foliennummer 128
- Foliennummer 129
- Foliennummer 130
- Foliennummer 131
- Foliennummer 132
- Foliennummer 133
- Foliennummer 134
- Foliennummer 135
-
![Page 120: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/120.jpg)
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Knoten k tritt maximal einmal auf
SS 2017 DuA - Kapitel 20 120
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 121
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 122
Dynamische Programmierung - APSP
123
bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt
von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1
ij
kFall (b)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
124
Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten
aus 1hellipk
bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung
d = w falls k=0min ( d d + d ) falls kge1
ij(k)
(k)(k-1) (k-1) (k-1)ij ijij ik kj
(n)ij(n)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
125
Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D
(0)
(k)ij
(n)
(k-1)ij
(k-1)ik
(k-1)kj
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
126
Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung
ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )
2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann
126SS 2017 DuA - Kapitel 20
Dynamische Programmierung
127
Beispiel 1 Matrixketten-Multiplikation
Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist
Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen
Beobachtung bull Sei Aij = AisdothellipsdotAj
bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)
127SS 2017 DuA - Kapitel 20
Dynamische Programmierung
128
bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen
Initialfall m[ii]=0 fuumlr alle iisin1hellipn
Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj
Optimaler Wert m[1n]
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1
128SS 2017 DuA - Kapitel 20
Dynamische Programmierung
129
Beispiel 2 Optimaler binaumlrer Suchbaum
Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1
Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T
(Tiefe der Wurzel ist 0) )
129SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
130
bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj
Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion
m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert
m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus
130SS 2017 DuA - Kapitel 20
Dynamische Programmierung
j
131
Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph
Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw
Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G
131SS 2017 DuA - Kapitel 20
Dynamische Programmierung
132
bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G
bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE
Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion
L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj
Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus
132SS 2017 DuA - Kapitel 20
Dynamische Programmierung
Falls die Menge leer ist ist maxhellip=0
133
Beispiel 4 Fahrstuhloptimierung
Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ
Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet
133SS 2017 DuA - Kapitel 20
Dynamische Programmierung
134
bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist
bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)
Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn
Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1
Optimaler Wert mink+1leilef m[ik]
134SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
135
Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen
Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium
Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung
135SS 2017 DuA - Kapitel 20
Dynamische Programmierung
- Foliennummer 1
- Foliennummer 2
- Foliennummer 3
- Foliennummer 4
- Foliennummer 5
- Foliennummer 6
- Foliennummer 7
- Foliennummer 8
- Foliennummer 9
- Foliennummer 10
- Foliennummer 11
- Foliennummer 12
- Foliennummer 13
- Foliennummer 14
- Foliennummer 15
- Foliennummer 16
- Foliennummer 17
- Foliennummer 18
- Foliennummer 19
- Foliennummer 20
- Foliennummer 21
- Foliennummer 22
- Foliennummer 23
- Foliennummer 24
- Foliennummer 25
- Foliennummer 26
- Foliennummer 27
- Foliennummer 28
- Foliennummer 29
- Foliennummer 30
- Foliennummer 31
- Foliennummer 32
- Foliennummer 33
- Foliennummer 34
- Foliennummer 35
- Foliennummer 36
- Foliennummer 37
- Foliennummer 38
- Foliennummer 39
- Foliennummer 40
- Foliennummer 41
- Foliennummer 42
- Foliennummer 43
- Foliennummer 44
- Foliennummer 45
- Foliennummer 46
- Foliennummer 47
- Foliennummer 48
- Foliennummer 49
- Foliennummer 50
- Foliennummer 51
- Foliennummer 52
- Foliennummer 53
- Foliennummer 54
- Foliennummer 55
- Foliennummer 56
- Foliennummer 57
- Foliennummer 58
- Foliennummer 59
- Foliennummer 60
- Foliennummer 61
- Foliennummer 62
- Foliennummer 63
- Foliennummer 64
- Foliennummer 65
- Foliennummer 66
- Foliennummer 67
- Foliennummer 68
- Foliennummer 69
- Foliennummer 70
- Foliennummer 71
- Foliennummer 72
- Foliennummer 73
- Foliennummer 74
- Foliennummer 75
- Foliennummer 76
- Foliennummer 77
- Foliennummer 78
- Foliennummer 79
- Foliennummer 80
- Fraktionales Rucksack-Problem
- Gierige Loumlsung des fraktionalen Rucksack-Problems
- Gieriges Einpacken ist optimal
- Foliennummer 84
- Foliennummer 85
- Foliennummer 86
- Foliennummer 87
- Foliennummer 88
- Foliennummer 89
- Foliennummer 90
- Foliennummer 91
- Foliennummer 92
- Foliennummer 93
- Foliennummer 94
- Foliennummer 95
- Foliennummer 96
- Foliennummer 97
- Foliennummer 98
- Foliennummer 99
- Foliennummer 100
- Foliennummer 101
- Foliennummer 102
- Foliennummer 103
- Foliennummer 104
- Foliennummer 105
- Foliennummer 106
- Foliennummer 107
- Foliennummer 108
- Foliennummer 109
- Foliennummer 110
- Foliennummer 111
- Foliennummer 112
- Foliennummer 113
- Foliennummer 114
- Foliennummer 115
- Foliennummer 116
- Foliennummer 117
- Foliennummer 118
- Foliennummer 119
- Foliennummer 120
- Foliennummer 121
- Foliennummer 122
- Foliennummer 123
- Foliennummer 124
- Foliennummer 125
- Foliennummer 126
- Foliennummer 127
- Foliennummer 128
- Foliennummer 129
- Foliennummer 130
- Foliennummer 131
- Foliennummer 132
- Foliennummer 133
- Foliennummer 134
- Foliennummer 135
-
![Page 121: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/121.jpg)
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von u nach k fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 121
Dynamische Programmierung - APSP
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 122
Dynamische Programmierung - APSP
123
bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt
von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1
ij
kFall (b)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
124
Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten
aus 1hellipk
bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung
d = w falls k=0min ( d d + d ) falls kge1
ij(k)
(k)(k-1) (k-1) (k-1)ij ijij ik kj
(n)ij(n)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
125
Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D
(0)
(k)ij
(n)
(k-1)ij
(k-1)ik
(k-1)kj
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
126
Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung
ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )
2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann
126SS 2017 DuA - Kapitel 20
Dynamische Programmierung
127
Beispiel 1 Matrixketten-Multiplikation
Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist
Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen
Beobachtung bull Sei Aij = AisdothellipsdotAj
bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)
127SS 2017 DuA - Kapitel 20
Dynamische Programmierung
128
bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen
Initialfall m[ii]=0 fuumlr alle iisin1hellipn
Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj
Optimaler Wert m[1n]
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1
128SS 2017 DuA - Kapitel 20
Dynamische Programmierung
129
Beispiel 2 Optimaler binaumlrer Suchbaum
Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1
Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T
(Tiefe der Wurzel ist 0) )
129SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
130
bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj
Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion
m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert
m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus
130SS 2017 DuA - Kapitel 20
Dynamische Programmierung
j
131
Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph
Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw
Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G
131SS 2017 DuA - Kapitel 20
Dynamische Programmierung
132
bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G
bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE
Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion
L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj
Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus
132SS 2017 DuA - Kapitel 20
Dynamische Programmierung
Falls die Menge leer ist ist maxhellip=0
133
Beispiel 4 Fahrstuhloptimierung
Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ
Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet
133SS 2017 DuA - Kapitel 20
Dynamische Programmierung
134
bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist
bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)
Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn
Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1
Optimaler Wert mink+1leilef m[ik]
134SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
135
Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen
Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium
Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung
135SS 2017 DuA - Kapitel 20
Dynamische Programmierung
- Foliennummer 1
- Foliennummer 2
- Foliennummer 3
- Foliennummer 4
- Foliennummer 5
- Foliennummer 6
- Foliennummer 7
- Foliennummer 8
- Foliennummer 9
- Foliennummer 10
- Foliennummer 11
- Foliennummer 12
- Foliennummer 13
- Foliennummer 14
- Foliennummer 15
- Foliennummer 16
- Foliennummer 17
- Foliennummer 18
- Foliennummer 19
- Foliennummer 20
- Foliennummer 21
- Foliennummer 22
- Foliennummer 23
- Foliennummer 24
- Foliennummer 25
- Foliennummer 26
- Foliennummer 27
- Foliennummer 28
- Foliennummer 29
- Foliennummer 30
- Foliennummer 31
- Foliennummer 32
- Foliennummer 33
- Foliennummer 34
- Foliennummer 35
- Foliennummer 36
- Foliennummer 37
- Foliennummer 38
- Foliennummer 39
- Foliennummer 40
- Foliennummer 41
- Foliennummer 42
- Foliennummer 43
- Foliennummer 44
- Foliennummer 45
- Foliennummer 46
- Foliennummer 47
- Foliennummer 48
- Foliennummer 49
- Foliennummer 50
- Foliennummer 51
- Foliennummer 52
- Foliennummer 53
- Foliennummer 54
- Foliennummer 55
- Foliennummer 56
- Foliennummer 57
- Foliennummer 58
- Foliennummer 59
- Foliennummer 60
- Foliennummer 61
- Foliennummer 62
- Foliennummer 63
- Foliennummer 64
- Foliennummer 65
- Foliennummer 66
- Foliennummer 67
- Foliennummer 68
- Foliennummer 69
- Foliennummer 70
- Foliennummer 71
- Foliennummer 72
- Foliennummer 73
- Foliennummer 74
- Foliennummer 75
- Foliennummer 76
- Foliennummer 77
- Foliennummer 78
- Foliennummer 79
- Foliennummer 80
- Fraktionales Rucksack-Problem
- Gierige Loumlsung des fraktionalen Rucksack-Problems
- Gieriges Einpacken ist optimal
- Foliennummer 84
- Foliennummer 85
- Foliennummer 86
- Foliennummer 87
- Foliennummer 88
- Foliennummer 89
- Foliennummer 90
- Foliennummer 91
- Foliennummer 92
- Foliennummer 93
- Foliennummer 94
- Foliennummer 95
- Foliennummer 96
- Foliennummer 97
- Foliennummer 98
- Foliennummer 99
- Foliennummer 100
- Foliennummer 101
- Foliennummer 102
- Foliennummer 103
- Foliennummer 104
- Foliennummer 105
- Foliennummer 106
- Foliennummer 107
- Foliennummer 108
- Foliennummer 109
- Foliennummer 110
- Foliennummer 111
- Foliennummer 112
- Foliennummer 113
- Foliennummer 114
- Foliennummer 115
- Foliennummer 116
- Foliennummer 117
- Foliennummer 118
- Foliennummer 119
- Foliennummer 120
- Foliennummer 121
- Foliennummer 122
- Foliennummer 123
- Foliennummer 124
- Foliennummer 125
- Foliennummer 126
- Foliennummer 127
- Foliennummer 128
- Foliennummer 129
- Foliennummer 130
- Foliennummer 131
- Foliennummer 132
- Foliennummer 133
- Foliennummer 134
- Foliennummer 135
-
![Page 122: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/122.jpg)
Zur Erinnerungbull Sei G ein Graph ohne negative Zyklen und sei j von i aus
erreichbar Dann gibt es einen kuumlrzesten i-j-Weg der keinen Knoten doppelt benutzt
bull Wir koumlnnen also annehmen dass jeder Knoten in jedem Weg maximal einmal vorkommt
bull Betrachte i-j-Weg der nur uumlber Knoten aus 1hellipk laumluft
ij
k
Weg von k nach v fuumlhrt nur uumlber Knoten aus 1hellipk-1
SS 2017 DuA - Kapitel 20 122
Dynamische Programmierung - APSP
123
bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt
von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1
ij
kFall (b)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
124
Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten
aus 1hellipk
bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung
d = w falls k=0min ( d d + d ) falls kge1
ij(k)
(k)(k-1) (k-1) (k-1)ij ijij ik kj
(n)ij(n)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
125
Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D
(0)
(k)ij
(n)
(k-1)ij
(k-1)ik
(k-1)kj
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
126
Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung
ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )
2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann
126SS 2017 DuA - Kapitel 20
Dynamische Programmierung
127
Beispiel 1 Matrixketten-Multiplikation
Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist
Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen
Beobachtung bull Sei Aij = AisdothellipsdotAj
bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)
127SS 2017 DuA - Kapitel 20
Dynamische Programmierung
128
bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen
Initialfall m[ii]=0 fuumlr alle iisin1hellipn
Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj
Optimaler Wert m[1n]
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1
128SS 2017 DuA - Kapitel 20
Dynamische Programmierung
129
Beispiel 2 Optimaler binaumlrer Suchbaum
Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1
Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T
(Tiefe der Wurzel ist 0) )
129SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
130
bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj
Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion
m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert
m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus
130SS 2017 DuA - Kapitel 20
Dynamische Programmierung
j
131
Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph
Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw
Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G
131SS 2017 DuA - Kapitel 20
Dynamische Programmierung
132
bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G
bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE
Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion
L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj
Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus
132SS 2017 DuA - Kapitel 20
Dynamische Programmierung
Falls die Menge leer ist ist maxhellip=0
133
Beispiel 4 Fahrstuhloptimierung
Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ
Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet
133SS 2017 DuA - Kapitel 20
Dynamische Programmierung
134
bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist
bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)
Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn
Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1
Optimaler Wert mink+1leilef m[ik]
134SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
135
Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen
Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium
Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung
135SS 2017 DuA - Kapitel 20
Dynamische Programmierung
- Foliennummer 1
- Foliennummer 2
- Foliennummer 3
- Foliennummer 4
- Foliennummer 5
- Foliennummer 6
- Foliennummer 7
- Foliennummer 8
- Foliennummer 9
- Foliennummer 10
- Foliennummer 11
- Foliennummer 12
- Foliennummer 13
- Foliennummer 14
- Foliennummer 15
- Foliennummer 16
- Foliennummer 17
- Foliennummer 18
- Foliennummer 19
- Foliennummer 20
- Foliennummer 21
- Foliennummer 22
- Foliennummer 23
- Foliennummer 24
- Foliennummer 25
- Foliennummer 26
- Foliennummer 27
- Foliennummer 28
- Foliennummer 29
- Foliennummer 30
- Foliennummer 31
- Foliennummer 32
- Foliennummer 33
- Foliennummer 34
- Foliennummer 35
- Foliennummer 36
- Foliennummer 37
- Foliennummer 38
- Foliennummer 39
- Foliennummer 40
- Foliennummer 41
- Foliennummer 42
- Foliennummer 43
- Foliennummer 44
- Foliennummer 45
- Foliennummer 46
- Foliennummer 47
- Foliennummer 48
- Foliennummer 49
- Foliennummer 50
- Foliennummer 51
- Foliennummer 52
- Foliennummer 53
- Foliennummer 54
- Foliennummer 55
- Foliennummer 56
- Foliennummer 57
- Foliennummer 58
- Foliennummer 59
- Foliennummer 60
- Foliennummer 61
- Foliennummer 62
- Foliennummer 63
- Foliennummer 64
- Foliennummer 65
- Foliennummer 66
- Foliennummer 67
- Foliennummer 68
- Foliennummer 69
- Foliennummer 70
- Foliennummer 71
- Foliennummer 72
- Foliennummer 73
- Foliennummer 74
- Foliennummer 75
- Foliennummer 76
- Foliennummer 77
- Foliennummer 78
- Foliennummer 79
- Foliennummer 80
- Fraktionales Rucksack-Problem
- Gierige Loumlsung des fraktionalen Rucksack-Problems
- Gieriges Einpacken ist optimal
- Foliennummer 84
- Foliennummer 85
- Foliennummer 86
- Foliennummer 87
- Foliennummer 88
- Foliennummer 89
- Foliennummer 90
- Foliennummer 91
- Foliennummer 92
- Foliennummer 93
- Foliennummer 94
- Foliennummer 95
- Foliennummer 96
- Foliennummer 97
- Foliennummer 98
- Foliennummer 99
- Foliennummer 100
- Foliennummer 101
- Foliennummer 102
- Foliennummer 103
- Foliennummer 104
- Foliennummer 105
- Foliennummer 106
- Foliennummer 107
- Foliennummer 108
- Foliennummer 109
- Foliennummer 110
- Foliennummer 111
- Foliennummer 112
- Foliennummer 113
- Foliennummer 114
- Foliennummer 115
- Foliennummer 116
- Foliennummer 117
- Foliennummer 118
- Foliennummer 119
- Foliennummer 120
- Foliennummer 121
- Foliennummer 122
- Foliennummer 123
- Foliennummer 124
- Foliennummer 125
- Foliennummer 126
- Foliennummer 127
- Foliennummer 128
- Foliennummer 129
- Foliennummer 130
- Foliennummer 131
- Foliennummer 132
- Foliennummer 133
- Foliennummer 134
- Foliennummer 135
-
![Page 123: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/123.jpg)
123
bull Kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk istbull (a) kuumlrzester i-j-Weg uumlber Knoten aus 1hellipk-1 oderbull (b) kuumlrzester i-k-Weg uumlber Knoten aus 1hellipk-1 gefolgt
von kuumlrzestem k-j-Weg uumlber Knoten aus 1hellipk-1
ij
kFall (b)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
124
Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten
aus 1hellipk
bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung
d = w falls k=0min ( d d + d ) falls kge1
ij(k)
(k)(k-1) (k-1) (k-1)ij ijij ik kj
(n)ij(n)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
125
Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D
(0)
(k)ij
(n)
(k-1)ij
(k-1)ik
(k-1)kj
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
126
Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung
ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )
2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann
126SS 2017 DuA - Kapitel 20
Dynamische Programmierung
127
Beispiel 1 Matrixketten-Multiplikation
Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist
Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen
Beobachtung bull Sei Aij = AisdothellipsdotAj
bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)
127SS 2017 DuA - Kapitel 20
Dynamische Programmierung
128
bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen
Initialfall m[ii]=0 fuumlr alle iisin1hellipn
Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj
Optimaler Wert m[1n]
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1
128SS 2017 DuA - Kapitel 20
Dynamische Programmierung
129
Beispiel 2 Optimaler binaumlrer Suchbaum
Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1
Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T
(Tiefe der Wurzel ist 0) )
129SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
130
bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj
Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion
m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert
m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus
130SS 2017 DuA - Kapitel 20
Dynamische Programmierung
j
131
Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph
Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw
Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G
131SS 2017 DuA - Kapitel 20
Dynamische Programmierung
132
bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G
bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE
Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion
L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj
Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus
132SS 2017 DuA - Kapitel 20
Dynamische Programmierung
Falls die Menge leer ist ist maxhellip=0
133
Beispiel 4 Fahrstuhloptimierung
Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ
Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet
133SS 2017 DuA - Kapitel 20
Dynamische Programmierung
134
bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist
bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)
Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn
Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1
Optimaler Wert mink+1leilef m[ik]
134SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
135
Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen
Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium
Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung
135SS 2017 DuA - Kapitel 20
Dynamische Programmierung
- Foliennummer 1
- Foliennummer 2
- Foliennummer 3
- Foliennummer 4
- Foliennummer 5
- Foliennummer 6
- Foliennummer 7
- Foliennummer 8
- Foliennummer 9
- Foliennummer 10
- Foliennummer 11
- Foliennummer 12
- Foliennummer 13
- Foliennummer 14
- Foliennummer 15
- Foliennummer 16
- Foliennummer 17
- Foliennummer 18
- Foliennummer 19
- Foliennummer 20
- Foliennummer 21
- Foliennummer 22
- Foliennummer 23
- Foliennummer 24
- Foliennummer 25
- Foliennummer 26
- Foliennummer 27
- Foliennummer 28
- Foliennummer 29
- Foliennummer 30
- Foliennummer 31
- Foliennummer 32
- Foliennummer 33
- Foliennummer 34
- Foliennummer 35
- Foliennummer 36
- Foliennummer 37
- Foliennummer 38
- Foliennummer 39
- Foliennummer 40
- Foliennummer 41
- Foliennummer 42
- Foliennummer 43
- Foliennummer 44
- Foliennummer 45
- Foliennummer 46
- Foliennummer 47
- Foliennummer 48
- Foliennummer 49
- Foliennummer 50
- Foliennummer 51
- Foliennummer 52
- Foliennummer 53
- Foliennummer 54
- Foliennummer 55
- Foliennummer 56
- Foliennummer 57
- Foliennummer 58
- Foliennummer 59
- Foliennummer 60
- Foliennummer 61
- Foliennummer 62
- Foliennummer 63
- Foliennummer 64
- Foliennummer 65
- Foliennummer 66
- Foliennummer 67
- Foliennummer 68
- Foliennummer 69
- Foliennummer 70
- Foliennummer 71
- Foliennummer 72
- Foliennummer 73
- Foliennummer 74
- Foliennummer 75
- Foliennummer 76
- Foliennummer 77
- Foliennummer 78
- Foliennummer 79
- Foliennummer 80
- Fraktionales Rucksack-Problem
- Gierige Loumlsung des fraktionalen Rucksack-Problems
- Gieriges Einpacken ist optimal
- Foliennummer 84
- Foliennummer 85
- Foliennummer 86
- Foliennummer 87
- Foliennummer 88
- Foliennummer 89
- Foliennummer 90
- Foliennummer 91
- Foliennummer 92
- Foliennummer 93
- Foliennummer 94
- Foliennummer 95
- Foliennummer 96
- Foliennummer 97
- Foliennummer 98
- Foliennummer 99
- Foliennummer 100
- Foliennummer 101
- Foliennummer 102
- Foliennummer 103
- Foliennummer 104
- Foliennummer 105
- Foliennummer 106
- Foliennummer 107
- Foliennummer 108
- Foliennummer 109
- Foliennummer 110
- Foliennummer 111
- Foliennummer 112
- Foliennummer 113
- Foliennummer 114
- Foliennummer 115
- Foliennummer 116
- Foliennummer 117
- Foliennummer 118
- Foliennummer 119
- Foliennummer 120
- Foliennummer 121
- Foliennummer 122
- Foliennummer 123
- Foliennummer 124
- Foliennummer 125
- Foliennummer 126
- Foliennummer 127
- Foliennummer 128
- Foliennummer 129
- Foliennummer 130
- Foliennummer 131
- Foliennummer 132
- Foliennummer 133
- Foliennummer 134
- Foliennummer 135
-
![Page 124: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/124.jpg)
124
Die Rekursionbull Sei d die Laumlnge eines kuumlrzesten i-j-Wegs mit Knoten
aus 1hellipk
bull Matrix D =(d ) enthaumllt die gesuchte Loumlsung
d = w falls k=0min ( d d + d ) falls kge1
ij(k)
(k)(k-1) (k-1) (k-1)ij ijij ik kj
(n)ij(n)
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
125
Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D
(0)
(k)ij
(n)
(k-1)ij
(k-1)ik
(k-1)kj
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
126
Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung
ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )
2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann
126SS 2017 DuA - Kapitel 20
Dynamische Programmierung
127
Beispiel 1 Matrixketten-Multiplikation
Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist
Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen
Beobachtung bull Sei Aij = AisdothellipsdotAj
bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)
127SS 2017 DuA - Kapitel 20
Dynamische Programmierung
128
bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen
Initialfall m[ii]=0 fuumlr alle iisin1hellipn
Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj
Optimaler Wert m[1n]
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1
128SS 2017 DuA - Kapitel 20
Dynamische Programmierung
129
Beispiel 2 Optimaler binaumlrer Suchbaum
Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1
Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T
(Tiefe der Wurzel ist 0) )
129SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
130
bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj
Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion
m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert
m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus
130SS 2017 DuA - Kapitel 20
Dynamische Programmierung
j
131
Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph
Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw
Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G
131SS 2017 DuA - Kapitel 20
Dynamische Programmierung
132
bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G
bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE
Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion
L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj
Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus
132SS 2017 DuA - Kapitel 20
Dynamische Programmierung
Falls die Menge leer ist ist maxhellip=0
133
Beispiel 4 Fahrstuhloptimierung
Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ
Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet
133SS 2017 DuA - Kapitel 20
Dynamische Programmierung
134
bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist
bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)
Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn
Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1
Optimaler Wert mink+1leilef m[ik]
134SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
135
Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen
Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium
Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung
135SS 2017 DuA - Kapitel 20
Dynamische Programmierung
- Foliennummer 1
- Foliennummer 2
- Foliennummer 3
- Foliennummer 4
- Foliennummer 5
- Foliennummer 6
- Foliennummer 7
- Foliennummer 8
- Foliennummer 9
- Foliennummer 10
- Foliennummer 11
- Foliennummer 12
- Foliennummer 13
- Foliennummer 14
- Foliennummer 15
- Foliennummer 16
- Foliennummer 17
- Foliennummer 18
- Foliennummer 19
- Foliennummer 20
- Foliennummer 21
- Foliennummer 22
- Foliennummer 23
- Foliennummer 24
- Foliennummer 25
- Foliennummer 26
- Foliennummer 27
- Foliennummer 28
- Foliennummer 29
- Foliennummer 30
- Foliennummer 31
- Foliennummer 32
- Foliennummer 33
- Foliennummer 34
- Foliennummer 35
- Foliennummer 36
- Foliennummer 37
- Foliennummer 38
- Foliennummer 39
- Foliennummer 40
- Foliennummer 41
- Foliennummer 42
- Foliennummer 43
- Foliennummer 44
- Foliennummer 45
- Foliennummer 46
- Foliennummer 47
- Foliennummer 48
- Foliennummer 49
- Foliennummer 50
- Foliennummer 51
- Foliennummer 52
- Foliennummer 53
- Foliennummer 54
- Foliennummer 55
- Foliennummer 56
- Foliennummer 57
- Foliennummer 58
- Foliennummer 59
- Foliennummer 60
- Foliennummer 61
- Foliennummer 62
- Foliennummer 63
- Foliennummer 64
- Foliennummer 65
- Foliennummer 66
- Foliennummer 67
- Foliennummer 68
- Foliennummer 69
- Foliennummer 70
- Foliennummer 71
- Foliennummer 72
- Foliennummer 73
- Foliennummer 74
- Foliennummer 75
- Foliennummer 76
- Foliennummer 77
- Foliennummer 78
- Foliennummer 79
- Foliennummer 80
- Fraktionales Rucksack-Problem
- Gierige Loumlsung des fraktionalen Rucksack-Problems
- Gieriges Einpacken ist optimal
- Foliennummer 84
- Foliennummer 85
- Foliennummer 86
- Foliennummer 87
- Foliennummer 88
- Foliennummer 89
- Foliennummer 90
- Foliennummer 91
- Foliennummer 92
- Foliennummer 93
- Foliennummer 94
- Foliennummer 95
- Foliennummer 96
- Foliennummer 97
- Foliennummer 98
- Foliennummer 99
- Foliennummer 100
- Foliennummer 101
- Foliennummer 102
- Foliennummer 103
- Foliennummer 104
- Foliennummer 105
- Foliennummer 106
- Foliennummer 107
- Foliennummer 108
- Foliennummer 109
- Foliennummer 110
- Foliennummer 111
- Foliennummer 112
- Foliennummer 113
- Foliennummer 114
- Foliennummer 115
- Foliennummer 116
- Foliennummer 117
- Foliennummer 118
- Foliennummer 119
- Foliennummer 120
- Foliennummer 121
- Foliennummer 122
- Foliennummer 123
- Foliennummer 124
- Foliennummer 125
- Foliennummer 126
- Foliennummer 127
- Foliennummer 128
- Foliennummer 129
- Foliennummer 130
- Foliennummer 131
- Foliennummer 132
- Foliennummer 133
- Foliennummer 134
- Foliennummer 135
-
![Page 125: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/125.jpg)
125
Floyd-Warshall(Wn)1 D larr W2 for klarr1 to n do3 for ilarr1 to n do4 for jlarr1 to n do5 d larr min(d d + d )6 return D
(0)
(k)ij
(n)
(k-1)ij
(k-1)ik
(k-1)kj
SS 2017 DuA - Kapitel 20
Dynamische Programmierung - APSP
126
Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung
ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )
2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann
126SS 2017 DuA - Kapitel 20
Dynamische Programmierung
127
Beispiel 1 Matrixketten-Multiplikation
Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist
Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen
Beobachtung bull Sei Aij = AisdothellipsdotAj
bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)
127SS 2017 DuA - Kapitel 20
Dynamische Programmierung
128
bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen
Initialfall m[ii]=0 fuumlr alle iisin1hellipn
Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj
Optimaler Wert m[1n]
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1
128SS 2017 DuA - Kapitel 20
Dynamische Programmierung
129
Beispiel 2 Optimaler binaumlrer Suchbaum
Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1
Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T
(Tiefe der Wurzel ist 0) )
129SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
130
bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj
Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion
m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert
m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus
130SS 2017 DuA - Kapitel 20
Dynamische Programmierung
j
131
Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph
Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw
Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G
131SS 2017 DuA - Kapitel 20
Dynamische Programmierung
132
bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G
bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE
Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion
L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj
Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus
132SS 2017 DuA - Kapitel 20
Dynamische Programmierung
Falls die Menge leer ist ist maxhellip=0
133
Beispiel 4 Fahrstuhloptimierung
Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ
Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet
133SS 2017 DuA - Kapitel 20
Dynamische Programmierung
134
bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist
bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)
Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn
Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1
Optimaler Wert mink+1leilef m[ik]
134SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
135
Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen
Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium
Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung
135SS 2017 DuA - Kapitel 20
Dynamische Programmierung
- Foliennummer 1
- Foliennummer 2
- Foliennummer 3
- Foliennummer 4
- Foliennummer 5
- Foliennummer 6
- Foliennummer 7
- Foliennummer 8
- Foliennummer 9
- Foliennummer 10
- Foliennummer 11
- Foliennummer 12
- Foliennummer 13
- Foliennummer 14
- Foliennummer 15
- Foliennummer 16
- Foliennummer 17
- Foliennummer 18
- Foliennummer 19
- Foliennummer 20
- Foliennummer 21
- Foliennummer 22
- Foliennummer 23
- Foliennummer 24
- Foliennummer 25
- Foliennummer 26
- Foliennummer 27
- Foliennummer 28
- Foliennummer 29
- Foliennummer 30
- Foliennummer 31
- Foliennummer 32
- Foliennummer 33
- Foliennummer 34
- Foliennummer 35
- Foliennummer 36
- Foliennummer 37
- Foliennummer 38
- Foliennummer 39
- Foliennummer 40
- Foliennummer 41
- Foliennummer 42
- Foliennummer 43
- Foliennummer 44
- Foliennummer 45
- Foliennummer 46
- Foliennummer 47
- Foliennummer 48
- Foliennummer 49
- Foliennummer 50
- Foliennummer 51
- Foliennummer 52
- Foliennummer 53
- Foliennummer 54
- Foliennummer 55
- Foliennummer 56
- Foliennummer 57
- Foliennummer 58
- Foliennummer 59
- Foliennummer 60
- Foliennummer 61
- Foliennummer 62
- Foliennummer 63
- Foliennummer 64
- Foliennummer 65
- Foliennummer 66
- Foliennummer 67
- Foliennummer 68
- Foliennummer 69
- Foliennummer 70
- Foliennummer 71
- Foliennummer 72
- Foliennummer 73
- Foliennummer 74
- Foliennummer 75
- Foliennummer 76
- Foliennummer 77
- Foliennummer 78
- Foliennummer 79
- Foliennummer 80
- Fraktionales Rucksack-Problem
- Gierige Loumlsung des fraktionalen Rucksack-Problems
- Gieriges Einpacken ist optimal
- Foliennummer 84
- Foliennummer 85
- Foliennummer 86
- Foliennummer 87
- Foliennummer 88
- Foliennummer 89
- Foliennummer 90
- Foliennummer 91
- Foliennummer 92
- Foliennummer 93
- Foliennummer 94
- Foliennummer 95
- Foliennummer 96
- Foliennummer 97
- Foliennummer 98
- Foliennummer 99
- Foliennummer 100
- Foliennummer 101
- Foliennummer 102
- Foliennummer 103
- Foliennummer 104
- Foliennummer 105
- Foliennummer 106
- Foliennummer 107
- Foliennummer 108
- Foliennummer 109
- Foliennummer 110
- Foliennummer 111
- Foliennummer 112
- Foliennummer 113
- Foliennummer 114
- Foliennummer 115
- Foliennummer 116
- Foliennummer 117
- Foliennummer 118
- Foliennummer 119
- Foliennummer 120
- Foliennummer 121
- Foliennummer 122
- Foliennummer 123
- Foliennummer 124
- Foliennummer 125
- Foliennummer 126
- Foliennummer 127
- Foliennummer 128
- Foliennummer 129
- Foliennummer 130
- Foliennummer 131
- Foliennummer 132
- Foliennummer 133
- Foliennummer 134
- Foliennummer 135
-
![Page 126: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/126.jpg)
126
Generelle Vorgehensweise1 Aufstellung der Rekursionsgleichung
ndash Initialfall (zB OPT(i0)=OPT(0j)=0 )ndash Rekursion (zB OPT(ij)=hellip)ndash Optimaler Wert (zB OPT = OPT(nW) )
2 Formulierung des dynamischen ProgrammsWichtig tabellarische Berechnung so durchfuumlhren dass auf bereits berechnete Werte zuruumlckgegriffen werden kann
126SS 2017 DuA - Kapitel 20
Dynamische Programmierung
127
Beispiel 1 Matrixketten-Multiplikation
Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist
Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen
Beobachtung bull Sei Aij = AisdothellipsdotAj
bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)
127SS 2017 DuA - Kapitel 20
Dynamische Programmierung
128
bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen
Initialfall m[ii]=0 fuumlr alle iisin1hellipn
Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj
Optimaler Wert m[1n]
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1
128SS 2017 DuA - Kapitel 20
Dynamische Programmierung
129
Beispiel 2 Optimaler binaumlrer Suchbaum
Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1
Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T
(Tiefe der Wurzel ist 0) )
129SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
130
bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj
Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion
m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert
m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus
130SS 2017 DuA - Kapitel 20
Dynamische Programmierung
j
131
Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph
Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw
Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G
131SS 2017 DuA - Kapitel 20
Dynamische Programmierung
132
bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G
bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE
Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion
L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj
Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus
132SS 2017 DuA - Kapitel 20
Dynamische Programmierung
Falls die Menge leer ist ist maxhellip=0
133
Beispiel 4 Fahrstuhloptimierung
Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ
Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet
133SS 2017 DuA - Kapitel 20
Dynamische Programmierung
134
bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist
bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)
Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn
Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1
Optimaler Wert mink+1leilef m[ik]
134SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
135
Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen
Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium
Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung
135SS 2017 DuA - Kapitel 20
Dynamische Programmierung
- Foliennummer 1
- Foliennummer 2
- Foliennummer 3
- Foliennummer 4
- Foliennummer 5
- Foliennummer 6
- Foliennummer 7
- Foliennummer 8
- Foliennummer 9
- Foliennummer 10
- Foliennummer 11
- Foliennummer 12
- Foliennummer 13
- Foliennummer 14
- Foliennummer 15
- Foliennummer 16
- Foliennummer 17
- Foliennummer 18
- Foliennummer 19
- Foliennummer 20
- Foliennummer 21
- Foliennummer 22
- Foliennummer 23
- Foliennummer 24
- Foliennummer 25
- Foliennummer 26
- Foliennummer 27
- Foliennummer 28
- Foliennummer 29
- Foliennummer 30
- Foliennummer 31
- Foliennummer 32
- Foliennummer 33
- Foliennummer 34
- Foliennummer 35
- Foliennummer 36
- Foliennummer 37
- Foliennummer 38
- Foliennummer 39
- Foliennummer 40
- Foliennummer 41
- Foliennummer 42
- Foliennummer 43
- Foliennummer 44
- Foliennummer 45
- Foliennummer 46
- Foliennummer 47
- Foliennummer 48
- Foliennummer 49
- Foliennummer 50
- Foliennummer 51
- Foliennummer 52
- Foliennummer 53
- Foliennummer 54
- Foliennummer 55
- Foliennummer 56
- Foliennummer 57
- Foliennummer 58
- Foliennummer 59
- Foliennummer 60
- Foliennummer 61
- Foliennummer 62
- Foliennummer 63
- Foliennummer 64
- Foliennummer 65
- Foliennummer 66
- Foliennummer 67
- Foliennummer 68
- Foliennummer 69
- Foliennummer 70
- Foliennummer 71
- Foliennummer 72
- Foliennummer 73
- Foliennummer 74
- Foliennummer 75
- Foliennummer 76
- Foliennummer 77
- Foliennummer 78
- Foliennummer 79
- Foliennummer 80
- Fraktionales Rucksack-Problem
- Gierige Loumlsung des fraktionalen Rucksack-Problems
- Gieriges Einpacken ist optimal
- Foliennummer 84
- Foliennummer 85
- Foliennummer 86
- Foliennummer 87
- Foliennummer 88
- Foliennummer 89
- Foliennummer 90
- Foliennummer 91
- Foliennummer 92
- Foliennummer 93
- Foliennummer 94
- Foliennummer 95
- Foliennummer 96
- Foliennummer 97
- Foliennummer 98
- Foliennummer 99
- Foliennummer 100
- Foliennummer 101
- Foliennummer 102
- Foliennummer 103
- Foliennummer 104
- Foliennummer 105
- Foliennummer 106
- Foliennummer 107
- Foliennummer 108
- Foliennummer 109
- Foliennummer 110
- Foliennummer 111
- Foliennummer 112
- Foliennummer 113
- Foliennummer 114
- Foliennummer 115
- Foliennummer 116
- Foliennummer 117
- Foliennummer 118
- Foliennummer 119
- Foliennummer 120
- Foliennummer 121
- Foliennummer 122
- Foliennummer 123
- Foliennummer 124
- Foliennummer 125
- Foliennummer 126
- Foliennummer 127
- Foliennummer 128
- Foliennummer 129
- Foliennummer 130
- Foliennummer 131
- Foliennummer 132
- Foliennummer 133
- Foliennummer 134
- Foliennummer 135
-
![Page 127: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/127.jpg)
127
Beispiel 1 Matrixketten-Multiplikation
Gegeben Matrizen A1hellipAn und Werte p0hellippnisinℕ wobei Matrix Ai eine pi-1timespi-Matrix ist
Gesucht Minimale Anzahl an Multiplikationen um A1sdothellipsdotAnzu berechnen
Beobachtung bull Sei Aij = AisdothellipsdotAj
bull Dann kostet das Matrixprodukt Aik sdot Ak+1j pi-1sdotpksdotpj viele Multiplikationen (mit der naiven Methode)
127SS 2017 DuA - Kapitel 20
Dynamische Programmierung
128
bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen
Initialfall m[ii]=0 fuumlr alle iisin1hellipn
Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj
Optimaler Wert m[1n]
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1
128SS 2017 DuA - Kapitel 20
Dynamische Programmierung
129
Beispiel 2 Optimaler binaumlrer Suchbaum
Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1
Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T
(Tiefe der Wurzel ist 0) )
129SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
130
bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj
Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion
m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert
m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus
130SS 2017 DuA - Kapitel 20
Dynamische Programmierung
j
131
Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph
Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw
Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G
131SS 2017 DuA - Kapitel 20
Dynamische Programmierung
132
bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G
bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE
Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion
L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj
Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus
132SS 2017 DuA - Kapitel 20
Dynamische Programmierung
Falls die Menge leer ist ist maxhellip=0
133
Beispiel 4 Fahrstuhloptimierung
Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ
Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet
133SS 2017 DuA - Kapitel 20
Dynamische Programmierung
134
bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist
bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)
Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn
Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1
Optimaler Wert mink+1leilef m[ik]
134SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
135
Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen
Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium
Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung
135SS 2017 DuA - Kapitel 20
Dynamische Programmierung
- Foliennummer 1
- Foliennummer 2
- Foliennummer 3
- Foliennummer 4
- Foliennummer 5
- Foliennummer 6
- Foliennummer 7
- Foliennummer 8
- Foliennummer 9
- Foliennummer 10
- Foliennummer 11
- Foliennummer 12
- Foliennummer 13
- Foliennummer 14
- Foliennummer 15
- Foliennummer 16
- Foliennummer 17
- Foliennummer 18
- Foliennummer 19
- Foliennummer 20
- Foliennummer 21
- Foliennummer 22
- Foliennummer 23
- Foliennummer 24
- Foliennummer 25
- Foliennummer 26
- Foliennummer 27
- Foliennummer 28
- Foliennummer 29
- Foliennummer 30
- Foliennummer 31
- Foliennummer 32
- Foliennummer 33
- Foliennummer 34
- Foliennummer 35
- Foliennummer 36
- Foliennummer 37
- Foliennummer 38
- Foliennummer 39
- Foliennummer 40
- Foliennummer 41
- Foliennummer 42
- Foliennummer 43
- Foliennummer 44
- Foliennummer 45
- Foliennummer 46
- Foliennummer 47
- Foliennummer 48
- Foliennummer 49
- Foliennummer 50
- Foliennummer 51
- Foliennummer 52
- Foliennummer 53
- Foliennummer 54
- Foliennummer 55
- Foliennummer 56
- Foliennummer 57
- Foliennummer 58
- Foliennummer 59
- Foliennummer 60
- Foliennummer 61
- Foliennummer 62
- Foliennummer 63
- Foliennummer 64
- Foliennummer 65
- Foliennummer 66
- Foliennummer 67
- Foliennummer 68
- Foliennummer 69
- Foliennummer 70
- Foliennummer 71
- Foliennummer 72
- Foliennummer 73
- Foliennummer 74
- Foliennummer 75
- Foliennummer 76
- Foliennummer 77
- Foliennummer 78
- Foliennummer 79
- Foliennummer 80
- Fraktionales Rucksack-Problem
- Gierige Loumlsung des fraktionalen Rucksack-Problems
- Gieriges Einpacken ist optimal
- Foliennummer 84
- Foliennummer 85
- Foliennummer 86
- Foliennummer 87
- Foliennummer 88
- Foliennummer 89
- Foliennummer 90
- Foliennummer 91
- Foliennummer 92
- Foliennummer 93
- Foliennummer 94
- Foliennummer 95
- Foliennummer 96
- Foliennummer 97
- Foliennummer 98
- Foliennummer 99
- Foliennummer 100
- Foliennummer 101
- Foliennummer 102
- Foliennummer 103
- Foliennummer 104
- Foliennummer 105
- Foliennummer 106
- Foliennummer 107
- Foliennummer 108
- Foliennummer 109
- Foliennummer 110
- Foliennummer 111
- Foliennummer 112
- Foliennummer 113
- Foliennummer 114
- Foliennummer 115
- Foliennummer 116
- Foliennummer 117
- Foliennummer 118
- Foliennummer 119
- Foliennummer 120
- Foliennummer 121
- Foliennummer 122
- Foliennummer 123
- Foliennummer 124
- Foliennummer 125
- Foliennummer 126
- Foliennummer 127
- Foliennummer 128
- Foliennummer 129
- Foliennummer 130
- Foliennummer 131
- Foliennummer 132
- Foliennummer 133
- Foliennummer 134
- Foliennummer 135
-
![Page 128: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/128.jpg)
128
bull m[ij] minimale Anzahl an Multiplikationen um Aij zu berechnen
Initialfall m[ii]=0 fuumlr alle iisin1hellipn
Rekursionm[ij] = minilekltj m[ik] + m[k+1j] + pi-1sdotpksdotpj fuumlr alle iltj
Optimaler Wert m[1n]
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1
128SS 2017 DuA - Kapitel 20
Dynamische Programmierung
129
Beispiel 2 Optimaler binaumlrer Suchbaum
Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1
Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T
(Tiefe der Wurzel ist 0) )
129SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
130
bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj
Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion
m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert
m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus
130SS 2017 DuA - Kapitel 20
Dynamische Programmierung
j
131
Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph
Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw
Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G
131SS 2017 DuA - Kapitel 20
Dynamische Programmierung
132
bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G
bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE
Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion
L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj
Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus
132SS 2017 DuA - Kapitel 20
Dynamische Programmierung
Falls die Menge leer ist ist maxhellip=0
133
Beispiel 4 Fahrstuhloptimierung
Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ
Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet
133SS 2017 DuA - Kapitel 20
Dynamische Programmierung
134
bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist
bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)
Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn
Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1
Optimaler Wert mink+1leilef m[ik]
134SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
135
Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen
Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium
Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung
135SS 2017 DuA - Kapitel 20
Dynamische Programmierung
- Foliennummer 1
- Foliennummer 2
- Foliennummer 3
- Foliennummer 4
- Foliennummer 5
- Foliennummer 6
- Foliennummer 7
- Foliennummer 8
- Foliennummer 9
- Foliennummer 10
- Foliennummer 11
- Foliennummer 12
- Foliennummer 13
- Foliennummer 14
- Foliennummer 15
- Foliennummer 16
- Foliennummer 17
- Foliennummer 18
- Foliennummer 19
- Foliennummer 20
- Foliennummer 21
- Foliennummer 22
- Foliennummer 23
- Foliennummer 24
- Foliennummer 25
- Foliennummer 26
- Foliennummer 27
- Foliennummer 28
- Foliennummer 29
- Foliennummer 30
- Foliennummer 31
- Foliennummer 32
- Foliennummer 33
- Foliennummer 34
- Foliennummer 35
- Foliennummer 36
- Foliennummer 37
- Foliennummer 38
- Foliennummer 39
- Foliennummer 40
- Foliennummer 41
- Foliennummer 42
- Foliennummer 43
- Foliennummer 44
- Foliennummer 45
- Foliennummer 46
- Foliennummer 47
- Foliennummer 48
- Foliennummer 49
- Foliennummer 50
- Foliennummer 51
- Foliennummer 52
- Foliennummer 53
- Foliennummer 54
- Foliennummer 55
- Foliennummer 56
- Foliennummer 57
- Foliennummer 58
- Foliennummer 59
- Foliennummer 60
- Foliennummer 61
- Foliennummer 62
- Foliennummer 63
- Foliennummer 64
- Foliennummer 65
- Foliennummer 66
- Foliennummer 67
- Foliennummer 68
- Foliennummer 69
- Foliennummer 70
- Foliennummer 71
- Foliennummer 72
- Foliennummer 73
- Foliennummer 74
- Foliennummer 75
- Foliennummer 76
- Foliennummer 77
- Foliennummer 78
- Foliennummer 79
- Foliennummer 80
- Fraktionales Rucksack-Problem
- Gierige Loumlsung des fraktionalen Rucksack-Problems
- Gieriges Einpacken ist optimal
- Foliennummer 84
- Foliennummer 85
- Foliennummer 86
- Foliennummer 87
- Foliennummer 88
- Foliennummer 89
- Foliennummer 90
- Foliennummer 91
- Foliennummer 92
- Foliennummer 93
- Foliennummer 94
- Foliennummer 95
- Foliennummer 96
- Foliennummer 97
- Foliennummer 98
- Foliennummer 99
- Foliennummer 100
- Foliennummer 101
- Foliennummer 102
- Foliennummer 103
- Foliennummer 104
- Foliennummer 105
- Foliennummer 106
- Foliennummer 107
- Foliennummer 108
- Foliennummer 109
- Foliennummer 110
- Foliennummer 111
- Foliennummer 112
- Foliennummer 113
- Foliennummer 114
- Foliennummer 115
- Foliennummer 116
- Foliennummer 117
- Foliennummer 118
- Foliennummer 119
- Foliennummer 120
- Foliennummer 121
- Foliennummer 122
- Foliennummer 123
- Foliennummer 124
- Foliennummer 125
- Foliennummer 126
- Foliennummer 127
- Foliennummer 128
- Foliennummer 129
- Foliennummer 130
- Foliennummer 131
- Foliennummer 132
- Foliennummer 133
- Foliennummer 134
- Foliennummer 135
-
![Page 129: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/129.jpg)
129
Beispiel 2 Optimaler binaumlrer Suchbaum
Gegeben Schluumlssel k1hellipkn mit Zugriffswahrscheinlich-keiten p1hellippnisin[01] so dass Σi=1 pi = 1
Gesucht Binaumlrer Suchbaum T mit minimaler erwarteter Suchzeit dh Σi=1 pi sdot(TiefeT(ki)+1) ist minimal (TiefeT(k) Tiefe des Knotens mit Schluumlssel k in T
(Tiefe der Wurzel ist 0) )
129SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
130
bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj
Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion
m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert
m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus
130SS 2017 DuA - Kapitel 20
Dynamische Programmierung
j
131
Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph
Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw
Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G
131SS 2017 DuA - Kapitel 20
Dynamische Programmierung
132
bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G
bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE
Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion
L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj
Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus
132SS 2017 DuA - Kapitel 20
Dynamische Programmierung
Falls die Menge leer ist ist maxhellip=0
133
Beispiel 4 Fahrstuhloptimierung
Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ
Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet
133SS 2017 DuA - Kapitel 20
Dynamische Programmierung
134
bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist
bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)
Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn
Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1
Optimaler Wert mink+1leilef m[ik]
134SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
135
Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen
Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium
Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung
135SS 2017 DuA - Kapitel 20
Dynamische Programmierung
- Foliennummer 1
- Foliennummer 2
- Foliennummer 3
- Foliennummer 4
- Foliennummer 5
- Foliennummer 6
- Foliennummer 7
- Foliennummer 8
- Foliennummer 9
- Foliennummer 10
- Foliennummer 11
- Foliennummer 12
- Foliennummer 13
- Foliennummer 14
- Foliennummer 15
- Foliennummer 16
- Foliennummer 17
- Foliennummer 18
- Foliennummer 19
- Foliennummer 20
- Foliennummer 21
- Foliennummer 22
- Foliennummer 23
- Foliennummer 24
- Foliennummer 25
- Foliennummer 26
- Foliennummer 27
- Foliennummer 28
- Foliennummer 29
- Foliennummer 30
- Foliennummer 31
- Foliennummer 32
- Foliennummer 33
- Foliennummer 34
- Foliennummer 35
- Foliennummer 36
- Foliennummer 37
- Foliennummer 38
- Foliennummer 39
- Foliennummer 40
- Foliennummer 41
- Foliennummer 42
- Foliennummer 43
- Foliennummer 44
- Foliennummer 45
- Foliennummer 46
- Foliennummer 47
- Foliennummer 48
- Foliennummer 49
- Foliennummer 50
- Foliennummer 51
- Foliennummer 52
- Foliennummer 53
- Foliennummer 54
- Foliennummer 55
- Foliennummer 56
- Foliennummer 57
- Foliennummer 58
- Foliennummer 59
- Foliennummer 60
- Foliennummer 61
- Foliennummer 62
- Foliennummer 63
- Foliennummer 64
- Foliennummer 65
- Foliennummer 66
- Foliennummer 67
- Foliennummer 68
- Foliennummer 69
- Foliennummer 70
- Foliennummer 71
- Foliennummer 72
- Foliennummer 73
- Foliennummer 74
- Foliennummer 75
- Foliennummer 76
- Foliennummer 77
- Foliennummer 78
- Foliennummer 79
- Foliennummer 80
- Fraktionales Rucksack-Problem
- Gierige Loumlsung des fraktionalen Rucksack-Problems
- Gieriges Einpacken ist optimal
- Foliennummer 84
- Foliennummer 85
- Foliennummer 86
- Foliennummer 87
- Foliennummer 88
- Foliennummer 89
- Foliennummer 90
- Foliennummer 91
- Foliennummer 92
- Foliennummer 93
- Foliennummer 94
- Foliennummer 95
- Foliennummer 96
- Foliennummer 97
- Foliennummer 98
- Foliennummer 99
- Foliennummer 100
- Foliennummer 101
- Foliennummer 102
- Foliennummer 103
- Foliennummer 104
- Foliennummer 105
- Foliennummer 106
- Foliennummer 107
- Foliennummer 108
- Foliennummer 109
- Foliennummer 110
- Foliennummer 111
- Foliennummer 112
- Foliennummer 113
- Foliennummer 114
- Foliennummer 115
- Foliennummer 116
- Foliennummer 117
- Foliennummer 118
- Foliennummer 119
- Foliennummer 120
- Foliennummer 121
- Foliennummer 122
- Foliennummer 123
- Foliennummer 124
- Foliennummer 125
- Foliennummer 126
- Foliennummer 127
- Foliennummer 128
- Foliennummer 129
- Foliennummer 130
- Foliennummer 131
- Foliennummer 132
- Foliennummer 133
- Foliennummer 134
- Foliennummer 135
-
![Page 130: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/130.jpg)
130
bull m[ij] minimale erwartete Suchzeit fuumlr einen Binaumlrbaum mit den Schluumlsseln ki bis kj
Initialfall bull m[ii-1]=0 fuumlr alle iisin1hellipnbull m[ii]=pi fuumlr alle iisin1hellipnRekursion
m[ij] = minileklej m[ik-1] + m[k+1j] + Σl=i pl fuumlr alle iltjOptimaler Wert
m[1n]Berechnungbull Fuumlhre erst Initialfall ausbull Berechne m[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende m[1n] aus
130SS 2017 DuA - Kapitel 20
Dynamische Programmierung
j
131
Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph
Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw
Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G
131SS 2017 DuA - Kapitel 20
Dynamische Programmierung
132
bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G
bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE
Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion
L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj
Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus
132SS 2017 DuA - Kapitel 20
Dynamische Programmierung
Falls die Menge leer ist ist maxhellip=0
133
Beispiel 4 Fahrstuhloptimierung
Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ
Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet
133SS 2017 DuA - Kapitel 20
Dynamische Programmierung
134
bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist
bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)
Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn
Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1
Optimaler Wert mink+1leilef m[ik]
134SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
135
Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen
Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium
Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung
135SS 2017 DuA - Kapitel 20
Dynamische Programmierung
- Foliennummer 1
- Foliennummer 2
- Foliennummer 3
- Foliennummer 4
- Foliennummer 5
- Foliennummer 6
- Foliennummer 7
- Foliennummer 8
- Foliennummer 9
- Foliennummer 10
- Foliennummer 11
- Foliennummer 12
- Foliennummer 13
- Foliennummer 14
- Foliennummer 15
- Foliennummer 16
- Foliennummer 17
- Foliennummer 18
- Foliennummer 19
- Foliennummer 20
- Foliennummer 21
- Foliennummer 22
- Foliennummer 23
- Foliennummer 24
- Foliennummer 25
- Foliennummer 26
- Foliennummer 27
- Foliennummer 28
- Foliennummer 29
- Foliennummer 30
- Foliennummer 31
- Foliennummer 32
- Foliennummer 33
- Foliennummer 34
- Foliennummer 35
- Foliennummer 36
- Foliennummer 37
- Foliennummer 38
- Foliennummer 39
- Foliennummer 40
- Foliennummer 41
- Foliennummer 42
- Foliennummer 43
- Foliennummer 44
- Foliennummer 45
- Foliennummer 46
- Foliennummer 47
- Foliennummer 48
- Foliennummer 49
- Foliennummer 50
- Foliennummer 51
- Foliennummer 52
- Foliennummer 53
- Foliennummer 54
- Foliennummer 55
- Foliennummer 56
- Foliennummer 57
- Foliennummer 58
- Foliennummer 59
- Foliennummer 60
- Foliennummer 61
- Foliennummer 62
- Foliennummer 63
- Foliennummer 64
- Foliennummer 65
- Foliennummer 66
- Foliennummer 67
- Foliennummer 68
- Foliennummer 69
- Foliennummer 70
- Foliennummer 71
- Foliennummer 72
- Foliennummer 73
- Foliennummer 74
- Foliennummer 75
- Foliennummer 76
- Foliennummer 77
- Foliennummer 78
- Foliennummer 79
- Foliennummer 80
- Fraktionales Rucksack-Problem
- Gierige Loumlsung des fraktionalen Rucksack-Problems
- Gieriges Einpacken ist optimal
- Foliennummer 84
- Foliennummer 85
- Foliennummer 86
- Foliennummer 87
- Foliennummer 88
- Foliennummer 89
- Foliennummer 90
- Foliennummer 91
- Foliennummer 92
- Foliennummer 93
- Foliennummer 94
- Foliennummer 95
- Foliennummer 96
- Foliennummer 97
- Foliennummer 98
- Foliennummer 99
- Foliennummer 100
- Foliennummer 101
- Foliennummer 102
- Foliennummer 103
- Foliennummer 104
- Foliennummer 105
- Foliennummer 106
- Foliennummer 107
- Foliennummer 108
- Foliennummer 109
- Foliennummer 110
- Foliennummer 111
- Foliennummer 112
- Foliennummer 113
- Foliennummer 114
- Foliennummer 115
- Foliennummer 116
- Foliennummer 117
- Foliennummer 118
- Foliennummer 119
- Foliennummer 120
- Foliennummer 121
- Foliennummer 122
- Foliennummer 123
- Foliennummer 124
- Foliennummer 125
- Foliennummer 126
- Foliennummer 127
- Foliennummer 128
- Foliennummer 129
- Foliennummer 130
- Foliennummer 131
- Foliennummer 132
- Foliennummer 133
- Foliennummer 134
- Foliennummer 135
-
![Page 131: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/131.jpg)
131
Beispiel 3 Laumlngster einfacher Weg in einem gerichteten azyklischen Graph
Gegeben Gerichteter azyklischer Graph G=(VE) mit V=1hellipn wobei die Knoten gemaumlszlig ihrer Nummern topologisch sortiert sind dh fuumlr alle (vw)isinE gilt vltw
Gesucht Laumlnge des laumlngsten einfachen (dh kreisfreien) Weges in G
131SS 2017 DuA - Kapitel 20
Dynamische Programmierung
132
bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G
bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE
Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion
L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj
Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus
132SS 2017 DuA - Kapitel 20
Dynamische Programmierung
Falls die Menge leer ist ist maxhellip=0
133
Beispiel 4 Fahrstuhloptimierung
Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ
Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet
133SS 2017 DuA - Kapitel 20
Dynamische Programmierung
134
bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist
bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)
Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn
Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1
Optimaler Wert mink+1leilef m[ik]
134SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
135
Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen
Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium
Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung
135SS 2017 DuA - Kapitel 20
Dynamische Programmierung
- Foliennummer 1
- Foliennummer 2
- Foliennummer 3
- Foliennummer 4
- Foliennummer 5
- Foliennummer 6
- Foliennummer 7
- Foliennummer 8
- Foliennummer 9
- Foliennummer 10
- Foliennummer 11
- Foliennummer 12
- Foliennummer 13
- Foliennummer 14
- Foliennummer 15
- Foliennummer 16
- Foliennummer 17
- Foliennummer 18
- Foliennummer 19
- Foliennummer 20
- Foliennummer 21
- Foliennummer 22
- Foliennummer 23
- Foliennummer 24
- Foliennummer 25
- Foliennummer 26
- Foliennummer 27
- Foliennummer 28
- Foliennummer 29
- Foliennummer 30
- Foliennummer 31
- Foliennummer 32
- Foliennummer 33
- Foliennummer 34
- Foliennummer 35
- Foliennummer 36
- Foliennummer 37
- Foliennummer 38
- Foliennummer 39
- Foliennummer 40
- Foliennummer 41
- Foliennummer 42
- Foliennummer 43
- Foliennummer 44
- Foliennummer 45
- Foliennummer 46
- Foliennummer 47
- Foliennummer 48
- Foliennummer 49
- Foliennummer 50
- Foliennummer 51
- Foliennummer 52
- Foliennummer 53
- Foliennummer 54
- Foliennummer 55
- Foliennummer 56
- Foliennummer 57
- Foliennummer 58
- Foliennummer 59
- Foliennummer 60
- Foliennummer 61
- Foliennummer 62
- Foliennummer 63
- Foliennummer 64
- Foliennummer 65
- Foliennummer 66
- Foliennummer 67
- Foliennummer 68
- Foliennummer 69
- Foliennummer 70
- Foliennummer 71
- Foliennummer 72
- Foliennummer 73
- Foliennummer 74
- Foliennummer 75
- Foliennummer 76
- Foliennummer 77
- Foliennummer 78
- Foliennummer 79
- Foliennummer 80
- Fraktionales Rucksack-Problem
- Gierige Loumlsung des fraktionalen Rucksack-Problems
- Gieriges Einpacken ist optimal
- Foliennummer 84
- Foliennummer 85
- Foliennummer 86
- Foliennummer 87
- Foliennummer 88
- Foliennummer 89
- Foliennummer 90
- Foliennummer 91
- Foliennummer 92
- Foliennummer 93
- Foliennummer 94
- Foliennummer 95
- Foliennummer 96
- Foliennummer 97
- Foliennummer 98
- Foliennummer 99
- Foliennummer 100
- Foliennummer 101
- Foliennummer 102
- Foliennummer 103
- Foliennummer 104
- Foliennummer 105
- Foliennummer 106
- Foliennummer 107
- Foliennummer 108
- Foliennummer 109
- Foliennummer 110
- Foliennummer 111
- Foliennummer 112
- Foliennummer 113
- Foliennummer 114
- Foliennummer 115
- Foliennummer 116
- Foliennummer 117
- Foliennummer 118
- Foliennummer 119
- Foliennummer 120
- Foliennummer 121
- Foliennummer 122
- Foliennummer 123
- Foliennummer 124
- Foliennummer 125
- Foliennummer 126
- Foliennummer 127
- Foliennummer 128
- Foliennummer 129
- Foliennummer 130
- Foliennummer 131
- Foliennummer 132
- Foliennummer 133
- Foliennummer 134
- Foliennummer 135
-
![Page 132: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/132.jpg)
132
bull L[ij] Laumlnge des laumlngsten einfachen Weges von Knoten i nach Knoten j in G
bull A[ij]isin01 ist 1 genau dann wenn (ij)isinE
Initialfall bull L[ii]=0 fuumlr alle iisin1hellipnRekursion
L[ij] = max maxL[ik] + L[kj] | iltkltj und L[ik]gt0 und L[kj]gt0 A[ij] fuumlr alle iltj
Optimaler Wert maxiltj L[ij] (=0 es gibt keine Kanten in G)
Berechnungbull Fuumlhre erst Initialfall ausbull Berechne L[ij] fuumlr alle iltj mit |j-i|=d angefangen mit d=1bull Gib am Ende maxiltj L[ij] aus
132SS 2017 DuA - Kapitel 20
Dynamische Programmierung
Falls die Menge leer ist ist maxhellip=0
133
Beispiel 4 Fahrstuhloptimierung
Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ
Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet
133SS 2017 DuA - Kapitel 20
Dynamische Programmierung
134
bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist
bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)
Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn
Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1
Optimaler Wert mink+1leilef m[ik]
134SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
135
Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen
Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium
Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung
135SS 2017 DuA - Kapitel 20
Dynamische Programmierung
- Foliennummer 1
- Foliennummer 2
- Foliennummer 3
- Foliennummer 4
- Foliennummer 5
- Foliennummer 6
- Foliennummer 7
- Foliennummer 8
- Foliennummer 9
- Foliennummer 10
- Foliennummer 11
- Foliennummer 12
- Foliennummer 13
- Foliennummer 14
- Foliennummer 15
- Foliennummer 16
- Foliennummer 17
- Foliennummer 18
- Foliennummer 19
- Foliennummer 20
- Foliennummer 21
- Foliennummer 22
- Foliennummer 23
- Foliennummer 24
- Foliennummer 25
- Foliennummer 26
- Foliennummer 27
- Foliennummer 28
- Foliennummer 29
- Foliennummer 30
- Foliennummer 31
- Foliennummer 32
- Foliennummer 33
- Foliennummer 34
- Foliennummer 35
- Foliennummer 36
- Foliennummer 37
- Foliennummer 38
- Foliennummer 39
- Foliennummer 40
- Foliennummer 41
- Foliennummer 42
- Foliennummer 43
- Foliennummer 44
- Foliennummer 45
- Foliennummer 46
- Foliennummer 47
- Foliennummer 48
- Foliennummer 49
- Foliennummer 50
- Foliennummer 51
- Foliennummer 52
- Foliennummer 53
- Foliennummer 54
- Foliennummer 55
- Foliennummer 56
- Foliennummer 57
- Foliennummer 58
- Foliennummer 59
- Foliennummer 60
- Foliennummer 61
- Foliennummer 62
- Foliennummer 63
- Foliennummer 64
- Foliennummer 65
- Foliennummer 66
- Foliennummer 67
- Foliennummer 68
- Foliennummer 69
- Foliennummer 70
- Foliennummer 71
- Foliennummer 72
- Foliennummer 73
- Foliennummer 74
- Foliennummer 75
- Foliennummer 76
- Foliennummer 77
- Foliennummer 78
- Foliennummer 79
- Foliennummer 80
- Fraktionales Rucksack-Problem
- Gierige Loumlsung des fraktionalen Rucksack-Problems
- Gieriges Einpacken ist optimal
- Foliennummer 84
- Foliennummer 85
- Foliennummer 86
- Foliennummer 87
- Foliennummer 88
- Foliennummer 89
- Foliennummer 90
- Foliennummer 91
- Foliennummer 92
- Foliennummer 93
- Foliennummer 94
- Foliennummer 95
- Foliennummer 96
- Foliennummer 97
- Foliennummer 98
- Foliennummer 99
- Foliennummer 100
- Foliennummer 101
- Foliennummer 102
- Foliennummer 103
- Foliennummer 104
- Foliennummer 105
- Foliennummer 106
- Foliennummer 107
- Foliennummer 108
- Foliennummer 109
- Foliennummer 110
- Foliennummer 111
- Foliennummer 112
- Foliennummer 113
- Foliennummer 114
- Foliennummer 115
- Foliennummer 116
- Foliennummer 117
- Foliennummer 118
- Foliennummer 119
- Foliennummer 120
- Foliennummer 121
- Foliennummer 122
- Foliennummer 123
- Foliennummer 124
- Foliennummer 125
- Foliennummer 126
- Foliennummer 127
- Foliennummer 128
- Foliennummer 129
- Foliennummer 130
- Foliennummer 131
- Foliennummer 132
- Foliennummer 133
- Foliennummer 134
- Foliennummer 135
-
![Page 133: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/133.jpg)
133
Beispiel 4 Fahrstuhloptimierung
Gegeben Flure f1hellipfnisinℕ bei denen die n Kunden aussteigen wollen (f1lehelliplefn) und maximale Anzahl Haltepunkte kisinℕ
Gesucht Minimale Anzahl an Fluren die die Kunden bei maximal k Haltepunkten zu Fuszlig gehen muumlssen um ihren Zielflur zu erreichen wenn der Fahrstuhl bei Flur 1startet
133SS 2017 DuA - Kapitel 20
Dynamische Programmierung
134
bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist
bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)
Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn
Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1
Optimaler Wert mink+1leilef m[ik]
134SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
135
Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen
Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium
Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung
135SS 2017 DuA - Kapitel 20
Dynamische Programmierung
- Foliennummer 1
- Foliennummer 2
- Foliennummer 3
- Foliennummer 4
- Foliennummer 5
- Foliennummer 6
- Foliennummer 7
- Foliennummer 8
- Foliennummer 9
- Foliennummer 10
- Foliennummer 11
- Foliennummer 12
- Foliennummer 13
- Foliennummer 14
- Foliennummer 15
- Foliennummer 16
- Foliennummer 17
- Foliennummer 18
- Foliennummer 19
- Foliennummer 20
- Foliennummer 21
- Foliennummer 22
- Foliennummer 23
- Foliennummer 24
- Foliennummer 25
- Foliennummer 26
- Foliennummer 27
- Foliennummer 28
- Foliennummer 29
- Foliennummer 30
- Foliennummer 31
- Foliennummer 32
- Foliennummer 33
- Foliennummer 34
- Foliennummer 35
- Foliennummer 36
- Foliennummer 37
- Foliennummer 38
- Foliennummer 39
- Foliennummer 40
- Foliennummer 41
- Foliennummer 42
- Foliennummer 43
- Foliennummer 44
- Foliennummer 45
- Foliennummer 46
- Foliennummer 47
- Foliennummer 48
- Foliennummer 49
- Foliennummer 50
- Foliennummer 51
- Foliennummer 52
- Foliennummer 53
- Foliennummer 54
- Foliennummer 55
- Foliennummer 56
- Foliennummer 57
- Foliennummer 58
- Foliennummer 59
- Foliennummer 60
- Foliennummer 61
- Foliennummer 62
- Foliennummer 63
- Foliennummer 64
- Foliennummer 65
- Foliennummer 66
- Foliennummer 67
- Foliennummer 68
- Foliennummer 69
- Foliennummer 70
- Foliennummer 71
- Foliennummer 72
- Foliennummer 73
- Foliennummer 74
- Foliennummer 75
- Foliennummer 76
- Foliennummer 77
- Foliennummer 78
- Foliennummer 79
- Foliennummer 80
- Fraktionales Rucksack-Problem
- Gierige Loumlsung des fraktionalen Rucksack-Problems
- Gieriges Einpacken ist optimal
- Foliennummer 84
- Foliennummer 85
- Foliennummer 86
- Foliennummer 87
- Foliennummer 88
- Foliennummer 89
- Foliennummer 90
- Foliennummer 91
- Foliennummer 92
- Foliennummer 93
- Foliennummer 94
- Foliennummer 95
- Foliennummer 96
- Foliennummer 97
- Foliennummer 98
- Foliennummer 99
- Foliennummer 100
- Foliennummer 101
- Foliennummer 102
- Foliennummer 103
- Foliennummer 104
- Foliennummer 105
- Foliennummer 106
- Foliennummer 107
- Foliennummer 108
- Foliennummer 109
- Foliennummer 110
- Foliennummer 111
- Foliennummer 112
- Foliennummer 113
- Foliennummer 114
- Foliennummer 115
- Foliennummer 116
- Foliennummer 117
- Foliennummer 118
- Foliennummer 119
- Foliennummer 120
- Foliennummer 121
- Foliennummer 122
- Foliennummer 123
- Foliennummer 124
- Foliennummer 125
- Foliennummer 126
- Foliennummer 127
- Foliennummer 128
- Foliennummer 129
- Foliennummer 130
- Foliennummer 131
- Foliennummer 132
- Foliennummer 133
- Foliennummer 134
- Foliennummer 135
-
![Page 134: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/134.jpg)
134
bull m[ij] minimale Anzahl an Fluren die die Kunden zu Fuszlig gehen muumlssen wenn der Fahrstuhl genau j-mal haumllt und der houmlchste Halt Flur i ist
bull flure[ij] Minimale Anzahl an Fluren die Kunden mit Aussteige-wunsch f mit ilefltj laufen muumlssen wenn der Fahrstuhl nur bei Flur iund j aber nicht dazwischen haumllt (Kann direkt berechnet werden)
Initialfall m[i1] = flure[1i]+flure[iinfin] fuumlr alle iisin2hellipfn
Rekursionm[ij+1] = minj+1lellti m[lj]-flure[linfin]+flure[li]+flure[iinfin] fuumlr alle igtj+1 jge1
Optimaler Wert mink+1leilef m[ik]
134SS 2017 DuA - Kapitel 20
Dynamische Programmierung
n
135
Teile amp Herrschebull Aufteilen der Eingabe in mehrere Unterproblemebull Rekursives loumlsen der Unterproblemebull Zusammenfuumlgen
Gierige Algorithmenbull Konstruiere Loumlsung Schritt fuumlr Schrittbull In jedem Schritt optimiere einfaches lokales Kriterium
Dynamische Programmierungbull Formuliere Problem rekursivbull Vermeide mehrfache Berechnung von Teilergebnissenbull Verwende bdquobottom-upldquo Implementierung
135SS 2017 DuA - Kapitel 20
Dynamische Programmierung
- Foliennummer 1
- Foliennummer 2
- Foliennummer 3
- Foliennummer 4
- Foliennummer 5
- Foliennummer 6
- Foliennummer 7
- Foliennummer 8
- Foliennummer 9
- Foliennummer 10
- Foliennummer 11
- Foliennummer 12
- Foliennummer 13
- Foliennummer 14
- Foliennummer 15
- Foliennummer 16
- Foliennummer 17
- Foliennummer 18
- Foliennummer 19
- Foliennummer 20
- Foliennummer 21
- Foliennummer 22
- Foliennummer 23
- Foliennummer 24
- Foliennummer 25
- Foliennummer 26
- Foliennummer 27
- Foliennummer 28
- Foliennummer 29
- Foliennummer 30
- Foliennummer 31
- Foliennummer 32
- Foliennummer 33
- Foliennummer 34
- Foliennummer 35
- Foliennummer 36
- Foliennummer 37
- Foliennummer 38
- Foliennummer 39
- Foliennummer 40
- Foliennummer 41
- Foliennummer 42
- Foliennummer 43
- Foliennummer 44
- Foliennummer 45
- Foliennummer 46
- Foliennummer 47
- Foliennummer 48
- Foliennummer 49
- Foliennummer 50
- Foliennummer 51
- Foliennummer 52
- Foliennummer 53
- Foliennummer 54
- Foliennummer 55
- Foliennummer 56
- Foliennummer 57
- Foliennummer 58
- Foliennummer 59
- Foliennummer 60
- Foliennummer 61
- Foliennummer 62
- Foliennummer 63
- Foliennummer 64
- Foliennummer 65
- Foliennummer 66
- Foliennummer 67
- Foliennummer 68
- Foliennummer 69
- Foliennummer 70
- Foliennummer 71
- Foliennummer 72
- Foliennummer 73
- Foliennummer 74
- Foliennummer 75
- Foliennummer 76
- Foliennummer 77
- Foliennummer 78
- Foliennummer 79
- Foliennummer 80
- Fraktionales Rucksack-Problem
- Gierige Loumlsung des fraktionalen Rucksack-Problems
- Gieriges Einpacken ist optimal
- Foliennummer 84
- Foliennummer 85
- Foliennummer 86
- Foliennummer 87
- Foliennummer 88
- Foliennummer 89
- Foliennummer 90
- Foliennummer 91
- Foliennummer 92
- Foliennummer 93
- Foliennummer 94
- Foliennummer 95
- Foliennummer 96
- Foliennummer 97
- Foliennummer 98
- Foliennummer 99
- Foliennummer 100
- Foliennummer 101
- Foliennummer 102
- Foliennummer 103
- Foliennummer 104
- Foliennummer 105
- Foliennummer 106
- Foliennummer 107
- Foliennummer 108
- Foliennummer 109
- Foliennummer 110
- Foliennummer 111
- Foliennummer 112
- Foliennummer 113
- Foliennummer 114
- Foliennummer 115
- Foliennummer 116
- Foliennummer 117
- Foliennummer 118
- Foliennummer 119
- Foliennummer 120
- Foliennummer 121
- Foliennummer 122
- Foliennummer 123
- Foliennummer 124
- Foliennummer 125
- Foliennummer 126
- Foliennummer 127
- Foliennummer 128
- Foliennummer 129
- Foliennummer 130
- Foliennummer 131
- Foliennummer 132
- Foliennummer 133
- Foliennummer 134
- Foliennummer 135
-
![Page 135: 20. Dynamische Programmierung Gierige Algorithmen · DuA - Kapitel 20. 1. Divide&Conquer: • Teile Problem in Teilprobleme auf. • Kombiniere optimale Lösungen der Teilprobleme](https://reader034.vdocuments.pub/reader034/viewer/2022050715/5e048d0c55dcf173926e3541/html5/thumbnails/135.jpg)
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
-