27.11.2012 Aufrufe

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!