6. ¨Ubungsblatt

Werbung
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
Herunterladen