贪心算法的证明

这里记录一下常见贪心算法的证明,也是算是我自己的一个总结和复习,感觉这个抽象,虽然算法不难,但是要证明比较难,而且每一个种贪心要是没见过还可能真的写不出来,网上看了不少资料结合老师的ppt,如果有说的不对的地方,欢迎大家讨论,单纯当记录。

无论什么贪心算法的证明,我们首先要知道,大体两个步骤:

1.贪心证明

2.最优子结构证明

无论是什么贪心问题,想要证明都是这2步,一般来说,我们的贪心证明常见的就是使用数学归纳法,先k=1,然后k>1,只要成立即可,最优子结构的证明的话,则通常我们是使用的反证法进行证明。

活动安排问题

活动安排问题算是一个常见贪心问题,我就不写代码什么的了,就单纯讲这个算法的正确性证明,设待安排的11个活动的开始时间和结束时间按结束时间的非减序排列如下:

即然我们要证明贪心,那么我们首先假设一个最优解A{i1,i2,i3,......},k表示选择k项活动,当我们的k=1时,意思就是说,我们只选择一个活动,哪个我不管,那么根据结束时间最早进行排序,我们的1号活动是最早的啊,换句话说,这个1号活动,可以替换我们刚刚选择的那个活动也就是k=1时候选择的那个,且不影响最优解个数,因为你就选一个呀,所以说k=1时,最优解可以包含1号活动,这个就是我们的贪心的开始,下面的j就是指,我们随便选的那个

当k>1的时候其实也一样,我们直接假设A\cupB为最优解,B为剩余活动的,A和上面那里一样,A{i1,i2,i3,......ik},即然这样子,那么显而易见B中的第一个就是ik+1,由k=1时,我们可以知道ik+1也是B部分的最优,那么我们B这个部分的最优有没有选择ik+1其实不重要,我们知道整体A\cupB最优,那么假设B*是包含ik+1的最优,那么当k>1,最优可以替换为A\cupB*,即在k>1时候也成立

这一步走完,就要证明最优子结构性质,正常我们都是直接反证法的

那么首先假设B*不是S的最优解,那么意思就是说存在B**是其最优,且B**一定比B*多才可以,那么这样子话B**\cupA才是该问题的最优解啦,这个时候就出现问题了,我们假设的是A\cupB才是最优解呀,那么假设就不成立了,那意思就是说1号活动是存在于后面k>1的,这就是最优子结构证明。

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爷眼睛亮亮的

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值