算法第4章作业

一、贪心算法

1)概念:顾名思义,贪心算法总是做出在当前看来是最好的选择,也就是说贪心算法并不从整体最优上加以考虑,它所做出的选择只是在某种意义上的局部最优选择。

2)优点:相对于动态规划算法,贪心算法更加简单,更加直接且解题效率更高。

3)缺点:贪心算法适用范围小,不是对所有问题都能得到整体最优解。

4)基本要素:

  最优子结构性质:当一个问题的最优解包含其子问题的最优解时,称此问题具有最优子结构性质。

  贪心选择性质:所求的问题的整体最优解可以通过一系列局部最优解的选择,即贪心选择来达到。在贪心算法中,仅在当前状态下最初最好选择,即局部最优选择,然后再去解做出这个选择后产生的相应的子问题。

5)VS 动态规划算法:

  共同点:要求问题具有最优子结构性质。

  不同点:贪心选择性质是贪心算法和动态规划算法的主要区别。在动态规划算法中,每一步所做的选择往往依赖于相关子问题的解。而在贪心算法中,每一步所做的贪心选择可以依赖于以往所做过的选择,但绝不依赖于将来所做的选择,也不依赖于子问题的解。正是由于这种差别,动态规划算法通常以自底向上的方式解各子问题,而贪心算法则通常以自顶向下的方式进行,以迭代的方式做出相继的贪心选择,每做一次贪心选择就将问题1简化为规模更小的子问题。

 

二、例子分析

题目:一辆汽车加满油后可行驶 n公里。旅途中有若干个加油站。设计一个有效算法,指出应 在哪些加油站停靠加油,使沿途加油次数最少。

贪心选择性质:每次都只用判断:在当前站点,汽车所剩油量是否足以行驶到达下一站。若可以,则不加油继续行驶;若不够,则加油。依此类推,每次只考虑当前所剩的汽油量与该站到下一站所耗的汽油量的关系。选出当前情况下的局部最优解。最后得出的解即是该问题的整体最优解。

证明:假设存在一种情况可以获得更少的加油次数,则说明在现有状态的基础上,汽车在途中某几个点选择不加油。这说明汽车在这几个点时,车上所剩的汽油量足以支撑汽车抵达下一站点。这与上面之前我们设立的条件相矛盾,所以该假设不成立。

 

三、结对编程情况

在这一章的结对编程中,我们的默契度有所提高。在面对题目时,我们会各自针对问题进行分析,在有了大致思路后,进行分享和讲解,此时,另一个人则在听解说时,找出另一个人的思维漏洞,完善思路。同时在后来敲代码的过程中,一人负责检查代码的正确性以及找出特殊样例,完善思路。

问题:对于背包问题的解法还不是很熟练,特别是对于其非递归方式的解法仍无法独立完成。

posted @ 2018-12-02 00:17  cc-wanna  阅读(181)  评论(0编辑  收藏  举报