贪心算法之证明要点----算法导论16.2---5

来源:互联网 发布:nginx 配置http 307 编辑:程序博客网 时间:2024/06/04 00:57

       

        贪心算法之证明要点----算法导论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的最优解。

反证法:假设存在有一个更优的解BB U ak必然是比A更优的解,矛盾。

贪心选择ak和子问题可以合并成一个最优解。

原创粉丝点击