確定最佳背包解決方案中的物品
鑑於背包演算法以最佳方式打包物品以最大化總價值,本文解決了附加問題確定最佳解決方案中包含的特定項目的挑戰。
首先,我們深入研究背包演算法的實作:
int Knapsack::knapsack(std::vector<Item>& items, int W) {...}
要檢索最佳解決方案中涉及的項目,我們可以利用計算矩陣中儲存的資訊:
std::vector<vector<int>> dp(W + 1, std::vector<int>(n + 1, 0));
偽代碼:
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--
這個迭代過程迭代矩陣。當重量差異與物品的尺寸相符時,該物品被視為最佳解決方案的一部分。該物品被排除在考慮範圍之外,並且該過程繼續。
透過採用這種技術,我們可以確定哪些物品構成了背包中最有價值的組合,而無需額外的資料儲存。這種方法不僅高效,而且還為最佳解決方案組合提供了寶貴的見解。
以上是我們如何識別最佳背包解決方案中包含的物品?的詳細內容。更多資訊請關注PHP中文網其他相關文章!