贪心算法解决汽车加油问题

1. 何为贪心算法

贪心算法又称贪婪算法,是指在对问题求解时,总是做出在当前步骤看来是最好的选择。也就是说,不从整体最优上加以考虑,所做出的是在某种意义上的局部最优解。

2. 贪心算法的特点

  1. 贪心策略的选择只跟当前有关,跟前面的状态没有关系;
  2. 贪心算法通过迭代把总问题分解为若干个子问题,通过求解子问题,然后把子问题最优解合成总问题的最优解;
  3. 贪心算法可以归结为每次求最大值(最小值)

3. 汽车加油问题

问题描述

一辆汽车加满油一次可以跑300公里,现该车在第一个加油站出发时加满油,然后需要陆续经过间隔为[150,180,120,100,280,160]的加油站,指出在哪些油站加油,可以加油次数最少,算出加油次数。

意即该汽车一次最多跑300公里,第一次在起点加满油,途径的加油站间隔为[150,180,120,100,280,160],求加油最少次数。

图解

在这里插入图片描述

代码实现

def oil(n,distance):
    i=1                           #起始站加油算第一次
    count=0                       #当前站与下一站的距离
    for one in distance:
        count+=one                #试着继续累加公里数,尽量跑最长距离
        if n<count:               #加满油开始持续跑,超过当前加油距离累加公里数
            print('%d公里开始处加油'%(one))#累加距离等于或超过一次跑最长距离,要加油了
            count=one             #加满油,从新开始累计跑的距离
            i+=1                  #计加油次数
    return i
n=300
dis=[150,180,120,100,280,160]    #要求距离间隔都小于n,否则汽车中途要抛锚了
#dis=[150,60,50,180,120,100,280,160]
num=oil(n,dis)
print('该车最少要加油%d次'%(num))

结果:
在这里插入图片描述

小结

  1. 加满油每跑一次都算出最长可跑的距离,最后把所有加油次数累加,求得最少加油次数;
  2. 每加油跑一次求局部最长值,累计加油跑了多少次,就可以求得跑完路程的局部最优解,满足贪心算法的思路;
  3. 该算法直接给出了加油站之间的距离,并保证了加油站之间的距离都小于汽车一次加满油跑的距离,否则该算法会存在与事实不符问题(汽车容易没油,半路抛锚)。
  • 8
    点赞
  • 63
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

冰履踏青云

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

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

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

打赏作者

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

抵扣说明:

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

余额充值