算法第四章作业

  • 你对贪心算法的理解

贪心算法做出的选择是当前看来的最佳选择,然而不一定确保是整体的最优解,所以在证明了当前的贪心算法包含最优解之后,该题才可以使用贪心算法求解。

证明贪心选择性质:⑴第一个选择是对的;⑵在作出贪心选择后原问题转化为同样的子问题;⑶由归纳法知问题具有贪心选择性质。

1.贪心选择性质(全局最优解包含局部最优选择)   2.最优子结构性质

贪心算法只有在具有贪心选择性质时才能保证获得整体最优。

贪心算法跟动态规划的不同之处在于贪心算法的最优解一定包含上一步的最优解,但是不会每一步都保留。而动态规划是穷举法,全局最优解包含某一个局部最优解,每一步都必须保留。

  • 请选择一道作业题目说明你的算法满足贪心选择性质

最优合并问题:k个非降序序列,用2路合并法进行合并,计算最大比较次数和最小比较次数。比较次数=m+n-1

比较最大次数,每次都选取当前最大的两个序列进行合并,看样例的12 11 5 2:最大的12 和 11两个序列先合并,以此类推。欲证最优解包含第一个选择,那么假设最优解不包含第一个贪心选择,那么随意选取11 和 5这两个序列合并。可以知道最后贪心选择的比较次数是比不是贪心选择的比较次数更大的,因而假设不成立,也就是说最优解包含第一个贪心选择。那么作出第一个贪心选择之后,在剩下的5 2和刚刚第一个贪心选择的和23中选择,同样的跟第一个贪心选择类似,所以在作出贪心选择后原问题转化为同样的子问题。因而满足贪心选择性质。

最小比较次数也是类似的,只是要注意因为每次要合并的两个序列必是当前最小的序列,所以必须每一轮合并后再将当前的序列大小按照升序排序。

  • 请说明在本章学习过程中遇到的问题及结对编程的情况

 本章的结对编程更加默契了,我也发现我的同伴编程中的一些小毛病,比如不太注意格式,没有分行写之类的。而我的同伴也认为有时候我的思维应该要更全面一点,不然总是漏掉一两点,总有一些情况过不了。我们在课上遇到的问题是编程可读性差,比如将变量定义为l就跟1会混淆,这个日后需要改正。

目前两个人都有一定程度的互相督促,默契度也逐步提升,将自己的想法与同伴分享也有助于自己思维更加清晰以及提高自己的自信心。

posted @ 2020-11-15 11:28  伍昕童  阅读(96)  评论(0编辑  收藏  举报