贪心法求解部分背包问题
一、求解部分背包问题
1、问题描述
2、贪心策略选取
(1)价值最大
①选择价值最大的物品,因为这可以尽可能快地增加背包的总价值。
②背包容量却可能消耗得太快,使得装入背包的物品个数减少,从而不能保证目标函数达到最大。
(2)重量最轻
①选择重量最轻的物品,因为这可以装入尽可能多的物品,从而增加背包的总价值。
②背包的价值却没能保证迅速增长,从而不能保证目标函数达到最大。
(3)单位重量价值最大
选择单位重量价值最大的物品,在背包价值增长和背包容量消耗两者之间寻找平衡。
贪心策略:选择单位重量价值最大的物品。
①每次从物品集合中选择单位重量价值最大的物品,如果其重量小于背包容量,就可以把它装入,并将背包容量减去该物品的重量;
②新的背包问题产生了,不同之处在于:物品集合中物品变少了,同时背包的容量也变小了。
3、算法设计
设背包容量为C,共有n个物品,物品重量存放在数组w[n]中,价值存放在数组v[n]中,问题的解存放在数组x[n]中。
4、举例
5、算法设计
6、算法分析
排序的时间复杂性为O(nlog2n),while循环的时间为O(n),所以本算法的时间复杂度为O(nlog2n)
7、部分背包问题与0/1背包问题