贪心算法的证明

贪心算法的证明

  • 数学归纳法
  • 反证法

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

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的最优解,所以使用这个贪心算法的得到的结果同假设的最优解是一样的。
这个贪心算法可以求得最优解。

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值