• Keine Ergebnisse gefunden

Dynamische Programmierung

N/A
N/A
Protected

Academic year: 2022

Aktie "Dynamische Programmierung"

Copied!
82
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Datenstrukturen und Algorithmen

Christian Sohler

(2)

Organisatorisches

Test:

• Fr 11.05.07 im Audimax

• Beginn: 11:00 Uhr!

• Mitzubringen: Personalausweis

• Bearbeitungszeit: 1h 30min

• Eine Divide-&-Conquer Aufgabe und eine Greedy Aufgabe

(3)

Dynamische Programmierung

Rekursiver Ansatz:

• Lösen eines Problems durch Lösen mehrerer kleinerer Teilprobleme, aus denen sich die Lösung für das

Ausgangsproblem zusammensetzt

Phänomen:

• Mehrfachberechnungen von Lösungen

Methode:

• Lösungen zu Teilproblemen werden iterativ beginnend mit den Lösungen der kleinsten Teilprobleme berechnet

(4)

Das Optimalitätsprinzip

Typische Anwendung für dynamisches Programmieren: Optimierungsprobleme

Eine optimale Lösung für das Ausgangsproblem

setzt sich aus optimalen Lösungen für kleinere

Probleme zusammen.

(5)

Zusammenhang

Mit Greedy-Algorithmen:

• Algorithmenmethode, um Optimierungsprobleme zu lösen

Mit Divide-&-Conquer:

• Lösung eines Problems aus Lösungen zu Teilproblemen

• Aber: Lösungen zu Teilproblemen werden nicht rekursiv gelöst.

(6)

Längste gemeinsame Teilfolge

Definition:

• Seien X=(x1,...,xm) und Y=(y1,...,yn) zwei Teilfolgen, wobei xi, yj ∈ A für ein endliches Alphabet A.

• Dann heißt Y Teilfolge von X, wenn es aufsteigend sortierte Indizes i1,...,in gibt mit xij = yj für j = 1,...,n.

B

F F Y W

(7)

Längste gemeinsame Teilfolge

Definition:

• Seien X=(x1,...,xm) und Y=(y1,...,yn) zwei Teilfolgen, wobei xi, yj ∈ A für ein endliches Alphabet A.

• Dann heißt Y Teilfolge von X, wenn es aufsteigend sortierte Indizes i1,...,in gibt mit xij = yj für j = 1,...,n.

Beispiel:

Folge Y Folge X

Y ist Teilfolge von X

B C A C

A B A C A B C

(8)

Längste gemeinsame Teilfolge

Definition:

• Seien X=(x1,...,xm) und Y=(y1,...,yn) zwei Teilfolgen, wobei xi, yj ∈ A für ein endliches Alphabet A.

• Dann heißt Y Teilfolge von X, wenn es aufsteigend sortierte Indizes i1,...,in gibt mit xij = yj für j = 1,...,n.

Beispiel:

Folge Y Folge X

Y ist Teilfolge von X

Wähle (i ,i ,i ,i ) = (2,4,5,7) B C A C

A B A C A B C

(9)

Längste gemeinsame Teilfolge

Definition:

• Seien X=(x1,...,xm) und Y=(y1,...,yn) zwei Teilfolgen, wobei xi, yj ∈ A für ein endliches Alphabet A.

• Dann heißt Y Teilfolge von X, wenn es aufsteigend sortierte Indizes i1,...,in gibt mit xij = yj für j = 1,...,n.

Beispiel:

Folge Y Folge X

• Y ist Teilfolge von X B C A C

A B A C A B C

(10)

Längste gemeinsame Teilfolge

Definition:

• Seien X=(x1,...,xm) und Y=(y1,...,yn) zwei Teilfolgen, wobei xi, yj ∈ A für ein endliches Alphabet A.

• Dann heißt Y Teilfolge von X, wenn es aufsteigend sortierte Indizes i1,...,in gibt mit xij = yj für j = 1,...,n.

Beispiel:

Folge Y Folge X

• Y ist Teilfolge von X

• Wähle (i ,i ,i ,i ) = (2,4,5,7) B C A C

A B A C A B C

(11)

Längste gemeinsame Teilfolge

Definition:

• Seien X=(x1,...,xm) und Y=(y1,...,yn) zwei Teilfolgen, wobei xi, yj ∈ A für ein endliches Alphabet A.

