贪心算法

张三木教你贪心法

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

算法第四章作业

房东的猫 提交于 2019-12-05 07:16:49
1、你对贪心算法的理解 贪心算法就是每一步都选择最优的,从而问题最终取得最优解。如果一个问题具有贪心选择性质和最优子结构性质,那么使用贪心法来对其求解总能求得最优解。 2、请说明汽车加油问题的贪心选择性质 当汽车所剩油量不能到达下一个加油站时就加油,否则不加。 3、请说明在本章学习过程中遇到的问题及结对编程的情况 不太清楚什么叫做贪心选择性质。结对编程一切顺利进行中。 来源: https://www.cnblogs.com/sergio415/p/11913316.html

算法第四章作业

£可爱£侵袭症+ 提交于 2019-12-05 07:10:43
1.对贪心算法的理解 贪心算法看上去和动态规划法很像,但是两者还是存在一定差别的。动态规划法从整体寻找最优解,而贪心算法所做的选择只是在某种意义上的局部最优选择,即使如此,但是大部分问题还是可以通过贪心算法产生整体最优解而得到解决。其中最为重要的就是贪心策略的选取,不同的贪心策略可以得到不同的结果,如果要否定一种贪心策略,就要找到反例来证明这种贪心策略下得到的不是最优解 。 2.汽车加油问题的贪心选择性质 已知汽车加满油后可以行驶n公里,且旅途中有 k个加油站,要求加油最少的次数。我们把每次路过加油站时的耗油量和这个加油站距下个加油站的距离比较,若小于则加一次油,若大于则继续向前,若加了油之后还不能到达下一个加油站则无法到达目的地,输出No Solution!”。 3.遇到的问题及结对编程的情况 遇到的问题:不能很好的找到正确的贪心策略,甚至会在一个错误的策略上纠结很久,而且在举例反证的过程中有困难; 结对编程情况:我们一共做出了两道题,主要都是对方打的,第三题我们一开始只想到了暴力破解,后面的贪心策略是课后想出来的,所以还是要多做题吧。 来源: https://www.cnblogs.com/247403wy/p/11913035.html

算法第四章

跟風遠走 提交于 2019-12-05 06:57:42
一、对贪心算法的理解   个人理解,贪心算法是类似 数学归纳法 的思想,从局部拓展到整体,即从寻找 局部最优 的选择,一直这样以同样的贪心策略选择下去,最后整体就会是最优解了。举个例子,就像货币找零问题,需要求找的纸币最少,则此处的贪心策略是按面额从大到小来找零,第一步贪心选择就是找最大面额的,这是第一步的最优解;第二步贪心选择找第二大面额的,以此类推,每一步都是当前的最优解,最后整体必然是最优解。但并不是所有问题都能成功找到对应的贪心策略,所以要权衡什么时候使用贪心算法什么时候使用动态规划。另外,贪心算法最重要的就是找对贪心策略,一定要尝试举出反例,找对贪心策略是重中之重。 二、汽车加油问题的贪心选择性质   首先加满油可以行驶 n 公里,就要判断每两个加油站直接的距离不能超过 n , 否则就到不了下一个加油站,就输出 “No solusion!” 。至于如何计算最少加油次数,我的算法是计算第一个站到最后一个站的总共里数除以每次加满油后可以行驶的公里数 n, 得出总加油次数。 三、学习中遇到的问题及结对编程的情况 1、学习中遇到的问题   看一个题就可能很快想到贪心策略但并没怎么去思考反例就直接编程实现了,或许会导致后面发现贪心策略错误需要重新思考贪心策略再重新编程实现需要更多时间。另外需要多尝试是否有不同的贪心策略来解决一道题,多方面思考下。 2、结对编程的情况  

算法第四章作业

大兔子大兔子 提交于 2019-12-05 05:10:54
1.你对贪心算法的理解 贪心算法满足最优子结构性质和贪心选择性质。它只要解决了贪心选择方面的问题,就可以很快的解决问题。 2.汽车加油问题的贪心选择性质 首先如果有两个加油站的距离大于加满油后汽车所能行驶的距离,那车永远也到不了终点。 接下来分析怎么样加油次数最少,如果到下一个加油站的距离没有超过现在汽车所能行驶的距离,那么可以不用加油。否则则需要加油才能到达下一个加油站。 此思路比较简单,就省略证明步骤。这个就是贪心选择的最优解。 3.请说明在本章学习过程中遇到的问题及结对编程的情况 就很多时候没找到贪心的最优解,还有没审请题目,还是得多做题,多思考。 来源: https://www.cnblogs.com/chenyuqi32-2-11/p/11908652.html

算法第四章作业

