博弈知识汇总

有一种很有意思的游戏,就是有物体若干堆,可以是火柴棍或是围棋子等等均可。两个
人轮流从堆中取物体若干,规定最后取光物体者取胜。这是我国民间很古老的一个游戏
,别看这游戏极其简单,却蕴含着深刻的数学原理。下面我们来分析一下要如何才能够
取胜。
(一) 巴什博奕(Bash Game): 只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个。最后取光者得胜。

n=m+1mn=m+1r+srsm),skkm)m+1km+1r1m+1 显 然 , 如 果 n = m + 1 , 那 么 由 于 一 次 最 多 只 能 取 m 个 , 所 以 , 无 论 先 取 者 拿 走 多 少 个 , 后 取 者 都 能 够 一 次 拿 走 剩 余 的 物 品 , 后 者 取 胜 。 因 此 我 们 发 现 了 如 何 取 胜 的 法 则 : 如 果 n = ( m + 1 ) r + s , ( r 为 任 意 自 然 数 , s ≤ m ) , 那 么 先 取 者 要 拿 走 s 个 物 品 , 如 果 后 取 者 拿 走 k ( k ≤ m ) 个 , 那 么 先 取 者 再 拿 走 m + 1 − k 个 , 结 果 剩 下 ( m + 1 ) ( r − 1 ) 个 , 以 后 保 持 这 样 的 取 法 , 那 么 先 取 者 肯 定 获 胜 。 总 之 , 只 要 保 持 给 对 手 留 下 ( m + 1 ) 的 倍 数 , 就 能 最 后 获 胜 。

这个游戏还可以有一种变相的玩法:两个人轮流报数,每次至少报一个,最多报十个,谁能报到100者胜。

(二) 威佐夫博奕(Wythoff Game): 有两堆各若干个物品,两个人轮流从某一堆或同时从两堆中取同样多的物品,规定每次至少取一个,多者不限,最后取光者得胜。

akbkakbk,k=012,n)000012354761081391511181220 这 种 情 况 下 是 颇 为 复 杂 的 。 我 们 用 ( a k , b k ) ( a k ≤ b k , k = 0 , 1 , 2 , … , n ) 表 示 两 堆 物 品 的 数 量 并 称 其 为 局 势 , 如 果 甲 面 对 ( 0 , 0 ) , 那 么 甲 已 经 输 了 , 这 种 局 势 我 们 称 为 奇 异 局 势 。 前 几 个 奇 异 局 势 是 : ( 0 , 0 ) 、 ( 1 , 2 ) 、 ( 3 , 5 ) 、 ( 4 , 7 ) 、 ( 6 , 10 ) 、 ( 8 , 13 ) 、 ( 9 , 15 ) 、 ( 11 , 18 ) 、 ( 12 , 20 ) 。

,a0=b0=0,ak,bk=ak+k 可 以 看 出 , a 0 = b 0 = 0 , a k 是 未 在 前 面 出 现 过 的 最 小 自 然 数 , 而 b k = a k + k , 奇 异 局 势 有 如 下 三 条 性 质 :

1、任何自然数都包含在一个且仅有一个奇异局势中。

akak>ak1bk=ak+k>ak1+(k1)=bk1>ak11 由 于 a k 是 未 在 前 面 出 现 过 的 最 小 自 然 数 , 所 以 有 a k > a k − 1 , 而 b k = a k + k > a k − 1 + ( k − 1 ) = b k − 1 > a k − 1 。 所 以 性 质 1 。 成 立 。

2、任意操作都可将奇异局势变为非奇异局势。

akbk使akbk 事 实 上 , 若 只 改 变 奇 异 局 势 ( a k , b k ) 的 某 一 个 分 量 , 那 么 另 一 个 分 量 不 可 能 在 其 他 奇 异 局 势 中 , 所 以 必 然 是 非 奇 异 局 势 。 如 果 使 ( a k , b k ) 的 两 个 分 量 同 时 减 少 , 则 由 于 其 差 不 变 , 且 不 可 能 是 其 他 奇 异 局 势 的 差 , 因 此 也 是 非 奇 异 局 势 。

3、采用适当的方法,可以将非奇异局势变为奇异局势。

