贪心算法的应用

这是一道经典的背包问题:
有一个背包,背包容量是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个糖果满足)
当我拿到这道题时,我的感觉就是,这其实相当于一种一一对应,小糖果给需求因子小的吃,大糖果给需求因子大的孩子吃。
所以,此题的贪心策略如下:
某个糖果如果不能满足某个孩子,则该糖果也一定不能满足需求因子更大的孩子
某个孩子可以用更小的糖果满足,则没必要用更大糖果满足,因为可以保留更大的糖果满足需求因子更大的孩子
孩子的需求因子更小则其更容易被满足,故优先从需求因子小的孩子尝试,可以得到正确的结果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值