Heim >Backend-Entwicklung >C++ >Wie können wir die Elemente identifizieren, die in einer optimalen Rucksacklösung enthalten sind?

Wie können wir die Elemente identifizieren, die in einer optimalen Rucksacklösung enthalten sind?

Susan Sarandon
Susan SarandonOriginal
2024-11-28 20:44:19178Durchsuche

How Can We Identify the Items Included in an Optimal Knapsack Solution?

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!

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