Algorithmen und Datenstrukturen Sommersemester 2007 Fachhochschule Wiesbaden Prof. Dr. Steffen Reith 6. Übungsblatt Aufgabe 1 (Lösung wird abgenommen) (Rekursion) Ziel dieser Aufgabe ist es, eine rekursive Funktion power(x,m) zu entwickeln, die für positive ganze Zahlen x und m die Zahl xm ausrechnet. Benutzen Sie dafür den folgenden Zusammenhang: 1, falls m = 0 m m/2 2 x = (x ) , falls m > 0 und m gerade m−1 (x ) ∗ x, sonst • Geben Sie einen rekursiven Algorithmus in Pseudocode an, der den obigen Zusammenhang benutzt. • Entwickeln Sie eine rekursive JAVA-Methode zur Berechnung von xm . • Mit der folgenden rekursiven Definition könnte man xm ebenfalls berechnen: 1, falls m = 0 m x = m−1 (x ) ∗ x, sonst Führt diese Definition zu einem, im Vergleich zu der ursprünglichen Definition, effizienteren Algorithmus? Aufgabe 2 (Lösung wird abgenommen) (Backtracking) Bei jeder Urlaubsreise taucht das Problem auf einen Rucksack zu packen. Ein solcher Rucksack hat die Kapazität C ∈ N, wobei C > 0. Weiterhin ist eine Liste von n Elementen gegeben, wobei der ite Gegenstand das Gewicht gi ∈ N, gi > 0 hat und den Wert wi ∈ N, wi > 0 besitzt. Gesucht ist eine Liste von Gegenständen, deren Gesamtgewicht C nicht übersteigt und die den maximal möglichen Wert haben. Es ist also das folgende Problem zu lösen: Problem: RUCKSACK Eingabe: C ∈ N, n ∈ N, gi ∈ N und wi ∈ N für 0 ≤ i < n Ausgabe: maximaler Wert der transportierbaren Gegenstände Für eine Liste von 16 Gegenständen aus der Tabelle unten und einer Rucksackkapazität von 100 ergibt sich ein maximaler Transportwert von 207 Einheiten. Index gewählt Gewicht Wert 0 1 10 7 1 1 5 6 2 3 4 5 6 7 8 9 10 11 12 13 14 15 0 0 0 1 1 1 0 1 1 1 1 1 1 0 7 11 13 1 7 11 13 19 19 9 8 2 7 31 1 1 1 4 11 20 3 7 8 9 16 19 100 3 Für eine Liste von vier Gegenständen aus der nächsten Tabelle und einer Rucksackkapazität von 12 ergibt sich ein maximaler Transportwert von 8 Einheiten Algorithmus 1 : rucksack(kapa, index) Eingabe : Die verbliebene Restkapazitaet kapa und der Index des aktuell zu prüfenden Gegenstands index Ergebnis : maximaler Transportwert der wählbaren Gegenstände, deren Index bei index startet if (Rekursionsabbruch) { if (noch Kapazität frei) { return Wert des letzten Elements; } else{ return 0; } } else{ if (noch Kapazitaet frei) { wertOhne = rucksack(restKapa, index + 1); wertMit = rucksack(restKapa - gindex , index + 1) + windex ; wertMax = maximum von wertOhne und wertMit; return wertMax; } else{ return rucksack(restKapa, index + 1); } } Index gewählt Gewicht Wert 0 0 10 7 1 1 5 6 2 3 1 0 7 11 2 1 • Entwerfen Sie eine JAVA-Methode rucksack, die den Pseudocode von Algorithmus 1 implementiert und die die maximalen Transportwerte aus den beiden Beispielen berechnen kann. Die Abnahme erfolgt in der KW 20 vom 14.5.2007 - 18.5.2007 2