Unter Einführung in Algorithmen(CLRS) Cormen et al. erläutern die Lösung des Rod-Cutting-Problems wie folgt (Seite 369)
EXTENDED-BOTTOM-UP-CUT-ROD(p, n)
let r[0...n] and s[0....n] be new arrays
r[0] = 0
for j = 1 to n:
q = -infinity
for i = 1 to j:
if q < p[i] + r[j - i]: // (6)
q = p[i] + r[j - i]
s[j] = i
r[j] = q
return r and s
Hier p[i]
ist der Preis für das Schneiden der Stange auf Länge i, r[i]
ist der Erlös aus dem Schneiden des Stabes der Länge i und s[i]
gibt uns die optimale Größe für das erste abzuschneidende Stück.
Meine Frage bezieht sich auf die äußere Schleife, die Folgendes durchläuft j
de 1
a n
und die innere Schleife i
die von 1
a n
auch.
In Zeile 6 vergleichen wir q
(die bisher erzielten maximalen Einnahmen) mit r[j - i]
den Höchstbetrag der bei der vorherigen Kürzung erzielten Einnahmen.
Wenn j = 1 and i = 1
scheint alles in Ordnung zu sein, aber schon bei der nächsten Iteration der inneren Schleife, bei der j = 1 and i = 2
wird nicht r[j - i] be r[1 - 2] = r[-1]
?
Ich bin mir nicht sicher, ob der negative Index hier Sinn macht. Ist das ein Tippfehler in CLRS oder übersehe ich hier etwas?
Für den Fall, dass einige von Ihnen nicht wissen, was es mit dem Schneiden von Stangen auf sich hat, finden Sie hier eine Beispiel .