贪心算法的证明

算法

Posted by Xiaohan on February 15, 2022

贪心算法的证明

  • 数学归纳法
  • 反证法

问题:给定一组区间,最多保留多少个区间,可以使得区间之间互不重叠。
解答:贪心算法:按照区间的结尾排序,每次选择结尾最靠前的,并且和上一个不重叠的区间。

img.png

证明:
1、假设某一次的选择是[s[i],f[i]]; 其中f[i]是当前所有选择中结尾最早的。
2、假设这个不是最优解,如果最优解的个数为k,那么选择[s[i],f[i]] 得到的值最多为k-1;
3、而最优解的选择是[s[j],f[j]],可以得到个数为k的最优解。此时可知道f[j] > f[i];
4、如果使用[s[i],f[i]] (贪心算法) 去 代替[s[j],f[j]] (最优解),不会影响后续的区间选择。

结论,那么使用[s[i],f[i]] 也至少可以得到 个数为k的最优解,所以使用这个贪心算法的得到的结果同假设的最优解是一样的。
这个贪心算法可以求得最优解。

反证法证明逻辑:假设一个最优解,查看贪心算法的解是否可以代替最优解,如果可以则说明贪心算法是正确的。