血红的双手。 提交于 2019-12-05 05:09:27
1.你对贪心算法的理解 贪心算法在每次做选择的时候并不从整体最优上加以考虑,它所作出的选择只是当前状态下的最好选择。能用贪心算法解决的问题要具有这两个性质:贪心选择性质和最优子结构性质。 贪心选择性质就是问题的整体最优解可以通过一系列的局部最优的选择,即贪心选择来达到。证明这个性质可以用反证法来证明。最优子结构性质:当一个问题的最优解包含其子问 题的最优解时,就具备最优子结构性质。 2.请说明汽车加油问题的贪心选择性质 汽车加油问题的贪心选择性质就是如果所剩的油不足够汽车走到下一个加油站时,那么在这站就要加油。 3.请说明在本章学习过程中遇到的问题及结对编程的情况 本章学习遇到的问题主要是汽车加油问题刚开始我通过的程序非常长而且逻辑有点混乱,伙伴邓汝彬一开始也难以看懂,而且变量设置不大合理,但 后来我们进行探讨,发现我的代码上有很多是可以进行删减的,以贪心算法为核心去进行删减,最后缩减成20行左右的代码通过了,所以结对编程的 效果就完全体现出来了,通过互相的讨论和改进,可以融入两个人不同的想法,促使自己更快的进步。 来源: https://www.cnblogs.com/fengwanthousand/p/11908599.html

算法第四章作业

 ̄綄美尐妖づ 提交于 2019-12-05 05:06:59
1.你对贪心算法的理解 答:只考虑局部最优解,而当局部最优解是最优解的子集时,贪心算法的结果就是全局的最优解。 2.请说明汽车加油问题的贪心选择性质 答:如果哪两个加油站距离大于加满油能行驶的距离则输出No solution!计算车到接下来每个加油站的距离,不足则加一 3.请说明在本章学习过程中遇到的问题及结对编程的情况 答:对原理的不理解导致编程困难 来源: https://www.cnblogs.com/szl666666/p/11908537.html

算法第四章作业

柔情痞子 提交于 2019-12-05 05:02:21
1.你对贪心算法的理解   贪心算法总是做出在当前看来是最后的选择。   贪心算法并不从整体最优加以考虑,所作的选择只是在某种意义上的局部最优选择。   利用问题本身的一些特性,可以用贪心算法,比用动态规划法更简单,更直接,解题效率更高。   贪心算法不是对所有问题都能得到整体的最优解,但在范围相当广的许多问题上能产生整体最优解,如最小生成树问题,图的单源最短路径问题等。   能用贪心算法求解的问题有两个重要的性质,贪心选择性质和最优子结构性质。 2.请说明汽车加油问题的贪心选择性质   贪心选择策略是假如要到达下一个加油站的油不够,则在当前加油站加油,加油次数加一,否则不加油直接去下一个加油站。每到达下一个加油站后重复贪心策略直到到达终点或因为油不够不足以到达下一个加油站。   加油次数为count,共有 n 个加油站可供加油( n+1 是终点),每个加油站 i 可加油或不加油,状态为 ai , ai = 1 表示加油, ai = 0 表示不加油, count=a1+a2+a3+ …… +an; 如果当前加油站是i,此时油量足够到达下一个加油站, ai = 0; 若不按贪心算法策略, ai = 1, 则会导致结果 count 比按照贪心策略 count 大,与预期违背,这就证明了贪心选择性质。 3.请说明在本章学习过程中遇到的问题及结对编程的情况  

算法第四章作业

痴心易碎 提交于 2019-12-05 04:57:55
1.你对贪心算法的理解 根据策略只考虑局部最优解从而得到整体最优解 2.请说明汽车加油问题的贪心选择性质 若存在两个加油站距离大于最大油量可行驶距离,直接输出“No Solution!” 若剩余油量可到下一个加油站则继续行驶,否则加油。 3.请说明在本章学习过程中遇到的问题及结对编程的情况 有些定势思维,遇到两种会场问题时不能得到正确的贪心策略,需要多加思考 来源: https://www.cnblogs.com/qq1065928103/p/11908055.html

算法第四章作业

假装没事ソ 提交于 2019-12-05 04:54:05
一. 对贪心算法的理解   贪心选择和最有子结构是贪心算法的基本要素。   贪心算法并不是在整体上考虑整个问题的最优解,而是通过通过只考虑当前(局部)最优解从而得到整体最优解。   能用贪心算法解决的问题必须具有最有子结构性质,即一个问题的最优解包含其子问题的最优解。与动态规划不同的是,贪心算法对子问题的每一次求解都直接影响到结果,而动态规划在对当前问题进行选择时会根据之前的结果。 二. 汽车加油问题的贪心选择性质   在不耗光所储油量的前提下,每个子问题的贪心选择是汽车最远能到的加油站,汽车每次都行驶到最远的加油站,则所需停下来加油的次数也是最少的。 三. 在本章学习过程中遇到的问题及结对编程的情况   遇到的问题:在学习本章的时候,一开始并不能理解贪心算法的内涵,在解决问题的时候并不能快速地决定贪心策略。   结对编程情况: 本次实践与结对编程伙伴有较良好的沟通,在解决问题的时候都能提出各自对问题的看法。 来源: https://www.cnblogs.com/gdufsczg/p/11907884.html