这是一道经典的背包问题:
有一个背包,背包容量是M=150。有7个物品,物品不可以分割成任意大小。
要求尽可能让装入背包中的物品总价值最大,但不能超过总容量。
物品 A B C D E F G
重量 35 30 60 50 40 10 25
价值 10 40 30 50 35 40 30
分析:这道题的约束条件是装入的物品总重量不超过背包容量:∑wi<=M(M=150)。
如果这道题使用贪心算法,那么这道题的贪心策略为每次选取单位重量价值最大的产品。理论上,这种方法是可行的。但实际上,如果这7个物品中有几个单位重量价值相同,那么这个贪心算法就是不成立的,也就无法应用。
所以如果想要在某道题目上使用贪心算法,一定要先证明是否成立,及贪心策略能否真正求出局部最优解。若证明不成立,则无法使用贪心算法。
下面是一道贪心算法的经典例题:
已知一些孩子和一些糖果,每个孩子有需求因子g,每个糖果有大小s,当某个糖果的大小s>=某个孩子的需求因子g时,代表该糖果可以满足该孩子,求使用这些糖果,最多能满足多少孩子(注意,某个孩子最多只能用1个糖果满足)
当我拿到这道题时,我的感觉就是,这其实相当于一种一一对应,小糖果给需求因子小的吃,大糖果给需求因子大的孩子吃。
所以,此题的贪心策略如下:
某个糖果如果不能满足某个孩子,则该糖果也一定不能满足需求因子更大的孩子
某个孩子可以用更小的糖果满足,则没必要用更大糖果满足,因为可以保留更大的糖果满足需求因子更大的孩子
孩子的需求因子更小则其更容易被满足,故优先从需求因子小的孩子尝试,可以得到正确的结果。
贪心算法的应用
最新推荐文章于 2023-10-07 00:16:49 发布