为什么整数背包的算法不正确?

时间:2014-01-15 11:52:52

标签: dynamic-programming knapsack-problem

这是我认为我需要做的事情。

鉴于'n'重量'Wi'和价值'Vi',我需要在保持重量限制WEIGHT_MAX的同时最大化背包的价值。

所以,我想做的是,根据物品的价值(从高到低)对物品进行分类,然后只要背包的重量小于WEIGHT_MAX就选择物品。 / p>

即。像这样的东西

while( temp_weight <= WEIGHT_MAX && i <= INDEX_MAX )
{
   if ( temp_weight + W[i] > WEIGHT_MAX ) { i++; continue;}
   temp_weight += W[i];
   value += V[i];
   i++;
}

为什么这个算法错了?

1 个答案:

答案 0 :(得分:1)

考虑这些已排序的元素:

Vi = {10,5,5,5,5,5,5}

Wi = {4,1,1,1,1,1,1}

如果您的WEIGHT_MAX为4,则使用算法,您只需选择V = 10元素(总值10)。但最佳解决方案是4个元素,V = 5(总值20)。

这就是为什么你的算法没有达到最佳效果的原因。

要解决的一些算法:http://en.wikipedia.org/wiki/Knapsack_problem