我想了解在課堂上給予我的揹包算法,特別是下面的僞代碼。重複揹包 - 數組解決方案
這是我嘗試編寫它:
//Init array
var solution = [];
var items = problem.items;
var sackSize = problem.knapsack;
solution[0] = 0;
for(var k = 1; k <= sackSize; k++)
{
var loot = 0;
for(var i = 1; i <= items.length; i++)
{
if(k >= items[i].weight)
{
loot = Math.max(loot, items[i].value)
}
}
solution[k] = loot;
}
這沒有意義,我因爲if(k >= items[i].weight)
總是給人一種「索引超出界限」錯誤上的最後一次迭代循環。 items
數組從0開始,但i
從1開始。爲什麼我們從索引1開始?我誤解了變量嗎?
我給出:
對象問題包括揹包 (problem.knapsack)的最大重量和可用項(problem.items)的陣列。 每個項目都是一個具有重量和價值屬性 (problem.items [i] .weight和problem.items [i] .value)的對象。這兩個 函數都應返回一個選定項目的數組。 返回數組中的項目也應該具有權重和值屬性。
在僞代碼中,從'1'到'n'而不是從'0'到'n-1'的迭代是很常見的。僅僅因爲僞代碼從「1」迭代到「n」並不意味着您的代碼也必須從「1」迭代到「n」,特別是當您知道數組索引從「0」開始時。 – wookie919
@ wookie919所以你認爲解決方案不依賴於它從1開始? – Deekor