我正在寻找一种贪婪算法来挑选具有权重<1的最高值/重量比的项目的情况。最大重量并将其放入背包中首先不会起作用。有没有人有例子?因为否则,贪婪的最坏情况将是O(nlogn)(nlogn以降序值/权重排序,n来经历它),而动态编程方式的最坏情况将是O(nW),使得贪婪登录时更快&lt; W上。
答案 0 :(得分:6)
考虑一个容量为4的背包,以及具有以下重量和值的物品:
Item Weight Value value/Weight A 3 1.65 0.55 B 2 1 0.5 C 2 1 0.5
基于每重量值的贪婪算法首先选择项目A然后退出,剩余的容量不足以用于任何其他项目 - 总值1.65。然而,最佳解决方案是选择项目B和C,它们共同占据了全部容量并且组合值为2.
更一般地说,当选择一组不占用整个可用容量的项时,贪婪算法可能会失败。填充更多可用容量的不同项目有时是更好的选择。
答案 1 :(得分:0)
我们还可以概括贪婪算法无法给出全局最优解的情况。
如下
权重= {1,x,x + 1} 目标体重= z
对于上述一般情况,大多数时候贪婪方法都失败了。您可以尝试示例。