0/1背包问题有好几种贪婪策略,每个贪婪策略都采用多步过程来完成背包的装入,在每一步过程中利用贪婪准则选择一个物品装入背包。
1、从剩余的物品中,选出可以装入背包的价值最大的物品。利用这种规则,价值最大的物品首先被装入(假设有足够容量),然后是下一个价值最大的物品,如此继续下去。这种策略不能保证得到最优解。例如,n=2, weight=[100, 10, 10], prize=[20, 15, 15], count=105。当利用价值贪婪准则时,获得的解为x= [1, 0, 0],这种方案的总价值为20。而最优解为[0, 1, 1],其总价值为30。
2、重量贪婪准则:从剩下的物品中选择可装入背包的重量最小的物品。虽然这种规则对于前面的例子能产生最优解,但在一般情况下则不一定能得到最优解。考虑n=2 ,w=[10,20], p=[5,100], c=25。当利用重量贪婪策略时,获得的解为x =[1,0], 比最优解[0, 1]要差。
3、还可以利用另一方案,价值密度pi/wi 贪婪算法,这种选择准则为:从剩余物品中选择可装入包的pi/wi值最大的物品。这种策略也不能保证得到最优解,利用此策略试解n=3 ,w=[20,15,15], p=[40,25,25], c=30 时的最优解。
我们不必因所考察的几个贪婪算法都不能保证得到最优解而沮丧,0/1背包问题是一个NP-复杂问题,对于这类问题,也许根本就不可能找到具有多项式时间的算法。虽然按pi/wi非递(增)减的次序装入物品不能保证得到最优解,但它是一个直觉上近似的