• Dann heißt Y Teilfolge von X, wenn es aufsteigend sortierte Indizes i1,...,in gibt mit xij = yj für j = 1,...,n.

Beispiel:

Folge Y Folge X

• Y ist Teilfolge von X B C A C

A B A C A B C

(12)

Längste gemeinsame Teilfolge

Definition:

• Seien X, Y, Z Folgen über A.

• Dann heißt Z gemeinsame Teilfolge von X und Y, wenn Z Teilfolge sowohl von X als auch von Y ist.

B

F F F Z

(13)

Längste gemeinsame Teilfolge

Definition:

• Seien X, Y, Z Folgen über A.

• Dann heißt Z gemeinsame Teilfolge von X und Y, wenn Z Teilfolge sowohl von X als auch von Y ist.

Beispiel:

Folge Z Folge X Folge Y

B C A C

A B A C A B C B A C C A B B C

(14)

Längste gemeinsame Teilfolge

Definition:

• Seien X, Y, Z Folgen über A.

• Dann heißt Z gemeinsame Teilfolge von X und Y, wenn Z Teilfolge sowohl von X als auch von Y ist.

Beispiel:

Folge Z Folge X Folge Y

• 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

(15)

Längste gemeinsame Teilfolge

Definition:

• Seien X, Y, Z Folgen über A.

• Dann heißt Z gemeinsame Teilfolge von X und Y, wenn Z Teilfolge sowohl von X als auch von Y ist.

Beispiel:

Folge Z Folge X Folge Y

A B A C A B C B C A C

B A C C A B B C

(16)

Längste gemeinsame Teilfolge

Definition:

• Seien X, Y, Z Folgen über A.

• Dann heißt Z längste 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 größere Länge als Z besitzt.

B

F F F

(17)

Längste gemeinsame Teilfolge

Definition:

• Seien X, Y, Z Folgen über A.

• Dann heißt Z längste 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 größere Länge als Z besitzt.

Beispiel:

Folge X Folge Y

A B A C A B C B A C C A B B C

(18)

Längste gemeinsame Teilfolge

Definition:

• Seien X, Y, Z Folgen über A.

• Dann heißt Z längste 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 größere Länge als Z besitzt.

Beispiel:

Folge X Folge Y Folge Z

A B A C A B C B A C C A B B C B C A C

(19)

Längste gemeinsame Teilfolge

Definition:

• Seien X, Y, Z Folgen über A.

• Dann heißt Z längste 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 größere Länge als Z besitzt.

Beispiel:

Folge X Folge Y

A B A C A B C B A C C A B B C

(20)

Z1 ist nicht längste gemeinsame

Teilfolge!

Definition:

• Seien X, Y, Z Folgen über A.

• Dann heißt Z längste 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 größere Länge als Z besitzt.

Beispiel:

Folge X Folge Y

Folge Z Folge Z

A

Längste gemeinsame Teilfolge

B A C A B C B A C C A B B C

B C A C B A C A C

(21)

Problem LCS

Eingabe:

• Folge X=(x1,...,xm)

• Folge Y=(y1,...,yn)

Ausgabe:

• Längste gemeinsame Teilfolge Z (Longest Common Subsequenz)

B

F

(22)

Problem LCS

Eingabe:

• Folge X=(x1,...,xm)

• Folge Y=(y1,...,yn)

Ausgabe:

• Längste gemeinsame Teilfolge Z (Longest Common Subsequenz)

Beispiel:

Folge X Folge Y

A B C B D A B B D C A B A

(23)

Einfacher Ansatz

Algorithmus:

• Erzeuge alle möglichen Teilfolgen von X

• Teste für jede Teilfolge von X, ob auch Teilfolge von Y

• Merke zu jedem Zeitpunkt bisher längste gemeinsame Teilfolge

Laufzeit:

• 2m mögliche Teilfolgen

• Exponentielle Laufzeit!

(24)

Struktur von LCS

Satz:

Seien X=(x1,...,xm) und Y=(y1,...,yn) beliebige Folgen und sei Z=(z1,...,zk) eine längste gemeinsame Teilfolge von X und Y. Dann gilt

1. Ist xm = yn, dann ist zk = xm = yn und (z1,...,zk-1) ist eine längste gemeinsame Teilfolge von (x1,...,xm-1) und

(y1,...,yn-1).

