算法竞赛中常见的博弈算法

本文的讲解是让你快速了解竞赛中几种常见的博弈以及处理方式,建议看完本文后再看文中的两篇参考博客。

想要真正较为全面的了解博弈论:请看书,看这里(历史及分类),或者看这里。或者移步网易公开课(以上内容都只能大概了解

没兴趣具体了解,请看下面,(差不多足够应付竞赛中需要的相关知识了)

参考博客1(易懂)

参考博客2(比较全面的解释)

理解前提:

1.博弈论有一个默认的前提就是每个人做的都是对自己有利最佳策略。(能赢就不要输,不能赢也要给对方制造麻烦)

2.这里的模型都是取石子的模型。(竞赛中请注意抽象出模型)

3.先取石子的叫先手,后取的叫后手。(这种叫法好像在王者荣耀)

4.几种模型都采用了竞赛中常见的博弈,其他类型,例如(囚徒困境,海盗分金币

这里假设几种模型都是两个人取石子(石子有若干堆)的情况,具体条件下面会说明

常见的四大模型:

1.巴什博奕:适用于只有一堆石子的情况。

有一堆 n 个石子,两个人轮流从这堆石子中取石子,规定每次至少取一个,最多取 m 个,最后取光者胜。

考虑哪些情况是必赢的局面:

1.如果n=m+1,先手取的数量在1到m之间,那么无论先手怎么取,后手必赢(因为博弈的前提是每个人都做最佳策略)

2.如果n=k*(m+1)+s,(k为正整数,s小于等于m)

则先手必胜策略为:先手先把s个零头拿了,然后看后手如何拿,先手再拿的数量,一定要与后手拿的数量加起来等于m+1,这样先手必胜。为什么呢,因为先手拿了s个后,剩下的石子数是m+1的k倍,不管后手怎么拿,只要先手保证把当前的m+1拿完就赢定了。

结论:n%(m+1)=0时,后手必赢,反之先手赢。

变式:最后取光者输,实际上可以转化成取一堆n-1个石子,最后取光者赢的问题(因为把取光n-1个后,还剩一个,对手必输,这样就转换成n-1个的模型,核心思想依旧是凑m+1)

 

2.斐波那契博弈:也是适用于一堆石子的情况。

一堆石子有 n 个,两人轮流取,先取者第一次可以取任意多个,但不能全部取完,以后每次取石子的数目不能超过上次取子数的 2 倍,先取完者胜

先上结论:当且仅当 n 不是 fibonacci 数列时,先手胜。

 

3.威左夫博弈:适用于两堆石子的情况。

有两堆若干个石子,两个人轮流从某一堆或同时从两堆中取同样多的石子,规定每次至少取一个,多者不限,最后取光者胜

 

4.尼姆博弈: 适用于n堆石子的情况

有若干堆石子,每堆石子的数量都是有限的,合法的操作是 “选择一堆石子并拿走若干颗(不能不拿)”,如果轮到某个人的时候所有石子堆都已经被拿空了,则判负(因为他此时没有任何合法的操作)

这游戏看上去有些复杂,我们先从简单情况开始研究,如果轮到你时,只剩下一堆石子,那么此时必胜策略肯定是把这堆石子全部拿完,然后对手没有石子拿就输了;如果剩下两堆不相等的石子,必胜策略是通过取多的一堆石子将两堆石子变得相等,之后对手如果在某一堆拿若干颗,你就在另一堆拿同样多的数量,直至胜利;但是如果还剩三堆,应该怎么分析呢?假设有三堆石子(a,b,c),我们前面说到,如果只有两堆石子,并且石子数量满足(n,n),谁先手谁就输。其实我们可以把三堆石子问题转换成两堆,只要满足状态(0,n,n)并且此时是对方先手,那我方按照两堆石子的取法,就能获胜。对于这种(0,n,n)的局势,我们称为奇异局势。对任何奇异局势(a,b,c)都有 a^b^c=0(^ 表示异或),如果我们面对非奇异局势,要如何变为奇异局势呢?假设 a<b<c,我们只要将 c 变为 a^b 即可。道理很简单,因为 a^b^(a^b)=0。要将 c 变为 a^b 也很简单,只要从 c 中减去 c-a^b 即可

例(14,21,39),14^21=27,39-27=12,所以从 39 中拿走 12 个,即可变成奇异局势(14,21.27)

结论:想办法把局势变成奇异局势并且还要让对手面对奇异局势时是先手。

蓝桥杯高僧斗法

抄录自:https://www.wmathor.com/index.php/archives/766/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值