算法第四章作业

算法第四章作业

组员:高珞洋,何汶珊

对贪心算法的理解

贪心算法来源于动态规划,都是要求得全局最优解。他们都是选择性算法,从一个集合种选择适当的元素加入解集合。

在动态规划中,难点在于找到递推公式,并在代码中利用递推公式进行求解。尝试每种可能的情况并选择最优的情况。
动态规划的选择策略是试探性的,每一步要试探所有的可行解并将结果保存起来,便于试探结束后进行回溯;或者每次试探都进行比较,保存最优解。

与其相比,贪心算法在编程过程中会简单很多,因为它在每次选择的时候考虑的是局部最优解。
这就要求问题的局部最优解的集合是全局最优解,即证明贪心策略,这也是贪心算法的难点所在,通常用反证法求解。
贪心算法不是对所有问题都能得到整体最优解,选择的贪心策略必须具备无后效性,即某个状态以后的过程不会影响以前的状态,只与当前状态有关
当证明贪心算法后,算法设计的关键是贪心策略的选择,即明确每次贪心选择的依据。如在非0-1背包的问题中,选择的依据是物品单位重量的价值,而非单纯的重量或者价值。

事实上,既然贪心算法来源于动态规划,理论上能用贪心算法解决的问题都能用动态规划解决。但是贪心算法能比动态规划具有更低的时间和空间复杂度,代码编写也更加简单。

说明汽车加油问题的贪心选择性质

汽车加油问题

一辆汽车加满油后可行驶 n公里。旅途中有若干个加油站。设计一个有效算法,指出应 在哪些加油站停靠加油,使沿途加油次数最少。
输入格式:
第一行有 2 个正整数n和 k(k<=1000 ),表示汽车加满油后可行驶n公里,且旅途中有 k个加油站。 第二行有 k+1 个整数,表示第 k 个加油站与第k-1 个加油站之间的距离。 第 0 个加油站表示出发地,汽车已加满油。 第 k+1 个加油站表示目的地。
输出格式:
输出最少加油次数。如果无法到达目的地,则输出“No Solution!”。

贪心选择性质

以能到达为前提,假设最少加油次数为x
设在加满油后可行使N千米,这N千米内有两个及以上个加油站,任取两个A,B;A距起始点的距离为m,B距起始点的距离为n
则若在B加油不能到达终点,那么在A加油必不能到达终点;若在B点加油,则比在A点加油可行驶的路程多n-m
于是有两种情况,一是终点距离A点小于N,二是终点距离A点大于N小于N+n-m

第一种情况下在A点加油和在B点加油都能到达终点,结果是一样的。
而在第二种情况下在A点加油不能到达终点,而要在B点再加一次油;而在B点加油能直接到终点。

于是有以下策略:

  1. 在油耗尽前能到达最远的加油站加油
  2. 非1策略

由上述分析可得,选择策略1的结果≤选择策略2的结果。即可选择策略1作为最优策略
因此可证明其贪心选择性质

结对编程情况

结对编程呢不全是优点,比如在编程的时候,两个人的意见相左,就会对编程产生不利影响。
本周编程做实践题的时候,第二题卡题了。我选择往下打第三题,而同伴则在纠结第二题错在哪里。
这就导致我敲完第三题后给她讲解的时候她会有点心不在焉的迹象。
不过她也能理解啦,无伤大雅。而且有时候两人分工也能加快解题速度。

posted @ 2019-11-21 19:56  BlackDn  阅读(173)  评论(0编辑  收藏  举报
https://blog-static.cnblogs.com/files/luoyang0515/live2d.js https://files.cnblogs.com/files/kousak/waifu.css
Live2D