(1)贪心策略:每次选择右端点最小的点,且仅当当前被选区间左端点大于上一个选择的右端点时,才新增选点。
(2)贪心性质的证明:
设区间集合E = {1,2,...,n}以按右端点的坐标升序排列,区间1具有最小的右端点。
a.贪心选择性质:设A⊆E是最优解且A中覆盖的第一个区间(即右端点最小的区间)是k。若k = 1,则最优解包含区间1;若k > 1,因为区间按右端点升序排列,区间1的右端点<=区间k的右端点,故区间1与A中除k外的区间兼容。令 B = A - {k}∪{1},则 B 覆盖的区间数与 A 相同,因此 B 也是最优解。b.最优子结构性质:设原问题的最优解为A,由贪心选择性质,A包含区间1。记区间1的右端点为R1,则A中剩余的区间是E中左端点 > R1的区间构成的子集合E',设A' = A - {1}。若A'不是E'的最优解,则存在E'的最优解B'且|B'| < |A'|, 则B' ∪ {1} 是E的解且|B'| + 1 < |A|。此与A是最优解矛盾。
(3)时间复杂度:主导因素为对右端点进行排序,时间复杂度为O(nlogn)。
- 对贪心算法的理解
(1)贪心算法只考虑当前情况下最有利的选项,不考虑全局最优。
(2)贪心算法不是万能的,不能盲目套用,必须满足贪心选择性质(局部最优能能通向全局最优)和最优子结构性质(原问题最优解包含子问题最优解)这两个条件。因此寻找贪心策略时需首先从这两个方面进行考虑。
(3)在设计贪心策略时应该多尝试找反例,只要有一个例子用该策略得到的不是最优解,就说明策略无效。
(4)要弄清楚动态规划、贪心法和回溯法的区别。贪心是“一条道走到黑”,动态规划是“记着路找最优”,回溯是“走错了回头换条路”。