算法第四章作业

算法第四章作业

对贪心算法的理解

所谓贪心算法,即是指从问题的初始状态出发,通过若干次的贪心选择而得到的最优值(或较优值)的一种求解问题策略,即贪心策略。其实贪心算法简单来说,就是在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,所做出的仅是在某种意义上的局部最优解。贪心算法设计的关键在于贪心策略的选择,但贪心算法不是对所有问题都能得到整体最优解,选择的贪心策略必须具备某个状态以后的过程不会影响以前的状态,只与当前状态有关的性质。在使用贪心算法的思想来解决算法问题时,主要是按照下面这样的思路进行:

  1. 将问题抽象为数学模型,也即是建立数学模型来描述问题。

  2. 把求解的问题分成若干个子问题。

  3. 对每一子问题求解,得到子问题的局部最优解。

  4. 把子问题的解局部最优解合成原来问题的一个解。

贪心算法主要适用于由局部最优策略能导致产生全局最优解的这样一些算法问题的解决中,其每一步都依赖于当前已经做出的所有选择。贪心算法也是一种自顶向下(就是每一步,根据策略得到一个当前最优解。传递到下一步,从而保证每一步都是选择当前最优的。最后得到结果)的算法。贪心算法具有的一个特征就是贪心算法所作的选择可以依赖于以往所作过的选择,但决不依赖于将来的选择,也不依赖于子问题的解,因此贪心算法与其他算法相比具有一定的速度优势。如果一个问题可以同时用几种方法解决,贪心算法应该是最好的选择之一。

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

在汽车加油问题中,假设在加满油可行驶N千米的这段路程上任取两个加油站A,B,且A距离始点比B距离始点近,则若在B加油不能到达终点,那么在A加油一定不能到达终点,因为m+N<n+N(m和n分别代表A,B两个加油站距离始点的距离),即在B站点加油可行驶的路程比在A站点加油可行驶的路程长n-m千米,所以只要终点不在A,B之间而在B的右边的话,根据贪心选择,为使加油次数最少就会选择距离加满油的点远一些的加油站去加油,因此,加油次数最少满足这样的贪心选择性质。

本章学习问题及结对编程情况

1. 在学习贪心算法的过程中,虽然通过背包问题,人民币找零等一些例题的讲解,基本理解了贪心算法解决问题的基本思路,但是真正思路上在解决问题时,开始不知道怎么从大的问题分解成可以寻找局部最优解的子问题,再者在由算法编写代码是选择递归还是采用循环的问题上,因为出现过递归和循环选择不当造成超出内存和运行超时的问题,这也是解题思路出现问题的原因,所以还是想通过练习,来培养解题思路。

2. 截止到目前,我和队友在结对编程的过程中也在尝试不同的分工,因为在之前的结对编程的过程中我主要负责问题分析,而队友主要负责根据算法设计思路来进行代码实现,但我们也发现随着这样固定的分工,自己在编程上一些欠缺的地方始终没有得到很好的弥补,所以转而我开始负责代码编写,以这种“强制”的方式来规范自己的代码编写,再者在算法设计方面,我们也会彼此彼此进行细致的讨论,来选择合适的算法,并完善思路的设计。总体来说配合还是很好的,而自己在这个过程中也是在更规范地编程以及代码的书写。队友的结对编程也不再仅仅只放在一种思路上,现在更多地是经过讨论,找出更优解,找出升级版解法。

posted @ 2019-11-20 17:56  愿我如苔  阅读(113)  评论(0编辑  收藏  举报