张三木教你贪心法
贪心算法 贪心算法是动态规划算法的一种特殊情况。它并不 从整体最优上进行考虑,所做的只是当前看来是最好的选择 。当然,我们希望贪心算法得到的最终结果也是整体最优的。 不过,贪心算法并不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须 无后效性 (不可以回溯),即某个状态以前的过程不会影响以后的状态,只与当前的状态有关。 *** 贪心算法的基本要素 最优子结构性质 和动态规划一样,只有具有最优子结构性质的问题才能使用贪心算法。当一个问题的最优解包含了其子问题的最优解,这个问题就具有最优子结构。 贪心选择性质 所求问题的整体最优解可以通过一系列局部最优的选择,及贪心选择来达到。 贪心算法存在的问题 不能保证所有求出来的解都是最佳的 不能用来求最大最小值问题 只能满足部分可行的问题 贪心算法的设计步骤 建立数学模型 将问题分解为若干个子问题 对每一个子问题求解,得到子问题的局部最优解 合并子问题的解,得到问题的整体最优解 *** 经典例题 汽车加油问题 题目: 解析: 这道题的贪心策略是 找到汽车加满油量时可以行驶到的最后一个加油站 ,在此加油站加满油之后继续前进。假如其中有两个加油站之间的距离大于汽车满油时可以行驶的路程,就输出“No Solution!”。 代码如下: #include<iostream> using namespace std;