威佐夫博奕

威佐夫博奕

题目

有两堆石子,数量任意,可以不同。游戏开始由两个人轮流取石子。游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子;二是可以在两堆中同时取走相同数量的石子。最后把石子全部取完者为胜者。现在给出初始的两堆石子的数目,如果轮到你先取,假设双方都采取最好的策略,问最后你是胜者还是败者。

输入示例

输入: 1 2
输出: false
解释: 无论你怎么取,都是对方赢

输入: 2 2
输出: true
解释: 直接从两堆中取2

解题思路

这种情况下是颇为复杂的。我们用(ak,bk)(ak ≤ bk ,k=0,1,2,…,n)表示两堆物品的数量并称其为局势,如果甲面对(0,0),那么甲已经输了,这种局势我们称为奇异局势

前几个奇异局势是:(0,0)、(1,2)、(3,5)、(4,7)、(6,10)、(8,13)、(9,15)…

我们观察一下这些状态,可以找到两条规律。

  1. 我们假设从小到大排的第k个必败状态是(x, y),并且x < y。我们可以发现y = x + k。也就是说必败状态两个数的差值是递增的
  2. 每一个必败状态的差值都各不相同。

反证法:

假设(a, a+k), (b, b+k)都是必败状态,并且a < b。那么先手在面临(b, b+k)的时候,只需要在两堆当中同时取走b-a个石子,那么给后手的局面就是(a, a+k)。对于后手来说,这是一个必败的局面,这就和(b, b+k)先手必败矛盾,所以不存在两个必败局面的差值相等

求证

为了写出通项公式,我们需要引入Betty定理

设a和b是两个正无理数,并且$ \dfrac{1}{a}+\dfrac{1}{b}=1$

那么对于两个集合AB

\[A \{ \left[ na \right ] \},B=\{ \left [ nb \right ]\}, n \in \mathbb{N^+} \tag{1} \]

有下面两个结论:

\[A \cap B=\emptyset ,A \cup B =\mathbb{N^+} \tag{2} \]

证明过程:

(1) Betty定理及证明_Michael_GLF的博客-CSDN博客_贝蒂瑞利定理

我们不妨假设存在这样的a, b同时满足Betty定理与必败状态的性质:

\[\left [ an \right ] +n=\left [ bn \right ],\frac{1}{a} +\frac{1}{b} =1 \tag{3} \]

\[\left [ an \right ] +n=\left [ an+n \right ]=\left [ \left ( a+1 \right )n \right ]=\left [ bn \right ] \tag{4} \]

带入可以得到:

\[\frac{1}{a} +\frac{1}{a+1}=1 \tag{5} \]

解得:\(a= \frac{1+\sqrt{5}}{2} \approx 1.618\),算出的结果居然是黄金分割比。

由此可以得出奇异局势的条件:主要看公式(4)

代码

public boolean helper(int a,int b){
	if(a > b){
        int t=a;
        a=b;
        b=t;
    }
    int n=b-a;
    if((int)(n*(1+Math.sqrt(5))/2)==a) return false;
    else return true; 
}

(2)博弈论——两人取子游戏与威佐夫博弈,隐藏在背后的黄金分割 - 知乎 (zhihu.com)

posted @ 2022-04-04 18:52  LibraXiong  阅读(43)  评论(0)    收藏  举报