假设面对的局势是(a,b),
a=ba00 如 果 a = b , 则 同 时 从 两 堆 中 取 走 a 个 物 体 , 就 变 为 了 奇 异 局 势 ( 0 , 0 ) ;
a=akb>bkbbk 如 果 a = a k , b > b k , 那 么 , 取 走 b – b k 个 物 体 , 即 变 为 奇 异 局 势 ;
a=akb<bkakab+ak(abak,abak+bak) 如 果 a = a k , b < b k , 则 同 时 从 两 堆 中 拿 走 a k – a b + a k 个 物 体 , 变 为 奇 异 局 势 ( a b – a k , a b – a k + b – a k ) ;
a>akb=ak+k,aak 如 果 a > a k , b = a k + k , 则 从 第 一 堆 中 拿 走 多 余 的 数 量 a – a k 即 可 ;
a<akb=ak+k,; 如 果 a < a k , b = a k + k , 分 两 种 情 况 ;
a=aj(j<k)bbj 第 一 种 , a = a j ( j < k ) , 从 第 二 堆 里 面 拿 走 b – b j 即 可 ;
a=bj(j<k)baj 第 二 种 , a = b j ( j < k ) , 从 第 二 堆 里 面 拿 走 b – a j 即 可 。

从如上性质可知,两个人如果都采用正确操作,那么面对非奇异局势,先拿者必胜;反之,则后拿者取胜。

那么任给一个局势(a,b),怎样判断它是不是奇异局势呢?我们有如下公式:

ak=k1+52bk=ak+kk=012,n) a k = k ( 1 + √ 5 ) 2 , b k = a k + k ( k = 0 , 1 , 2 , … , n 方 括 号 表 示 取 整 函 数 )

1+52=1.618...,,akbk21+5=512j=a512bj=aj+j, 奇 妙 的 是 其 中 出 现 了 黄 金 分 割 数 ( 1 + √ 5 ) 2 = 1.618... , 因 此 , 由 a k , b k 组 成 的 矩 形 近 似 为 黄 金 矩 形 , 由 于 2 ( 1 + √ 5 ) = ( √ 5 − 1 ) 2 , 可 以 先 求 出 j = a ( √ 5 − 1 ) 2 , 则 判 断 b j = a j + j , 若 不 等 , 那 么 就 不 是 奇 异 局 势 。 则 先 拿 着 必 胜 , 否 则 后 拿 着 必 胜 。

(三) 尼姆博奕(Nimm Game): 有三堆各若干个物品,两个人轮流从某一堆取任意多的物品,规定每次至少取一个,多者不限,最后取光者得胜。

这种情况最有意思,它与二进制有密切关系,我们用(a,b,c)表示某种局势,首先(0,0,0)显然是奇异局势,无论谁面对奇异局势,都必然失败。第二种奇异局势是(0,n,n),只要与对手拿走一样多的物品,最后都将导致(0,0,0)。仔细分析一下,(1,2,3)也是奇异局势,无论对手如何拿,接下来都可以变为(0,n,n)的情形。

计算机算法里面有一种叫做按位模2加,也叫做异或的运算,我们用符号(+)表示这种运算。这种运算和一般加法不同的一点是1+1=0。先看(1,2,3)的按位模2加的结果:

1 =二进制01
2 =二进制10
3 =二进制11 (+)
———————
0 =二进制00 (注意不进位)

对于奇异局势(0,n,n)也一样,结果也是0。
任何奇异局势(a,b,c)都有a(+)b(+)c =0。

如果我们面对的是一个非奇异局势(a,b,c),要如何变为奇异局势呢?
假设 a < b < c,我们只要将 c 变为 a(+)b,即可,因为有如下的运算结果: a(+)b(+)[a(+)b] = [a(+)a](+)[b(+)b] = 0(+)0 = 0。
要将c 变为a(+)b,只要从 c中减去 c - [a(+)b]即可。

例1、(14,21,39),14(+)21=27,39-27=12,所以从39中拿走12个物体即可达到奇异局势(14,21,27)。

例2、(55,81,121),55(+)81 = 102,121-102 = 19,所以从121中拿走19个物品就形成了奇异局势(55,81,102)。

例3。(29,45,58),29(+)45=48,58-48=10,从58中拿走10个,变为(29,45,48)。

例4。我们来实际进行一盘比赛看看:
    甲:(7,8,9)->(1,8,9)奇异局势
    乙:(1,8,9)->(1,8,4)
    甲:(1,8,4)->(1,5,4)奇异局势
    乙:(1,5,4)->(1,4,4)
    甲:(1,4,4)->(0,4,4)奇异局势
    乙:(0,4,4)->(0,4,2)
    甲:(0.4,2)->(0,2,2)奇异局势
    乙:(0,2,2)->(0,2,1)
    甲:(0,2,1)->(0,1,1)奇异局势
    乙:(0,1,1)->(0,1,0)
    甲:(0,1,0)->(0,0,0)奇异局势
    甲胜。

(四) 取火柴的游戏:
题目1:今有若干堆火柴,两人依次从中拿取,规定每次只能从一堆中取若干根, 可将一堆全取走,但不可不取,最后取完者为胜,求必胜的方法。
题目2:今有若干堆火柴,两人依次从中拿取,规定每次只能从一堆中取若干根, 可将一堆全取走,但不可不取,最后取完者为负,求必胜的方法。

先解决第一个问题吧。

