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.