8 Stimmen

Verstehen der Umsetzung des Bottom-up-Stabschnitts

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 .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X