算法总结:贪心算法

贪心算法

贪心算法是动态规划算法的一种特殊情况。它并不从整体最优上进行考虑,所做的只是当前看来是最好的选择。当然,我们希望贪心算法得到的最终结果也是整体最优的。
不过,贪心算法并不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须无后效性(不可以回溯),即某个状态以前的过程不会影响以后的状态,只与当前的状态有关。


贪心算法的基本要素
最优子结构性质

和动态规划一样,只有具有最优子结构性质的问题才能使用贪心算法。当一个问题的最优解包含了其子问题的最优解,这个问题就具有最优子结构。

贪心选择性质

所求问题的整体最优解可以通过一系列局部最优的选择,及贪心选择来达到。

贪心算法存在的问题
  • 不能保证所有求出来的解都是最佳的
  • 不能用来求最大最小值问题
  • 只能满足部分可行的问题

贪心算法的设计步骤
  1. 建立数学模型
  2. 将问题分解为若干个子问题
  3. 对每一个子问题求解,得到子问题的局部最优解
  4. 合并子问题的解,得到问题的整体最优解

经典例题
汽车加油问题

题目:
在这里插入图片描述
解析:
这道题的贪心策略是找到汽车加满油量时可以行驶到的最后一个加油站,在此加油站加满油之后继续前进。假如其中有两个加油站之间的距离大于汽车满油时可以行驶的路程,就输出“No Solution!”。

代码如下:


#include<iostream>
using namespace std;
#define MAX 1005
int counter; // 记录最少加油次数
int distances[MAX]; // 记录加油站之间的距离
int canDrive; // 一次加油可以行驶的距离
int num; // 加油站个数

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值