文章目录

  • 1. 何为贪心算法
  • 2. 贪心算法的特点
  • 3. 汽车加油问题
    • 问题描述
    • 图解
    • 代码实现
    • 小结

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. 该算法直接给出了加油站之间的距离,并保证了加油站之间的距离都小于汽车一次加满油跑的距离,否则该算法会存在与事实不符问题(汽车容易没油,半路抛锚)。

贪心算法解决汽车加油问题相关推荐

  1. c++用贪心算法解决汽车加油问题

    汽车加油问题 Time Limit: 1000 ms Memory Limit: 65536 KiB 一辆汽车加满油后可行驶n公里.旅途中有若干个加油站.设计一个有效算法,指出应在哪些加油站停靠加油, ...

  2. 贪心算法之汽车加油问题

    场景一.一辆汽车加满油后可行驶n公里.旅途中有若干个加油站.应在哪些加油站停靠加油,使沿途加油次数最少. 汽车行驶过程中,不到万不得已不加油,应走到自己能走到并且离自己最远的那个加油站,在那个站加满油 ...

  3. 部分背包的贪婪算法 java_使用JAVA实现算法——贪心算法解决背包问题

    packageBasePart;importjava.io.BufferedReader;importjava.io.FileInputStream;importjava.io.IOException ...

  4. 用贪心算法解决马踏棋盘问题

    用贪心算法解决马踏棋盘问题 参考文章: (1)用贪心算法解决马踏棋盘问题 (2)https://www.cnblogs.com/Allen-win/p/7095293.html 备忘一下.

  5. 使用贪心算法解决最小生成树问题。

    使用贪心算法解决最小生成树问题. #include<iostream> #include<algorithm> using namespace std; const int M ...

  6. 背包问题 贪心算法 java_JS基于贪心算法解决背包问题

    前面我们分享了关于js使用贪心算法解决找零问题,本文我们接着为大家介绍JS基于贪心算法解决背包问题. 贪心算法:在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以考虑,他所做 ...

  7. C语言会场安排问题贪心算法,贪心算法解决会场安排问题多处最优服务次序问题(含源代码).doc...

    贪心算法解决会场安排问题多处最优服务次序问题(含源代码) 西 安年月日-,n},其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源.每个活动i都有一个要求使用该资源 ...

  8. Python项目:The Ship Rendezvous Problem,利用贪心算法解决船舶交会问题

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 Python利用贪心算法解决船舶交会问题 1 Introduction 2 Python Task Greedy Heuristic ...

  9. 装箱问题c语言函数,C语言基于贪心算法解决装箱问题的方法

    本文实例讲述了C语言基于贪心算法解决装箱问题的方法.分享给大家供大家参考,具体如下: 问题描述: 有一些箱子,容量为V,同时有n个物品,每个物品有一个体积(小于等于箱子容量),要求将物品全部装入箱子中 ...

  10. 贪心算法解决活动安排-Python实现(排序+贪心选择)

    贪心算法解决活动安排 问题 问题概述 分析问题 解决问题 编程 编程流程以及数据类型选择 发现问题以及解决 最终实现 总结 程序缺陷以及完善 解题心路历程 问题 问题概述 设有n个活动的集合E={1, ...

最新文章

  1. 科技公司开始重视AI伦理,他们都是怎么做的?
  2. 醒来觉得甚是爱你。--朱生豪
  3. C++的cout高阶格式化操作
  4. matlab中如何添加注释
  5. Java有序表查找:折半查找、二分查找、差值查找和斐波那契查找
  6. 【BZOJ3143】游走,概率计算+高斯消元
  7. ldap java 对象 存储_java - 修改UID在LDAP存储库 - SO中文参考 - www.soinside.com
  8. 蓝桥杯基础练习十六进制转十进制
  9. 开源 Android pdf 阅读器开发总结
  10. Symfony2Book04:Doctrine01-介绍模型(Model)
  11. 剑指 Offer II 024. 反转链表
  12. 38. Element cloneNode() 方法
  13. java矩形类_Java定义矩形类
  14. 拼多多如何拉到足够的人去砍价,砍成一台iPhone12需要多少人?
  15. 了解HTTP和HTPS的S之差
  16. 华为计算机系统叫什么,华为MateBook操作系统是什么
  17. 浙江大学计算机考研2020,浙江大学计算机考研经验分享
  18. 理解Mybatis一级缓存,以及如何真正使用到一级缓存
  19. android正确释放webview,解决Android WebView内存释放
  20. 简述html的文档基本结构,【简答题】简述 HTML 文档的基本结构。

热门文章

  1. 1.5W字Docker详解,从入门到下地干活一条龙
  2. startActivityForResult用法
  3. 5分钟让你明白金融危机爆发原因
  4. python django企业固定资产管理系统pycharm项目源码lw
  5. 显微镜自动聚焦原理是什么_光学显微镜自动聚焦算法研究
  6. swin transformer解读
  7. 项目质量管理的几种常规方法
  8. maker win10有movie_手把手解决win10系统出现windows MovieMaker故障的方法
  9. 【示波器专题】示波器探头的原理深入——有源探头之电流探头
  10. 【个人喜好诗词之一】前赤壁赋