定义:若所有火柴数异或为0,则该状态被称为利他态,用字母T表示;否则,为利己态,用S表示。
【定理1】:对于任何一个S态,总能从一堆火柴中取出若干个使之成为T态。

证明:
nAiS 若 有 n 堆 火 柴 , 每 堆 火 柴 有 A i 根 火 柴 数 , 那 么 既 然 现 在 处 于 S 态 , 则
C=A1xorA2xorxorAn>0; C = A 1 x o r A 2 x o r … x o r A n > 0 ;
CP 把 C 表 示 成 二 进 制 , 记 它 的 二 进 制 数 的 最 高 位 为 第 P 位 ,
AtP1 则 必 然 存 在 一 个 A t , 它 二 进 制 的 第 P 位 也 是 1 。
AiP0CP0 ( 否 则 , 若 所 有 的 A i 的 第 P 位 都 是 0 , 则 C 的 第 P 位 也 为 0 , 与 题 意 矛 盾 ) 。
X=AtxorC,X<At 那 么 我 们 把 X = A t x o r C , 则 得 到 X < A t 。
AtPCP1XP0X<At; 这 是 因 为 既 然 A t 的 第 P 位 与 C 的 第 P 位 同 为 1 , 那 么 X 的 第 P 位 变 为 0 , 所 以 X < A t ;

A1xorA2xorxorXxorxorAn A 1 x o r A 2 x o r … x o r X x o r … x o r A n
=A1xorA2xorxorAtxorCxorxorAn = A 1 x o r A 2 x o r … x o r A t x o r C x o r … x o r A n
=A1xorA2xorxorAnxorA1xorA2xorxorAn = A 1 x o r A 2 x o r … x o r A n x o r A 1 x o r A 2 x o r … x o r A n
= 0
AtAtXST 这 就 是 说 从 A t 堆 中 取 出 A t – X 根 火 柴 后 状 态 就 会 从 S 态 变 为 T 态 。
证毕

【定理2】:T态,取任何一堆的若干根,都将成为S态。

证明:
用反证法试试。

C=A1xorA2xorxorAixorxorAn=0 C = A 1 x o r A 2 x o r … x o r A i x o r … x o r A n = 0 ;
C=A1xorA2xorxorAixorCxorxorAn=0; C ′ = A 1 x o r A 2 x o r … x o r A i ′ x o r C x o r … x o r A n = 0 ;
则有
CxorC C x o r C ′
=A1xorA2xorxorAixorxorA.nxorA1xorA2xorxorAixorCxorxorAn = A 1 x o r A 2 x o r … x o r A i x o r … x o r A . n x o r A 1 x o r A 2 x o r … x o r A i ′ x o r C x o r … x o r A n
=AixorAi=0 = A i x o r A i ′ = 0
Ai=Ai 进 而 推 出 A i = A i ′ , 这与已知矛盾。
所以命题得证。

【定理 3】:S态,只要方法正确,必赢。

最终胜利即由S态转变为T态,任何一个S态,只要把它变为T态,(由【定理1】,可以把它变成T态。)对方只能把T态转变为S态【定理2】。这样,所有S态向T态的转变都可以有己方控制,对方只能被动地实现由T态转变为S态。故S态必赢。

【定理4】:T态,只要对方法正确,必败。

由【定理】3易得。

接着来解决第二个问题。

定义:若一堆中仅有1根火柴,则被称为孤单堆。若大于1根,则称为充裕堆。

定义:T态中,若充裕堆的堆数大于等于2,则称为完全利他态,用 T2 T 2 表示;
若充裕堆的堆数等于0(孤单堆数为偶数),则称为部分利他态,用 T0 T 0 表示。

孤单堆的根数异或只会影响二进制的最后一位,但充裕堆会影响高位(非最后一位)。一个充裕堆,高位必有一位不为0,则所有根数异或不为0。故不会是T态。

【定理5】: S0 S 0 态,即仅有奇数个孤单堆,必败。 T0 T 0 态必胜。

证明: S0态(孤单堆数一定为奇数),其实就是每次只能取一根。每次第奇数根都由己取,第偶数根都由对方取,所以最后一根必己取。必败。同理, T0态,只有孤单堆,且堆数为偶数,则必胜。

【定理6】: S1 S 1 态,,即只有一个充裕堆,其他为孤单堆,只要方法正确,必胜。

证明:
若此时孤单堆堆数为奇数,把充裕堆取完;否则,取成一根。这样,就变成奇数个孤单堆,由对方取。由【定理5】,对方必输。己必胜。
证毕

【定理7】: S2 S 2 态,即充裕堆数大于等于二,其他为孤单堆,不可一次转变为 T0 T 0 态。

证明: 充裕堆数不可能一次由2变为0。得证。 #

