5 Entwurfsmethoden für Algorithmen
5 Entwurfsmethoden für Algorithmen
5 Entwurfsmethoden für Algorithmen
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