贪心算法之证明要点----算法导论16.2---5
目标:只需证明存在一个最优解是以贪心选择得到的,就ok了。一般先假设一个最优解,用剪切黏贴技术(参考算法导论)
两个性质:
贪心选择性质:一个全局最优解可以通过局部最优得到。即存在一个最优解是以贪心选择开始的。
最优子结构:一个最优解包括期子问题的最优解。即一个n的最优解分解成第一步的贪心选择,和n-1的子问题,这个n-1的子问题也是最优的。
最后要说明,第一步的贪心选择和n-1的子问题可以合并成一个全局最优解。
现以算法导论16.2---5习题做说明
问题如下:给定数轴上的n个点,求最少能够包含给定点的单位闭区间集合。
贪心选择是:设一个当前开始选择的坐标。从坐标最小的点开始,直到最接近的单位闭区间长度的点,这一段,用一个闭区间来覆盖。当前的点=下一个最小的点,重复,直至结束。
现证明这个可以得到最优解。
贪心选择性质:
现假设一最优解A={a1,a2……an}为单位闭区间集合。对m个点以坐标排序,从小到大。
现有一个单位区间ak,从m个点中最小的点开始,长度为单位长度。a1的起始坐标必然<=ak的起始坐标(第一点的坐标),a1覆盖点的数目必然<=ak的数目(因为ak是从第一个点开始的)(A-a1) U ak,(剪切黏贴)也是一个最优解。
最优子问题性质:
做出第一步的贪心ak之后,A-ak是子问题m-1的最优解。
反证法:假设存在有一个更优的解B,B U ak必然是比A更优的解,矛盾。
贪心选择ak和子问题可以合并成一个最优解。