Christian Sohler Paderborn, den 11. Mai 2007
u.v.a. Abgabe 21. Mai 2007
Ubungen zur Vorlesung ¨
Datenstrukturen und Algorithmen SS 2007
Blatt 4
AUFGABE 14:
Wir betrachten das in der Vorlesung vorgestellte Probleml¨angste gemeinsame Teilfolge. Dabei sind als Eingabe zwei Folgen X = (x1, x2,· · ·, xm) und Y = (y1, y2,· · ·, yn) gegeben und gesucht ist eine l¨angste gemeinsame Teilfolge von X und Y. In der Vorlesung ist bereits ein Algorithmus angegeben worden, der dieses Problem mit Hilfe dynamischer Programmierung l¨ost. Dieser Algorithmus berechnet ein zweidimensionales Array C[0· · ·, m][0· · ·, n], wobei in C[i][j] die L¨ange einer l¨angsten gemeinsamen Teilfolge von X = (x1, x2,· · ·, xi) und Y = (y1, y2,· · ·, yj) gespeichert wird. Berechnen Sie das zweidimensionale ArrayCf¨ur die Eingabe X = (B, C, E, F, C, A, B) undY = (A, B, E, D, F, B, A) und geben Sie hierbei auch die Pfeile
←, ↑ und - an. Geben Sie anschließend eine l¨angste 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, . . . , ani ganzer Zahlen ai ∈ Z gegeben. Gesucht ist die maximale Summe einer zusammenh¨angenden Teilfolge ha`, a`+1, . . . , ari von A, also
max (Xr
i=`
ai 1≤`≤r ≤n )
.
a) Geben Sie einen naiven Algorithmus im Pseudocode an, der das Problem in Zeit Θ(n3) l¨ost.
b) Bezeichne zun¨achstR(k) = maxnPk
i=`ai 1≤`≤k o
die maximale rechte Randsum- me in ha1, a2, . . . , aki, d.h. die maximale Teilsumme, die genau in ak endet. Finden Sie eine rekursive Formulierung f¨ur R(k).
c) Geben Sie mit den Methoden der dynamischen Programmierung einen effizienten Al- gorithmus zur Berechnung von R(k) an.
d) BezeichneS(k) den Wert der maximalen Teilsumme in ha1, a2, . . . , aki. Finden Sie eine rekursive Formulierung f¨ur S(k). Verwenden Sie dabei gegebenenfalls R.
e) Geben Sie mit den Methoden der dynamischen Programmierung einen effizienten Al- gorithmus zur Berechnung der maximalen Teilsumme von A an.
AUFGABE 16:
Ein Konzern mit n Tochtergesellschaften hat ein Budget von B Euro f¨ur Investitionen. Jede Tochtergesellschafti∈ {1, . . . , n}¨ubermittelt genau 2 Projektvorschl¨age an die Konzernzen- trale, 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¨agen finden,
• die den zu erwartenden Gewinn maximiert,
• die den Budgetrahmen nicht ¨ubersteigt und
• die (aus Gerechtigkeitsgr¨unden) h¨ochstens einen Projektvorschlag je Tochtergesellschaft enth¨alt.
Formal l¨asst sich das Problem wie folgt formulieren:
Maximiere
Xn
i=1
(gi,1xi,1+gi,2xi,2)
unter den Bedingungen
Xn
i=1
(ki,1xi,1+ki,2xi,2) ≤ B xi,1+xi,2 ≤ 1
xi,1, xi,2 ∈ {0,1}
a) Geben Sie eine rekursive Formel f¨ur ein dynamisches Programm zur Berechnung des maximalen Gewinns an. Begr¨unden Sie kurz die Korrektheit Ihrer Formel.
Hinweis: Sie k¨onnen beispielsweise folgende Teilprobleme verwenden:G(n0, B0) bezeich- ne den maximalen Gewinn, den man mit den Projektvorschl¨agen der Tochtergesellschaf- ten 1, . . . , n0 bei einem Budget von B0 erzielen kann.
b) Entwerfen Sie einen Algorithmus in Pseudocode f¨ur dieses dynamische Programm. Wel- che Projektvorschl¨age ausgew¨ahlt werden, muss dabei nicht berechnet werden. Nur der maximale Gewinn ist zu berechnen.
c) Bestimmen Sie die Laufzeit Ihres Algorithmus im Θ-Kalk¨ul.