17.09.2013 Aufrufe

5 Entwurfsmethoden für Algorithmen

5 Entwurfsmethoden für Algorithmen

5 Entwurfsmethoden für Algorithmen

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.

Berechnung der oberen Schranken. Sei x = 〈x1,...,xi−1〉 ein Knoten im Aufzählungsbaum<br />

<strong>für</strong> das {0,1}-Rucksackproblem mit n Objekten. Es sei opt(x) der maximale Gewinn eines<br />

Blatts 〈x1,...,xi−1,...〉 in dem Teilbaum von x. Offenbar gilt:<br />

wobei<br />

opt(x) = Gewinn(x)+γ(x),<br />

γ(x) = optimaler Gewinn des {0,1}-Rucksackproblems<br />

mit den Objekten i,i+1,...,n und der<br />

Restkapazität K ′ = K − Gewicht(x).<br />

Die obere Schranke ub(x) = ub(x1,...,xi−1) <strong>für</strong> eine {0,1}-Rucksackfüllung, in der die Mitnahme<br />

der ersten i − 1 Objekte durch x1,...,xi−1 festgelegt ist, berechnen wir mit der in Algorithmus<br />

47 auf Seite 181 beschriebenen Methode zum Lösen des rationalen Rucksackproblems.<br />

(Die Abkürzung ub(...) steht <strong>für</strong> “upper bound”.)<br />

Algorithmus 47 angewandt auf das rationale Rucksackproblem mit n − i+1 Objekten und den<br />

Gewichten wi,...,wn, den Gewinnen pi,..., pn und der Restkapazität K ′ = K − Gewicht(x)<br />

liefert eine obere Schranke γ + (x) <strong>für</strong> γ(x). Eine obere Schranke ub(x) <strong>für</strong> die beste Lösung im<br />

Teilbaum mit Wurzel x erhalten wir durch<br />

Offenbar gilt opt(x) ≤ ub(x).<br />

ub(x) = Gewinn(x)+γ + (x).<br />

Wir verwenden diese Beobachtung, um irrelevante Teile des Aufzählungsbaums zu ignorieren:<br />

Ist x = 〈x1,...,xi−1〉 der aktuelle Knoten und ist ub(x) ≤ optgewinn der Wert der bisher besten<br />

gefundenen Lösung, dann wird Knoten x und dessen Teilbaum ignoriert. Diese Ideen sind in<br />

Algorithmus 50 auf Seite 185 zusammengefasst.<br />

Algorithmus 50 Backtracking Algorithmus Rucksack(i,〈x1,...,xi−1〉) (Variante 2)<br />

IF i ≤ n THEN<br />

IF ub(x1,...,xi−1) > optgewinn THEN<br />

Rucksack(i+1,〈x1,...,xi−1,0〉)<br />

IF Gewicht(x1,...,xi−1,1) ≤ K THEN<br />

Rucksack(i+1,〈x1,...,xi−1,1〉)<br />

FI<br />

FI<br />

ELSE<br />

IF optgewinn < Gewinn(x1,...,xn) THEN<br />

optgewinn := Gewinn(x1,...,xn)<br />

FI<br />

FI<br />

Ein Beispiel ist auf folgender Folie angegeben. Hier liefert die Analyse des linken Teilbaums<br />

der Wurzel eine Lösung mit dem Gesamtgewinn 5. Also wird optgewinn = 5 gesetzt. Die obere<br />

Schranke opt(1) <strong>für</strong> den Knoten ¯x = 〈1〉 ist ub(1) = p1 + γ + (1) = 1+3 = 4 < 5, also wird auf<br />

die Analyse des rechten Teilbaums verzichtet.<br />

185

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!