Algorithmen und Datenstrukturen
Algorithmen und Datenstrukturen
Algorithmen und Datenstrukturen
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
Das Rucksack-Problem (5/8)<br />
Rekursive Backtracking-Lösung in Java Pseudocode:<br />
public int btKnapsack(int i, int restkapazität ) { // Aufruf: btKnapsack(1,c)<br />
// Rückgabewert: Wert d. optimalen Füllung bei O={oi,...,on} <strong>und</strong><br />
c=restkapazität<br />
Objekt o=objekte[i]; // objekte[] ist globale Variable mit Indexmenge {1,2,....,n}<br />
if ( i==objekte.length ) // Ende der Rekursion: o ist das letzte Objekt<br />
if (o.gewicht() > restkapazität) // wenn o nicht mehr hinein passt, dann<br />
return 0; // bleibt es draußen<br />
else return o.wert(); // andernfalls kommt es hinein <strong>und</strong> steigert den Wert<br />
else if (o.gewicht() > restkapazität) // analog bei den anderen Objekten<br />
return btKnapsack(i+1, restkapazität)<br />
else return max( btKnapsack(i+1,restkapazität),<br />
btKnapsack(i+1,restkapazität–o.gewicht())+o.wert() ); //<br />
Wenn es noch hinein passt, werden dennoch<br />
} // beide Möglichkeiten betrachtet<br />
Anmerkung: Optimierungspotenzial (Ausnutzen wiederkehrender Berechnungen)<br />
wird hier nicht genutzt!<br />
11/47