数学归纳法证明贪心实例

将描述更正了一下,更正后的描述更严谨,但是只更正了第一个,剩下的还没有修
1.选择不相交区间问题(具体见一本通提高篇P4)
假设已经选择的区间是最优的方案的一部分,即我们可以通过已经选择的区间构造出最优解,下面考虑如何选择会使方案达到最优。
显然,由于我们可以通过已经选择的区间构造出最优解,所以当我们扫描到的区间与已经选择的区间之间相交的时候,就不用考虑当前扫描到的区间了,于是考虑下一个最早的合法的区间A
因为是按照结束时间升序排序的,如果我们不选择当前这一个合法的,而是去选择之后的合法的(设为B),那么无论最后的方案是怎样的,都可以将B换成A从而符合题意。
由数学归纳法,最开始一个都没有选的时候可以看作是最优方案的一部分,因此算法正确

2.区间选点问题(具体见一本通提高篇P6)
假设已经选择的点和被覆盖的区间是最优的方案的一部分(注意我们是按照区间考虑的),下面考虑如何选择会使方案达到最优。
首先是一个前提:如果一个区间(设为A)在被考虑之前已经被若干个点给覆盖了,那么就不用再考虑主动在这个区间上放点了。
因为是按照结束位置升序排序的,对任意一个被考虑主动放点的区间(此时这个区间前面的区间都已经被覆盖了哈,不用考虑了),点都是放在此区间的右端点处最好。若此时还要考虑A,显然没有考虑后面的未被覆盖的区间优(决策包容性,因为是按照结束位置升序排序)
对于当前的状态,我们显然是选择第一个未被覆盖的区间更优(决策包容性),不会再去考虑放弃当前的而去选后面的
由数学归纳法,最开始一个点都没有的时候可以看作是最优方案的一部分,因此算法正确

3.区间覆盖问题(具体见一本通提高篇P9)
假设从左到右已经覆盖了一段指定区间了且选择的区间是最优的方案的一部分,下面考虑如何选择会使方案达到最优。
由决策包容性易得,已经被覆盖的指定区间就不用在考虑了,因此一本通直接将s更新为右端点坐标(不会在后面了,因为决策包容性)
由数学归纳法,最开始一个点都没有被覆盖的时候可以看作是最优方案的一部分,因此算法正确

4.acwing110防晒
我们按照我们的代码证明,即按照maxspf递增排序,每次选择spf最小的使用
假设当前选择已经是最优的一部分了,我们考虑最新的一头奶牛,这一头奶牛能够找到至少一瓶防晒霜使其被选择。如果最优的方案没有选择这头奶牛,那我们考虑这一瓶防晒霜,如果在这个方案中没被使用,那我给这头奶牛肯定更优,如果被使用了,我把这瓶防晒霜给这头奶牛答案不变,所以最优方案一定会选择这头奶牛。如果给这头奶牛的防晒霜不是spf最小的,那么就可能这样:[ 0 【 0 ] 】,其中0代表防晒霜,如果选择的是spf最小的,那么如果存在一种更优的方案使得不选spf最小的,那么这个spf最小的一定被另一头奶牛用了(不然的话我就可以让这头奶牛选这个spf最小的),此时我们交换这两头奶牛的防晒霜显然都是符合题意的且答案不变,所以这个方案不是更优的,所以得证

如果按照minspf递增排序,每次选择spf最小的防晒霜的问题出现在哪里?实际上,出现在“无法交换”

假设我们已经得到了最优方案的一部分,当前正在考虑的这头奶牛,如果他能涂那我们选择哪一瓶?感觉应该选择spf最小的(设为x),然而如果这么选,我们来证明不一定最优。假设这头奶牛选择了另一瓶spf更大的(设为y),然后剩下的防晒霜给后面的奶牛使用并弄出了最优方案,我们能不能够交换xy的使用者呢?如果能够交换,那么我们的策略就是正确的(一定能够构造出一种最优方案使得是按照我们的策略构造的)。然而在这里,我们只按照minspf递增排序,可能y的spf比当前奶牛的maxspf小但是比使用x的奶牛的spf大,这个时候就不能再交换了,比如[【0】0]。

而其他的构造方法用数学归纳法证明的时候都是“可以交换的”

我们也可以换一个对象考虑,考虑防晒霜

4.带限期和罚款的单位时间任务调度
跟上面差不多,不妨证明一下

image

input:aaabc
output:abaca

做法:统计每个字母的频率,设已经构建好了的字符串为str,每次操作中选择频率最高的字母(如果有多个频率最高的字母任意选择一个)接在str后面,同时将这个字母的频率减一。重复上述过程即可
证明:假设当前已经通过上述算法构造好了str,那么对于下一个字母,假设我们不选择剩下还没有放置的字母中频率最高的(设为b,有m个),选了一个严格更小的字母(设为a,有n个,m>n)且可以构造出最优解,那么在这个最优解当中,b是不可以挨在一起的,尝试将a与某个b进行位置的替换,是一定可以替换成功的,实际上如果不能替换成功的话,就说明这mb的两边全部都是a,也就是至少有m1a,加上我们这一次放的a,就至少有ma,与m>n矛盾
当然官方的做法是跟LOG很像,具体见下
image

posted @   最爱丁珰  阅读(61)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示