¨Ubungen zur Vorlesung Datenstrukturen und Algorithmen SS 2007

Werbung
Christian Sohler
u.v.a.
Paderborn, den 11. Mai 2007
Abgabe 21. Mai 2007
Übungen zur Vorlesung
Datenstrukturen und Algorithmen
SS 2007
Blatt 4
AUFGABE 14:
Wir betrachten das in der Vorlesung vorgestellte Problem längste gemeinsame Teilfolge. Dabei
sind als Eingabe zwei Folgen X = (x1 , x2 , · · · , xm ) und Y = (y1 , y2 , · · · , yn ) gegeben und
gesucht ist eine längste gemeinsame Teilfolge von X und Y . In der Vorlesung ist bereits ein
Algorithmus angegeben worden, der dieses Problem mit Hilfe dynamischer Programmierung
löst. Dieser Algorithmus berechnet ein zweidimensionales Array C[0 · · · , m][0 · · · , n], wobei
in C[i][j] die Länge einer längsten gemeinsamen Teilfolge von X = (x1 , x2 , · · · , xi ) und Y =
(y1 , y2 , · · · , yj ) gespeichert wird. Berechnen Sie das zweidimensionale Array C für die Eingabe
X = (B, C, E, F, C, A, B) und Y = (A, B, E, D, F, B, A) und geben Sie hierbei auch die Pfeile
←, ↑ und - an. Geben Sie anschließend eine längste gemeinsame Teilfolge von X und Y
aus.
AUFGABE 15:
Als etwas komplexeren Fall betrachten wir nun das maximale Teilsummenproblem. Dabei ist
als Eingabe eine Folge A = ha1 , a2 , . . . , an i ganzer Zahlen ai ∈ Z gegeben. Gesucht ist die
maximale Summe einer zusammenhängenden Teilfolge ha` , a`+1 , . . . , ar i von A, also
( r
)
X
ai 1 ≤ ` ≤ r ≤ n .
max
i=`
a) Geben Sie einen naiven Algorithmus im Pseudocode an, der das Problem in Zeit Θ(n3 )
löst.
nP
o
k
b) Bezeichne zunächst R(k) = max
a
1
≤
`
≤
k
die maximale rechte Randsumi
i=`
me in ha1 , a2 , . . . , ak i, d.h. die maximale Teilsumme, die genau in ak endet. Finden Sie
eine rekursive Formulierung für R(k).
c) Geben Sie mit den Methoden der dynamischen Programmierung einen effizienten Algorithmus zur Berechnung von R(k) an.
d) Bezeichne S(k) den Wert der maximalen Teilsumme in ha1 , a2 , . . . , ak i. Finden Sie eine
rekursive Formulierung für S(k). Verwenden Sie dabei gegebenenfalls R.
e) Geben Sie mit den Methoden der dynamischen Programmierung einen effizienten Algorithmus zur Berechnung der maximalen Teilsumme von A an.
AUFGABE 16:
Ein Konzern mit n Tochtergesellschaften hat ein Budget von B Euro für Investitionen. Jede
Tochtergesellschaft i ∈ {1, . . . , n} übermittelt genau 2 Projektvorschläge an die Konzernzentrale, wobei der j-te Projektvorschlag (j ∈ {1, 2}) Kosten ki,j verursacht und einen Gewinn
von gi,j verspricht. Die Konzernzentrale muss jetzt eine Auswahl von Projektvorschlägen
finden,
• die den zu erwartenden Gewinn maximiert,
• die den Budgetrahmen nicht übersteigt und
• die (aus Gerechtigkeitsgründen) höchstens einen Projektvorschlag je Tochtergesellschaft
enthält.
Formal lässt sich das Problem wie folgt formulieren:
Maximiere
n
X
(gi,1 xi,1 + gi,2 xi,2 )
i=1
unter den Bedingungen
n
X
(ki,1 xi,1 + ki,2 xi,2 ) ≤ B
i=1
xi,1 + xi,2 ≤ 1
xi,1 , xi,2 ∈ {0, 1}
a) Geben Sie eine rekursive Formel für ein dynamisches Programm zur Berechnung des
maximalen Gewinns an. Begründen Sie kurz die Korrektheit Ihrer Formel.
Hinweis: Sie können beispielsweise folgende Teilprobleme verwenden: G(n0 , B 0 ) bezeichne den maximalen Gewinn, den man mit den Projektvorschlägen der Tochtergesellschaften 1, . . . , n0 bei einem Budget von B 0 erzielen kann.
b) Entwerfen Sie einen Algorithmus in Pseudocode für dieses dynamische Programm. Welche Projektvorschläge ausgewählt werden, muss dabei nicht berechnet werden. Nur der
maximale Gewinn ist zu berechnen.
c) Bestimmen Sie die Laufzeit Ihres Algorithmus im Θ-Kalkül.
Herunterladen