Bestimmen von Artikeln in einer optimalen Rucksacklösung
Angesichts des Knapsack-Algorithmus, der Artikel optimal verpackt, um den Gesamtwert zu maximieren, befasst sich dieser Artikel mit dem Zusätzlichen Die Herausforderung besteht darin, die spezifischen Elemente zu identifizieren, die in der optimalen Lösung enthalten sind.
Zunächst befassen wir uns mit dem Knapsack-Algorithmus Implementierung:
int Knapsack::knapsack(std::vector<Item>& items, int W) {...}
Um die an der optimalen Lösung beteiligten Elemente abzurufen, können wir die in der berechneten Matrix gespeicherten Informationen nutzen:
std::vector<vector<int>> dp(W + 1, std::vector<int>(n + 1, 0));
Pseudocode:
line = W i = n while (i > 0): if dp[line][i] - dp[line - weight(i)][i-1] == value(i): // Item 'i' is in the knapsack i-- line -= weight(i) else: i--
Dieser iterative Prozess durchläuft die Matrix. Wenn ein Gewichtsunterschied mit der Größe eines Artikels übereinstimmt, gilt dieser Artikel als Teil der optimalen Lösung. Der Artikel wird von der Berücksichtigung ausgeschlossen und der Prozess wird fortgesetzt.
Durch den Einsatz dieser Technik können wir bestimmen, welche Artikel die wertvollste Kombination im Rucksack bilden, ohne dass eine zusätzliche Datenspeicherung erforderlich ist. Dieser Ansatz ist nicht nur effizient, sondern liefert auch wertvolle Erkenntnisse zur optimalen Lösungszusammensetzung.
Das obige ist der detaillierte Inhalt vonWie können wir die Elemente identifizieren, die in einer optimalen Rucksacklösung enthalten sind?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!