贪心算法 - 背包问题

贪心算法是用来求最优解的问题。解决一个问题或者得到一个问题的答案一般分为多个步骤,每个步骤选取的结果,都是当前步骤下最好的或者最优的结果。

贪心算法每次的决策都是以当前的情况来做出最优的结果,不会考虑当前选择的结果对之后选择的影响。

贪心算法只会对某种特定的问题有解。

把一个问题分解成若干个小问题,每一步都是在前一步的基础上做出的最优解。

比如:找钱问题,现在有钱25分、20分、5分、1分四种硬币,需要给客户找41分硬币。怎么样找才能给客户找出最少的硬币数?

正确的找法:2枚20分和一枚1分的,共三枚硬币。
但是如果使用贪心算法的话,会选出一枚25分三枚5分的和一枚1分的共5枚硬币。

经典的例子-背包问题:

有一个可以承重为N的背包,可以往背包里多件物品,每件物品的重量不等,而且每件物品的价值也不等,怎样安排物品才能保证包里装的物品的总价值最大?每种物品只有一件。

具体一点,背包可以承重150,现有7件物品,重量分别是:35,30,60,50,40,10,25
物品的价值分别为:10,40,30,50,35,40,30,每件物品不可分开,怎样那些物品才能保证在不超过背包承重的情况下,背包的总价值最大?

在这个问题中,物品具有两个维度的属性:重量和价值。要么以背包承重作判断条件,要么价值最大为判断条件,要么以价值密度作为选择条件。

对于这种情况下,可以使用贪心算法来完成,有三种策略可以选择:
一、每次都选择价值最高的物品:根据这种策略最终选择的物品编号4、2、6 、5,这些物品的总价值:130.总重量:165
二、每次选择重量最轻的物品:根据这种策略选择的物品编号:6、7、2、1、5,这些物品的总总量:140,总价值:155
三、每次选择价值密度(单位总量的价值)最大的物品,根据这种策略这七件物品的价值密度依次是:0.286,1.333,0.5,1.0,0.875,4.0,1.2,所以最终选择的物品的编号依次是:6,2,7,4,1,包里的物品总重:150,总价值:170。

aaa

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wb175208

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值