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

2023-10-26

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. 该算法直接给出了加油站之间的距离,并保证了加油站之间的距离都小于汽车一次加满油跑的距离,否则该算法会存在与事实不符问题(汽车容易没油,半路抛锚)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

贪心算法解决汽车加油问题 的相关文章

随机推荐

  • Vue实现面包屑功能(el-breadcrumb)

    vue3 elementPlus 实现面包屑功能 文章后面附效果图 数据结构 首先展示一下数据基础结构 红色框框是默认存在的数据 其他数据就是通过选中侧边栏菜单进行数据插入 关键数据字段为 path meta 准备侧边栏 首先需要自己准备一
  • 常用对象类型之间的转换

    ads point 是原来的ADS 编程中定义的一种数据类型 其定义为 typedef ads real ads point 3 而ads real 则被定义为 typedef double ads real 可以看出 ads point
  • 前端知识14:webpack打包图片资源

    需要下载url loader 和 file loader两个包 前者依赖于后者 安装 npm i url loader file loader D 图片在css中使用的场景 注意图片在src目录下 注意图片路径的写法用的是相对路径 引用插件
  • C++ vector 容器浅析

    C STL 教程 C STL 教程 C vector 容器浅析 C vector 容器浅析 个人理解 vector就是一个模板类 具有元素多少可以变化的优点 一般为了根据数据类型 会选择显式实例化 下为一个利用vector模板 将一维数组转
  • 【华为OD统一考试B卷

    题目描述 一群大雁往南飞 给定一个字符串记录地面上的游客听到的大雁叫声 请给出叫声最少由几只大雁发出 具体的 1 大雁发出的完整叫声为 quack 因为有多只大雁同一时间嘎嘎作响 所以字符串中可能会混合多个 quack 2 大雁会依次完整发
  • blender 线框效果/Line Art

    Blender 2 93 新功能 Line Art 效果 哔哩哔哩 bilibilihttps www bilibili com video BV19Z4y1w7mk from search seid 1496511710922071136
  • 在Linux系统如何修改profile文件后立即生效呢?

    方法1 让 etc profile文件修改后立即生效 可以使用如下命令 etc profile 注意 和 etc profile 有空格 方法2 让 etc profile文件修改后立即生效 可以使用如下命令 source etc prof
  • go语言字符类型byte与rune

    字符串中的每一个元素叫做 字符 在遍历或者单个获取字符串元素时可以获得字符 Go语言的字符有以下两种 一种是 byte 型 是 uint8 的别名 代表了 ASCII 码的一个字符 另一种是 rune 类型 代表一个 UTF 8 字符 当需
  • Java中JDBC的数据库连接池

    数据库连接池 池参数 所有池参数都有默认值 初始大小 10个 最小空闲连接数 3个 增量 一次创建的最小单位 5个 最大空闲连接数 12个 最大连接数 20个 最大的等待时间 1000毫秒 四大连接参数 连接池也是使用四大连接参数来完成创建
  • 快速+完美+准确解决SpringBoot项目打包后的SNAPSHOT.jar中没有主清单属性的问题

    目录 问题再现 问题解决 结果 问题再现 xxxx 0 0 1 SNAPSHOT jar中没有主清单属性 问题解决 1 出问题的pom xml文件
  • 一个build脚本欣赏

    build scripts My basic build bat file looks like this echo off erase ThemeChanger exe copy Loader ArmRel Loader exe copy
  • Nginx安装

    目录 1 前期准备 2 将安装文件上传至安装目录 3 nginx安装 3 1安装openssl 3 2安装zlib 3 3安装pcre 3 4 安装nginx 4 nginx配置 4 1 检查nginx是否安装成功 4 2 nginx配置普
  • 怎么使用java servlet +jsp 实现一个简单的信息管理系统

    写之前看一下命名规范 数据库命名规范参考 Java命名规范参考 一 绪论 昨天 在群里看见一个大二学生叫帮忙代做Java课设 心怀着锻炼技术又可赚点零花钱就帮忙代做了 下面来说说怎么快速使用servlet jsp进行一个简单的信息管理系统搭
  • 20210715:力扣第1846题:减小和重新排列组合后的最大元素(java)

    题目 给你一个正整数数组 arr 请你对 arr 执行一些操作 也可以不进行任何操作 使得数组满足以下条件 arr 中 第一个 元素必须为 1 任意相邻两个元素的差的绝对值 小于等于 1 也就是说 对于任意的 1 lt i lt arr l
  • 归并算法

    归并算法 1 在解释算法优缺点的时候 首先要提到2点 一是比较的次数 二是数据要改变或移动的次数 第一个比较好理解 那什么叫改变和移动的次数呢 比如说2这个数据在存储上存储的是10 如果现在2变成4 那么存储就变成了100 这个过程需要将2
  • TestNG测试的并发执行详解

    TestNG在执行测试时 默认suitethreadpoolsize 1 randomizesuites false 即非并发顺序执行测试 但是TestNG提供了多种方式 以支持测试的并发多线程执行 1 针对多个测试规划的情况 为每个tes
  • java实现滑动验证码

    准备工作 1 若干原图片 下文称为原图 2 一张抠图形状图片 下文称为滑块模板 抠出来的图称为滑块 3 一张抠图边框图片 下文称为滑块边框 注意 滑块模板尺寸必须小于原图尺寸 实现思路 1 后端 在若干原图中随机一张原图 2 后端 根据滑块
  • kali linux 连接windows物理主机的安卓模拟器的方法

    不能直连 需要做个端口转发 具体如下 netsh interface portproxy add v4tov4 listenport 18888 listenaddress 0 0 0 0 connectport 62026 connect
  • Mbed在自己的stm32系列平台移植适配(三)

    Mbed在自己的stm32系列平台移植适配 适配平台 cpu STM32F103RCT6 外设 peripheral pin disciption LED1 PC 0 LED2 PC 6 UART5 TX PC 12 no remap UA
  • 贪心算法解决汽车加油问题

    文章目录 1 何为贪心算法 2 贪心算法的特点 3 汽车加油问题 问题描述 图解 代码实现 小结 1 何为贪心算法 贪心算法又称贪婪算法 是指在对问题求解时 总是做出在当前步骤看来是最好的选择 也就是说 不从整体最优上加以考虑 所做出的是在