Ist xm ≠ yn und zk ≠ xm, dann ist Z eine längste gemeinsame Teilfolge von (x1,...,xm-1) und Y.

Ist xm ≠ yn und zk ≠ yn, dann ist Z eine längste gemeinsame Teilfolge von X und (y ,...,y ).

(25)

Struktur von LCS

Satz:

Seien X=(x1,...,xm) und Y=(y1,...,yn) beliebige Folgen und sei Z=(z1,...,zk) eine längste gemeinsame Teilfolge von X und Y. Dann gilt

1. Ist xm = yn, dann ist zk = xm = yn und (z1,...,zk-1) ist eine längste gemeinsame Teilfolge von (x1,...,xm-1) und

(y1,...,yn-1).

2. Ist xm ≠ yn und zk ≠ xm, dann ist Z eine längste gemeinsame Teilfolge von (x1,...,xm-1) und Y.

(26)

Struktur von LCS

Satz:

Seien X=(x1,...,xm) und Y=(y1,...,yn) beliebige Folgen und sei Z=(z1,...,zk) eine längste gemeinsame Teilfolge von X und Y. Dann gilt

1. Ist xm = yn, dann ist zk = xm = yn und (z1,...,zk-1) ist eine längste gemeinsame Teilfolge von (x1,...,xm-1) und

(y1,...,yn-1).

2. Ist xm ≠ yn und zk ≠ xm, dann ist Z eine längste gemeinsame Teilfolge von (x1,...,xm-1) und Y.

3. Ist xm ≠ yn und zk ≠ yn, dann ist Z eine längste gemeinsame Teilfolge von X und (y ,...,y ).

(27)

Struktur von LCS

Anwendung des Optimalitätsprinzips

Satz:

Seien X=(x1,...,xm) und Y=(y1,...,yn) beliebige Folgen und sei Z=(z1,...,zk) eine längste gemeinsame Teilfolge von X und Y. Dann gilt

1. Ist xm = yn, dann ist zk = xm = yn und (z1,...,zk-1) ist eine längste gemeinsame Teilfolge von

(x1,...,xm-1) und (y1,...,yn-1).

2. Ist xm ≠ yn und zk ≠ xm, dann ist Z eine längste gemeinsame Teilfolge von (x1,...,xm-1) und Y.

(28)

Rekursion für Länge von LCS

Lemma:

Sei C[i][j] die Länge einer längsten gemeinsamen Teilfolge von (x1,...,xi) und (y1,...,yj). Dann gilt:

Beobachtung:

Rekursive Berechnung der C[i][j] würde zu Berechnung immer wieder derselben Werte führen. Dieses ist

ineffizient. Berechnen daher die Werte C[i][j] iterativ, nämlich zeilenweise.

{ }

⎪⎩

⎪⎨

>

=

>

+

=

=

=

j i

j i

y x

j i j

i C j

i C

y x

j i j

i C

j i

j i C

und falls

und falls

oder falls

