这种背包变化的算法会起作用吗?

时间:2013-08-02 10:46:51

标签: algorithm knapsack-problem

我不确定它实际上有多少变化,但问题在于:

你即将开始漫长的旅程,在你这么做之前,你需要打包行李。您可以选择N个项目。每个项目都有一个权重和值,表示它的用途。你将无法携带超过K公斤。您可以携带的物品的最大总价值是多少? (每个项目只能有一个副本。)

我已经创建了一个算法,我认为它将使用DP解决问题,但我不确定它是否会起作用,如果你们其中一个人会看一下它会很棒。 注意:它更像是伪代码和算法的组合,我不太确定如何编写。

假设k是最大重量。  两个数组:一个包含每个项目w []的权重,另一个包含值v []。

 for i = 0; i<numberOfItems; i++
 {
    value = 0
    k = MaxWeight;
    for(j = i; j<numberOfItems; j++
    {
        if(j = i)
        {
            if(k - w[i] >= 0)
            {
                k = k-w[i]
                value = value + v[i]
            }
        }
        else
        {
            if(k - w[j] >= 0)
            {
                k = k-w[j]
                value = value + v[j]
            }
        }
    }
}

1 个答案:

答案 0 :(得分:3)

不,你的贪婪算法不起作用。

检查此示例:

MaxWeight = 12
Items = 4 5 4 4 (each value is 1)

您的算法将选择项目1和2(或项目2和3,或3和4)。最佳解决方案是采用第1,3和4项。