【定理8】: S2 S 2 态可一次转变为 T2 T 2 态。

证明: 由【定理1】,S态可一次转变为T态,又由【定理7】, S2 S 2 态不可转一次变为 T0 T 0 态,所以转变为 T2 T 2 态。

【定理9】: T2 T 2 态,只能转变为 S2 S 2 态或 S1 S 1 态。

证明: 由【定理2】,T态必然变为S态。由于充裕堆数不可能一次由2变为0,所以此时的S态不可能为 S0 S 0 态。
命题得证。

【定理10】: S2 S 2 态,只要方法正确,必胜.

证明:
方法如下:
1) S2 S 2 态,就把它变为 T2 T 2 态。(由【定理8】)
2) 对方只能 T2 T 2 转变成 S2 S 2 态或 S1 S 1 态(【定理9】)
若转变为 S2 S 2 , 转向1)
若转变为 S1 S 1 , 己必胜。(【定理5】)

【定理11】: T2 T 2 态必输。

证明:同【定理10】。

综上所述,
必输态有: T2,S0 T 2 , S 0
必胜态有: S2,S1,T0 S 2 , S 1 , T 0
两题比较:
第一题的全过程其实如下:
S2>T2>S2>T2>..>T2>S1>T0>S0>T0>>S0>T0(0) S 2 − > T 2 − > S 2 − > T 2 − > … . . − > T 2 − > S 1 − > T 0 − > S 0 − > T 0 − > … … − > S 0 − > T 0 ( 全 0 )
第二题的全过程其实如下:
S2>T2>S2>T2>>T2>S1>S0>T0>S0>..>S0>T0(0) S 2 − > T 2 − > S 2 − > T 2 − > … … − > T 2 − > S 1 − > S 0 − > T 0 − > S 0 − > … . . − > S 0 − > T 0 ( 全 0 )
表示胜利一方的取法。 是否发现了他们的惊人相似之处。
()S1S0T0S1使T0,使S0 我 们 不 难 发 现 ( 见 加 黑 部 分 ) , S 1 态 可 以 转 变 为 S 0 态 ( 第 二 题 做 法 ) , 也 可 以 转 变 为 T 0 ( 第 一 题 做 法 ) 。 哪 一 方 控 制 了 S 1 态 , 他 即 可 以 有 办 法 使 自 己 得 到 最 后 一 根 ( 转 变 为 T 0 ) , 也 可 以 使 对 方 得 到 最 后 一 根 ( 转 变 为 S 0 ) 。
所以,抢夺 S1 S 1 是制胜的关键!
为此,始终把 T2 T 2 态让给对方,将使对方处于被动状态,他早晚将把状态变为 S1 S 1 .

推荐HDOJ题目
http://acm.hdu.edu.cn/showproblem.php?pid=1907
http://acm.hdu.edu.cn/showproblem.php?pid=2509
看完上面的结论,就能顺利解决上面2道了

S-Nim
http://acm.hdu.edu.cn/showproblem.php?pid=1536
http://acm.hdu.edu.cn/showproblem.php?pid=1944

博弈算法入门小节 1536 1517 1907
小子最近迷途于博弈之中。。。感触颇深。
为了让大家能够在学习博弈的时候少走弯路,最重要的也是为了加深自己的影响,温故而知新,特发此贴与大家共勉。

学博弈先从概念开始:
特别推荐LCY老师的课件:博弈入门。
下载地址:http://acm.hdu.edu.cn/forum/read.php?tid=6875
这个课件个人认为从博弈的基本思想,一直到解博弈的中心算法做了很好的诠释。但是特别要注意的是。课件后面一部分英语写的讲义是重中之重。小子英语很弱,在这困扰很久。现在为大家大概介绍一下。
主要是后继点和SG值的问题:
SG值:一个点的SG值就是一个不等于它的后继点的SG的且大于等于零的最小整数。
后继点:也就是按照题目要求的走法(比如取石子可以取的数量,方法)能够走一步达到的那个点。

具体的有关SG值是怎么运用的希望大家自己多想想。
看到这里推荐大家做几道题:
HDU1846(最简单的博弈水题)
HDU1847(求SG值)
有了上面的知识接下来我们来看看组合博弈(n堆石子)
看了这篇文章你会发现异或运算在博弈中使用的妙处。当然这里指出的只是组合博弈中一种特殊情况。
王道还是对SG值的求解,但是知道这么一种思路无疑对思维的广度和深度扩展是很有帮助的。

ZZ博弈
http://acm.hdu.edu.cn/forum/read.php?fid=9&tid=10617
这里介绍了组和博弈的两种大的类型,一种是最后取的是N状态一种是最后取的是P状态,两个状态的解题方法能看懂很有帮助。当然,能够把推导过程理解,吃透无疑是大牛级的做法~小子也佩服的紧~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值