0 ,

] 1 ][

[ ], ][

1 [

max

0 ,

1 ] 1 ][

1 [

0 0

0 ]

][

[

(29)

Rekursion für Länge von LCS

Lemma:

Sei C[i][j] die Länge einer längsten gemeinsamen Teilfolge von (x1,...,xi) und (y1,...,yj). Dann gilt:

Beobachtung:

Rekursive Berechnung der C[i][j] würde zu Berechnung immer wieder derselben Werte führen. Dieses ist

{ }

⎪⎩

⎪⎨

>

=

>

+

=

=

=

j i

j i

y x

j i j

i C j

i C

y x

j i j

i C

j i

j i C

und falls

und falls

oder falls

0 ,

] 1 ][

[ ], ][

1 [

max

0 ,

1 ] 1 ][

1 [

0 0

0 ]

][

[

(30)

Rekursion für Länge von LCS

Lemma:

Sei C[i][j] die Länge einer längsten gemeinsamen Teilfolge von (x1,...,xi) und (y1,...,yj). Dann gilt:

Beobachtung:

Rekursive Berechnung der C[i][j] würde zu Berechnung immer wieder derselben Werte führen. Dieses ist

ineffizient. Berechnen daher die Werte C[i][j] iterativ, nämlich zeilenweise.

{ }

⎪⎩

⎪⎨

>

=

>

+

=

=

=

j i

j i

y x

j i j

i C j

i C

y x

j i j

i C

j i

j i C

und falls

und falls

oder falls

0 ,

] 1 ][

[ ], ][

1 [

max

0 ,

1 ] 1 ][

1 [

0 0

0 ]

][

[

(31)

Rekursion für Länge von LCS

Lemma:

Sei C[i][j] die Länge einer längsten gemeinsamen Teilfolge von (x1,...,xi) und (y1,...,yj). Dann gilt:

Beobachtung:

Rekursive Berechnung der C[i][j] würde zu Berechnung immer wieder derselben Werte führen. Dieses ist

{ }

⎪⎩

⎪⎨

>

=

>

+

=

=

=

j i

j i

y x

j i j

i C j

i C

y x

j i j

i C

j i

j i C

und falls

und falls

oder falls

0 ,

] 1 ][

[ ], ][

1 [

max

0 ,

1 ] 1 ][

1 [

0 0

0 ]

][

[

(32)

Berechnung der C[i][j] Werte

LCS-Länge(Array X, Y) 1. m ← length[X]

2. n ← length[Y]

3. new array C[0,..,m][0,..,n]

4. for i ← 0 to m do C[i][0] ← 0 5. for j ← 0 to n do C[0][j] ← 0 6. for i ← 1 to m do

7. for j ← 1 to n do

8. ¾ Längenberechnung(X, Y, C, i, j) 9. return C

(33)

Berechnung der C[i][j] Werte

LCS-Länge(Array X, Y) 1. m ← length[X]

2. n ← length[Y]

3. new array C[0,..,m][0,..,n]

4. for i ← 0 to m do C[i][0] ← 0 5. for j ← 0 to n do C[0][j] ← 0 6. for i ← 1 to m do

7. for j ← 1 to n do

8. ¾ Längenberechnung(X, Y, C, i, j)

(34)

Berechnung der C[i][j] Werte

LCS-Länge(Array X, Y) 1. m ← length[X]

2. n ← length[Y]

3. new array C[0,..,m][0,..,n]

4. for i ← 0 to m do C[i][0] ← 0 5. for j ← 0 to n do C[0][j] ← 0 6. for i ← 1 to m do

7. for j ← 1 to n do

8. ¾ Längenberechnung(X, Y, C, i, j) 9. return C

Tabelle für die C[i][j] Werte

anlegen.

(35)

Berechnung der C[i][j] Werte

LCS-Länge(Array X, Y) 1. m ← length[X]

2. n ← length[Y]

3. new array C[0,..,m][0,..,n]

4. for i ← 0 to m do C[i][0] ← 0 5. for j ← 0 to n do C[0][j] ← 0 6. for i ← 1 to m do

7. for j ← 1 to n do

8. ¾ Längenberechnung(X, Y, C, i, j)

Erste Spalte der Tabelle auf 0 setzen.

(36)

Berechnung der C[i][j] Werte

LCS-Länge(Array X, Y) 1. m ← length[X]

2. n ← length[Y]

3. new array C[0,..,m][0,..,n]

4. for i ← 0 to m do C[i][0] ← 0 5. for j ← 0 to n do C[0][j] ← 0 6. for i ← 1 to m do

7. for j ← 1 to n do

8. ¾ Längenberechnung(X, Y, C, i, j) 9. return C

Erste Reihe der Tabelle auf 0 setzen.

(37)

Berechnung der C[i][j] Werte

LCS-Länge(Array X, Y) 1. m ← length[X]

2. n ← length[Y]

3. new array C[0,..,m][0,..,n]

4. for i ← 0 to m do C[i][0] ← 0 5. for j ← 0 to n do C[0][j] ← 0 6. for i ← 1 to m do

7. for j ← 1 to n do

8. ¾ Längenberechnung(X, Y, C, i, j)

(38)

Berechnung der C[i][j] Werte

Längenberechnung(Array X, Y, C, i, j) 1. if xi = yj then C[i][j] ← C[i-1][j-1] +1 2. else

3. if C[i-1][j] ≥ C[i][j-1] then C[i][j] ← C[i-1][j]

4. else C[i][j] ← C[i][j-1]

{ }

⎪⎩

⎪⎨

>

=

>

+

=

=

=

j i

j i

y x

j i j

i C j i

C

y x

j i j

i C

j i

j i C

und falls

und falls

oder falls

0 ,

] 1 ][

[ ], ][

1 [

max

0 ,

1 ] 1 ][

1 [

0 0

0 ]

][

[

(39)

Berechnung der C[i][j] Werte

Längenberechnung(Array X, Y, C, i, j) 1. if xi = yj then C[i][j] ← C[i-1][j-1] +1 2. else

3. if C[i-1][j] ≥ C[i][j-1] then C[i][j] ← C[i-1][j]

4. else C[i][j] ← C[i][j-1]

{ }

⎪⎨

=

>

+

=

=

= C i j i j xi yj

j i

j i

C falls und

oder falls

0 ,

1 ] 1 ][

1 [

0 0

0 ]

][

[

(40)

Berechnung der C[i][j] Werte

LCS-Länge(Array X, Y) 1. m ← length[X]

2. n ← length[Y]

3. new array C[0,..,m][0,..,n]

4. for i ← 0 to m do C[i][0] ← 0 5. for j ← 0 to n do C[0][j] ← 0 6. for i ← 1 to m do

7. for j ← 1 to n do

8. ¾ Längenberechnung(X, Y, C, i, j) 9. return C

(41)

Berechnung am Beispiel

j 0 1 2 3 4 5 6

yj B D C A B A

i

0 xi

1 A

2 B

3 C

4 B

5 D

6 A

(42)

Berechnung am Beispiel

j 0 1 2 3 4 5 6

yj B D C A B A

0 0 0 0 0 0 0 0 i

0 xi

1 A

2 B

3 C

4 B

5 D

6 A

7 B

(43)

Berechnung am Beispiel

j 0 1 2 3 4 5 6

yj B D C A B A

0 0 0 0 0 0 0

0 0 0 0 0 0 i

0 xi

1 A

2 B

3 C

4 B

5 D

6 A

(44)

Berechnung am Beispiel

0 0 0 0 0 0 0

0 0 0 0 0 0 0

j 0 1 2 3 4 5 6

yj B D C A B A

i

0 xi

1 A

2 B

3 C

4 B

5 D

6 A

7 B

(45)

Berechnung am Beispiel

0 0 0 0 0 0 0

0 0 0 0 0 0

j 0 1 2 3 4 5 6

yj B D C A B A

i

0 xi

1 A

2 B

3 C

4 B

5 D

6 A

(46)

Berechnung am Beispiel

0 0 0 0 0 0 0

0 0

0 0 0 0 0 0

j 0 1 2 3 4 5 6

yj B D C A B A

i

0 xi

1 A

2 B

3 C

4 B

5 D

6 A

7 B

(47)

Berechnung am Beispiel

0 0 0 0 0 0 0

0 0

0 0 0 0 0

j 0 1 2 3 4 5 6

yj B D C A B A

i

0 xi

1 A

2 B

3 C

4 B

5 D

6 A

(48)

Berechnung am Beispiel

0 0 0 0 0 0 0

0 0

0 0 0 0 0 0

j 0 1 2 3 4 5 6

yj B D C A B A

i

0 xi

1 A

2 B

3 C

4 B

5 D

6 A

7 B

(49)

Berechnung am Beispiel

0 0 0 0 0 0 0

0 0 0

0 0 0 0 0

j 0 1 2 3 4 5 6

yj B D C A B A

i

0 xi

1 A

2 B

3 C

4 B

5 D

6 A

(50)

Berechnung am Beispiel

0 0 0 0 0 0 0

0 0 0 0

0 0 0 0 0 0

j 0 1 2 3 4 5 6

yj B D C A B A

i

0 xi

1 A

2 B

3 C

4 B

5 D

6 A

7 B

(51)

Berechnung am Beispiel

0 0 0 0 0 0 0

0 0 0 0

0 0 0 0 0

j 0 1 2 3 4 5 6

yj B D C A B A

i

0 xi

1 A

2 B

3 C

4 B

5 D

6 A

(52)

Berechnung am Beispiel

0 0 0 0 0 0 0

0 0 0 0

0 0 0 0 0 0

j 0 1 2 3 4 5 6

yj B D C A B A

i

0 xi

1 A

2 B

3 C

4 B

5 D

6 A

7 B

(53)

Berechnung am Beispiel

0 0 0 0 0 0 0

0 0 0 0 1

0 0 0 0 0

j 0 1 2 3 4 5 6

yj B D C A B A

i

0 xi

1 A

2 B

3 C

4 B

5 D

6 A

(54)

Berechnung am Beispiel

0 0 0 0 0 0 0

0 0 0 0 1

0 0 0 0 0 0

j 0 1 2 3 4 5 6

yj B D C A B A

i

0 xi

1 A

2 B

3 C

4 B

5 D

6 A

7 B

(55)

Berechnung am Beispiel

0 0 0 0 0 0 0

0 0 0 0 1

0 0 0 0 0

j 0 1 2 3 4 5 6

yj B D C A B A

i

0 xi

1 A

2 B

3 C

4 B

5 D

6 A

(56)

Berechnung am Beispiel

0 0 0 0 0 0 0

0 0 0 0 1 1

0 0 0 0 0 0

j 0 1 2 3 4 5 6

yj B D C A B A

i

0 xi

1 A

2 B

3 C

4 B

5 D

6 A

7 B

(57)

Berechnung am Beispiel

0 0 0 0 0 0 0

0 0 0 0 1 1

0 0 0 0 0

j 0 1 2 3 4 5 6

yj B D C A B A

i

0 xi

1 A

2 B

3 C

4 B

5 D

6 A

(58)

Berechnung am Beispiel

0 0 0 0 0 0 0

0 0 0 0 1 1

0 0 0 0 0 0

j 0 1 2 3 4 5 6

yj B D C A B A

i

0 xi

1 A

2 B

3 C

4 B

5 D

6 A

7 B

(59)

Berechnung am Beispiel

0 0 0 0 0 0 0

0 0 0 0 1 1 1

0 0 0 0 0

j 0 1 2 3 4 5 6

yj B D C A B A

i

0 xi

1 A

2 B

3 C

4 B

5 D

6 A

(60)

Berechnung am Beispiel

0 0 0 0 0 0 0

0 0 0 0 1 1 1

0 1

0 0 0 0 0

j 0 1 2 3 4 5 6

yj B D C A B A

i

0 xi

1 A

2 B

3 C

4 B

5 D

6 A

7 B

(61)

Berechnung am Beispiel

0 0 0 0 0 0 0

0 0 0 0 1 1 1

0 1 1

0 0 0 0

j 0 1 2 3 4 5 6

yj B D C A B A

i

0 xi

1 A

2 B

3 C

4 B

5 D

6 A

(62)

Berechnung am Beispiel

0 0 0 0 0 0 0

0 0 0 0 1 1 1

0 1 1 1

0 0 0 0 0

j 0 1 2 3 4 5 6

yj B D C A B A

i

0 xi

1 A

2 B

3 C

4 B

5 D

6 A

7 B

(63)

Berechnung am Beispiel

j 0 1 2 3 4 5 6

yj B D C A B A

i

0 0 0 0 0 0 0

0 0 0 0 1 1 1

0 1 1 1 1 2 2

0 0 0 0 0 xi

1 A

2 B

3 C

4 B

5 D

6 A

(64)

Berechnung am Beispiel

j 0 1 2 3 4 5 6

yj B D C A B A

i

0 0 0 0 0 0 0

0 0 0 0 1 1 1

0 1 1 1 1 2 2

0 1 1 2 2 2 2

0 0 0 0 0 xi

1 A

2 B

3 C

4 B

5 D

6 A

7 B

(65)

Berechnung am Beispiel

j 0 1 2 3 4 5 6

yj B D C A B A

i

0 0 0 0 0 0 0

0 0 0 0 1 1 1

0 1 1 1 1 2 2

0 1 1 2 2 2 2

0 1 1 2 2 3 3

0 0 0 xi

1 A

2 B

3 C

4 B

5 D

6 A

(66)

Berechnung am Beispiel

j 0 1 2 3 4 5 6

yj B D C A B A

i

0 0 0 0 0 0 0

0 0 0 0 1 1 1

0 1 1 1 1 2 2

0 1 1 2 2 2 2

0 1 1 2 2 3 3

0 1 2 2 2 3 3

0 1 2 2 3 3 4

0 1 2 2 3 4 4

0 xi

1 A

2 B

3 C

4 B

5 D

6 A

7 B

(67)

Ausgabe der LCS

j 0 1 2 3 4 5 6

yj B D C A B A

i

0 0 0 0 0 0 0

0 0 0 0 1 1 1

0 1 1 1 1 2 2

0 1 1 2 2 2 2

0 1 1 2 2 3 3

0 1 2 2 2 3 3

0 1 2 2 3 3 4

0 xi

1 A

2 B

3 C

4 B

5 D

6 A

(68)

Ausgabe der LCS

j 0 1 2 3 4 5 6

yj B D C A B A

i

0 0 0 0 0 0 0

0 0 0 0 1 1 1

0 1 1 1 1 2 2

0 1 1 2 2 2 2

0 1 1 2 2 3 3

0 1 2 2 2 3 3

0 1 2 2 3 3 4

0 1 2 2 3 4 4

0 xi

1 A

2 B

3 C

4 B

5 D

6 A

7 B

(69)

Ausgabe der LCS

0 0 0 0 0 0 0

0 0 0 0 1 1 1

0 1 1 1 1 2 2

0 1 1 2 2 2 2

0 1 1 2 2 3 3

0 1 2 2 2 3 3

0 1 2 2 3 3 4

j 0 1 2 3 4 5 6

yj B D C A B A

i

0 xi

1 A

2 B

3 C

4 B

5 D

6 A

(70)

Ausgabe der LCS

0 0 0 0 0 0 0

0 0 0 0 1 1 1

0 1 1 1 1 2 2

0 1 1 2 2 2 2

0 1 1 2 2 3 3

0 1 2 2 2 3 3

0 1 2 2 3 3 4

0 1 2 2 3 4 4

j 0 1 2 3 4 5 6

yj B D C A B A

i

0 xi

1 A

2 B

3 C

4 B

5 D

6 A

7 B

(71)

Ausgabe der LCS

0 0 0 0 0 0 0

0 0 0 0 1 1 1

0 1 1 1 1 2 2

0 1 1 2 2 2 2

0 1 1 2 2 3 3

0 1 2 2 2 3 3

0 1 2 2 3 3 4

j 0 1 2 3 4 5 6

yj B D C A B A

i

0 xi

1 A

2 B

3 C

4 B

5 D

6 A

(72)

Ausgabe der LCS

0 0 0 0 0 0 0

0 0 0 0 1 1 1

0 1 1 1 1 2 2

0 1 1 2 2 2 2

0 1 1 2 2 3 3

0 1 2 2 2 3 3

0 1 2 2 3 3 4

0 1 2 2 3 4 4

j 0 1 2 3 4 5 6

yj B D C A B A

i

0 xi

1 A

2 B

3 C

4 B

5 D

6 A

7 B

(73)

Ausgabe der LCS

0 0 0 0 0 0 0

0 0 0 0 1 1 1

0 1 1 1 1 2 2

0 1 1 2 2 2 2

0 1 1 2 2 3 3

0 1 2 2 2 3 3

0 1 2 2 3 3 4

j 0 1 2 3 4 5 6

yj B D C A B A

i

0 xi

1 A

2 B

3 C

4 B

5 D

6 A

(74)

Ausgabe der LCS

0 0 0 0 0 0 0

0 0 0 0 1 1 1

0 1 1 1 1 2 2

0 1 1 2 2 2 2

0 1 1 2 2 3 3

0 1 2 2 2 3 3

0 1 2 2 3 3 4

0 1 2 2 3 4 4

j 0 1 2 3 4 5 6

yj B D C A B A

i

0 xi

1 A

2 B

3 C

4 B

5 D

6 A

7 B

(75)

Ausgabe der LCS

0 0 0 0 0 0 0

0 0 0 0 1 1 1

0 1 1 1 1 2 2

0 1 1 2 2 2 2

0 1 1 2 2 3 3

0 1 2 2 2 3 3

0 1 2 2 3 3 4

j 0 1 2 3 4 5 6

yj B D C A B A

i

0 xi

1 A

2 B

3 C

4 B

5 D

6 A

(76)

Ausgabe der LCS

0 0 0 0 0 0 0

0 0 0 0 1 1 1

0 1 1 1 1 2 2

0 1 1 2 2 2 2

0 1 1 2 2 3 3

0 1 2 2 2 3 3

0 1 2 2 3 3 4

0 1 2 2 3 4 4

j 0 1 2 3 4 5 6

yj B D C A B A

i

0 xi

1 A

2 B

3 C

4 B

5 D

6 A

7 B

(77)

Ausgabe der LCS

0 0 0 0 0 0 0

0 0 0 0 1 1 1

0 1 1 1 1 2 2

0 1 1 2 2 2 2

0 1 1 2 2 3 3

0 1 2 2 2 3 3

0 1 2 2 3 3 4

j 0 1 2 3 4 5 6

yj B D C A B A

i

0 xi

1 A

2 B

3 C

4 B

5 D

6 A

(78)

Ausgabe der LCS

0 0 0 0 0 0 0

0 0 0 0 1 1 1

0 1 1 1 1 2 2

0 1 1 2 2 2 2

0 1 1 2 2 3 3

0 1 2 2 2 3 3

0 1 2 2 3 3 4

0 1 2 2 3 4 4

j 0 1 2 3 4 5 6

yj B D C A B A

i

0 xi

1 A

2 B

3 C

4 B

5 D

6 A

7 B

(79)

Ausgabe der LCS

0 0 0 0 0 0 0

0 0 0 0 1 1 1

0 1 1 1 1 2 2

0 1 1 2 2 2 2

0 1 1 2 2 3 3

0 1 2 2 2 3 3

0 1 2 2 3 3 4

j 0 1 2 3 4 5 6

yj B D C A B A

i

0 xi

1 A

2 B

3 C

4 B

5 D

6 A

(80)

Laufzeitanalyse

Lemma:

Der Algorithmus LCS-Länge hat Laufzeit O(nm), wenn die Folgen X,Y Länge n und m haben.

Lemma:

Die Ausgabe der längsten gemeinsamen Teilfolge anhand der Tabelle hat Laufzeit O(n+m), wenn die Folgen X,Y Länge n und m haben.

(81)

Vorgehensweise bei dynamischer Programmierung

1. Bestimme rekursive Struktur einer optimalen Lösung.

2. Entwerfe rekursive Methode zur Bestimmung des Wertes einer optimalen Lösung.

3. Transformiere rekursiv Methode in eine iterative (bottom-up) Methode zur Bestimmung des Wertes einer optimalen Lösung.

4. Bestimmen aus dem Wert einer optimalen Lösung und in 3. ebenfalls berechneten Zusatzinformationen eine

(82)

Zusammenfassung

Algorithmenentwurfstechnik:

• Oft bei Optimierungsproblemen angewandt

Einsatz:

• Bei rekursiven Problemlösungen, wenn Teillösungen mehrfach benötigt werden

Lösungsansatz:

• Tabellieren von Teilergebnissen

Vorteil:

• Laufzeitverbesserungen, oft polynomiell statt exponentiell

Referenzen

ÄHNLICHE DOKUMENTE

S4: Wenn eine Person gut Geige spielt, dann l¨ adt Lukas diese Person zum Essen ein. A1: spielen(Anna,Geige) A2: spielen(Maria,Fl¨ ote)

Der Elastizitätsmodul für dieses Material wird ungemein klein (also für die Verwendung zu Federn günstig) angegeben; er soll nur 17000* betragen, wonach der Drehungsmodul G = 6800*

“Die soeben erwähnte Reibung kann in einer Konstruktion von solchem Einfluss sein, dass man genöthigt ist, sie womöglich noch Fig. unter den beim Gabelzapfen erreichbaren kleinen

wobei a eine von den Materialien und 0elungszuständen ab- hängige Konstante bezeichnet. Wenn der Zapfen dauernd einseitig belastet ist, so verdrängt er bei hohem Flächendruck das

Die Anwendung anderer Stoffe als Eisen, Holz und Bronze oder deren Surrogate (Weissmetall, Hartblei u. W.) zu den Spur- pfannen ist vielfach versucht worden; auf das Holz kommen

Seit einiger Zeit werden durch das Kirkstaller Eisenwerk *) in zunehmendem Maasse Triebwellen eingeführt, welche statt ab- gedreht zu sein, durch einen besonderen Walzprozess

Dieses Moment wird wieder mit dern biegenden Momente nach der bekannten Formel zu einem ideellen biegenden Momente zusammengesetzt [ao a’ = 3/3 a0 0, ziehe Ba', mache an irgend

Wenn die letzteren Rücksichten überwiegen und relativ starke Belastungswechsel vorkommen, so kann die Forderung aus- reichender Schwungradenergie in die Form gekleidet werden, daß