算法第四章作业
一、你对贪心算法的理解
1、贪心算法(又称贪婪算法)是指,在对求解问题时,总是做出在当前看来是最好的选择。
(1) 贪心选择性质:
一个问题的整体最优解可通过一系列局部的最优解的选择达到,并且每次的选择可以依赖以前作出的选择,但不依赖于后面要作出的选择。
这就是贪心选择性质。对于一个具体问题,要确定它是否具有贪心选择性质,必须证明每一步所作的贪心选择最终导致问题的整体最优解。
(2)最优子结构性质:
当一个问题的最优解包含其子问题的最优解时,称此问题具有最优子结构性质。问题的最优子结构性质是该问题可用贪心法求解的关键所在。
在实际应用中,至于什么问题具有什么样的贪心选择性质是不确定的,需要具体问题具体分析。
二、请选择一道作业题目说明你的算法满足贪心选择性质
1、问题描述:
数轴上有n个闭区间[ai,bi]。取尽量少的点,使得每个区间内都至少有一个点(不同区间内含的点可以是同一个)。
2、贪心策略:
按照b1<=b2<=b3…(b相同时按a从大到小)的方式排序排序,从前向后遍历,当遇到没有加入集合的区间时,选取这个区间的右端点b。
(1)区间包含的情况:当小区间有一个点被取到时,大区间一定有一个点被取到。所以我们应当优先选取小区间中的点,从而使大区间不用考虑。
按照上面的方式排序后,如果出现区间包含的情况,小区间一定在大区间前面。所以此情况下我们会优先选择小区间。
(2)排除情况1后,一定有a1<=a2<=a3......
对于区间1来说,显然选择它的右端点是明智的。因为它比前面的点能覆盖更大的范围。
三、请说明在本章学习过程中遇到的问题及结对编程的情况
贪心算法相对动态规划较容易,经过一段时间的磨合,合作编程的效率有所提高。