Heim  >  Artikel  >  Backend-Entwicklung  >  So implementieren Sie den Rucksackproblem-Algorithmus mit PHP

So implementieren Sie den Rucksackproblem-Algorithmus mit PHP

WBOY
WBOYOriginal
2023-07-09 09:15:061457Durchsuche

So implementieren Sie den Rucksackproblem-Algorithmus in PHP

Das Rucksackproblem ist ein klassisches kombinatorisches Optimierungsproblem. Sein Ziel besteht darin, eine Reihe von Elementen auszuwählen, um ihren Gesamtwert bei einer begrenzten Rucksackkapazität zu maximieren. In diesem Artikel stellen wir vor, wie PHP zur Implementierung des Algorithmus des Rucksackproblems verwendet wird, und stellen entsprechende Codebeispiele bereit.

  1. Beschreibung des Rucksackproblems

Das Rucksackproblem kann folgendermaßen beschrieben werden: Gegeben sei ein Rucksack mit einer Kapazität von C und N Gegenständen. Jedes Element i hat ein Gewicht wi und einen Wert vi. Aus diesen N Artikeln müssen einige Artikel so ausgewählt werden, dass ihr Gesamtgewicht die Rucksackkapazität C nicht überschreitet und ihr Gesamtwert maximiert wird.

  1. Dynamischer Programmieralgorithmus

Dynamische Programmierung ist eine gängige Methode zur Lösung des Rucksackproblems. Seine Grundidee besteht darin, das Problem in mehrere Teilprobleme zu unterteilen und für jedes Teilproblem die optimale Lösung zu berechnen. Durch schrittweise Rekursion wird dann schließlich die optimale Lösung für das ursprüngliche Problem erhalten.

Das Folgende ist ein Beispielcode, der einen dynamischen Programmieralgorithmus verwendet, um das Rucksackproblem zu lösen:

function knapsack($C, $weights, $values, $N) {
    $dp = array();
    
    for ($i = 0; $i <= $N; $i++) {
        $dp[$i][0] = 0;
    }
    
    for ($i = 1; $i <= $N; $i++) {
        for ($j = 1; $j <= $C; $j++) {
            if ($weights[$i - 1] <= $j) {
                $dp[$i][$j] = max($values[$i - 1] + $dp[$i - 1][$j - $weights[$i - 1]], $dp[$i - 1][$j]);
            } else {
                $dp[$i][$j] = $dp[$i - 1][$j];
            }
        }
    }
    
    return $dp[$N][$C];
}

$C = 10; // 背包容量
$weights = array(2, 3, 4, 5); // 物品重量
$values = array(3, 4, 5, 6); // 物品价值
$N = count($weights); // 物品数量

$result = knapsack($C, $weights, $values, $N);

echo "背包问题的最优解为:" . $result;

Der obige Code verwendet ein zweidimensionales Array$dp, um die optimale Lösung jedes Unterproblems aufzuzeichnen. Dabei stellt $dpi den Maximalwert für die Auswahl einiger Elemente unter den ersten i Elementen dar, sodass ihr Gesamtgewicht j nicht überschreitet. Die Rekursionsformel lautet:

$dp[i][j] = max($values[i - 1] + $dp[i - 1][$j - $weights[i - 1]], $dp[i - 1][$j]);

Schließlich erhalten wir die optimale Lösung für das Rucksackproblem, indem wir $dpN ausgeben.

  1. Zusammenfassung

In diesem Artikel wird erläutert, wie Sie mit PHP den Algorithmus des Rucksackproblems implementieren. Durch dynamische Programmierung können wir das Rucksackproblem effizient lösen. Ich hoffe, dieser Artikel kann Lesern, die den Rucksack-Problem-Algorithmus lernen möchten, etwas Hilfe bieten.

Das obige ist der detaillierte Inhalt vonSo implementieren Sie den Rucksackproblem-Algorithmus mit PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn