斐波那契博弈证明

斐波那契博弈

有一堆个数为n的石子,游戏双方轮流取石子,满足:
1)先手不能在第一次把所有的石子取完;
2)之后每次可以取的石子数介于1到对手刚取的石子数的2倍之间(包含1和对手刚取的石子数的2倍)。
约定取走最后一个石子的人为赢家,当n为斐波那契数时,先手必败;否则先手必胜。

1. 证明n为斐波那契数时,先手必败:

假设如今有 n n 个石子,分成两堆,有 n = f [ k ] + f [ k 1 ] n=f[k]+f[k-1] ,两堆数目是相邻的斐波那契数。如今先手先取。设先手为 a a ,后手为 b b

  • a &lt; f [ k 1 ] 3 a &lt; \frac{f[k-1]}3 时: b &lt; 2 f [ k 1 ] 3 b &lt; \frac{2f[k-1]}3 ,此时 ( a + b ) (a+b) < f [ k 1 ] f[k-1] ,先手后手都没能将 f [ k 1 ] f[k-1] 堆取完。经过这一轮,还是剩下两堆石子,又回到原来的问题。a如果想赢的话,必然想要一下子取完剩下的 f [ k ] f[k] ,也就要求 b b 取的尽量多,这种取的方法不是每次取的最优策略。
  • a = f [ k 1 ] 3 a = \frac{f[k-1]}3 时:
    - 如果 b b < 2 f [ k 1 ] 3 \frac{2f[k-1]}3 ,此时仍有 ( a + b ) (a+b) < f [ k 1 ] f[k-1] ,还是回到原来的问题。
    - 如果 b b = 2 f [ k 1 ] 3 \frac{2f[k-1]}3 ,则 ( a + b ) (a+b) = f [ k 1 ] f[k-1] f [ k 1 ] f[k-1] 堆被取完。接下来该先手取, a a 最多为 4 f [ k 1 ] 3 \frac{4f[k-1]}3 。那么接下来证明a的最大值小于剩下的石子数目的大小: 4 f [ k 1 ] 3 f [ k ] = 4 f [ k 1 ] 3 f [ k ] = 4 f [ k 1 ] 3 ( f [ k 1 ] + f [ k 2 ] ) = 4 3 ( 1 + f [ k 2 ] f [ k 1 ] ) &lt; 1 \frac{\frac{4f[k-1]}3}{f[k]}=\frac{4f[k-1]}{3f[k]}=\frac{4f[k-1]}{3(f[k-1]+f[k-2])}=\frac{4}{3(1+\frac{f[k-2]}{f[k-1]})}&lt;1 即:
    f [ k 1 ] = f [ k 2 ] + f [ k 3 ] &lt; 3 f [ k 2 ] f[k-1]=f[k-2]+f[k-3]&lt;3f[k-2]
    f [ k 3 ] &lt; 2 f [ k 2 ] = 2 f [ k 3 ] + 2 f [ k 4 ] f[k-3]&lt;2f[k-2]=2f[k-3]+2f[k-4]
    0 &lt; f [ k 3 ] + 2 f [ k 4 ] 0&lt;f[k-3]+2f[k-4]
    该式恒成立,即 a m a x = 2 b = 4 f [ k 1 ] 3 &lt; f [ k ] a_{max}=2b=\frac{4f[k-1]}{3}&lt;f[k] ,所以此时先手不能取完 f [ k ] f[k] 。在不回到原来问题的条件下, f [ k ] f[k] 堆剩下的石子一定被后手,也就是 b b 取完,一定是先手败,因为先手(即 a a )取不完当前的堆。
  • f [ k 1 ] 3 &lt; a &lt; f [ k 1 ] \frac{f[k-1]}3 &lt; a &lt; f[k-1] 时: b b f [ k 1 ] f[k-1] 堆中的剩余石子取完,即 1 b &lt; 2 f [ k 1 ] 3 1\leq b&lt;\frac{2f[k-1]}3 a + b = f [ k 1 ] a+b=f[k-1] 。接下来 2 a &lt; 4 f [ k 1 ] 3 2\le a&lt;\frac{4f[k-1]}3 ,上面已经证明 4 f [ k 1 ] 3 &lt; f [ k ] \frac{4f[k-1]}3&lt;f[k] ,所以 a a 无法将 f [ k ] f[k] 堆取完,又回到原来的问题,往复循环,先手必败。
  • f [ k 1 ] a f [ k ] 1 f[k-1]\le a\le f[k]-1 时, 1 b m 1\le b\le m ,其中 2 f [ k 1 ] m 2 f [ k ] 2 2f[k-1]\le m\le 2f[k]-2 ,可以证明 f [ k ] f [ k 1 ] = f [ k 1 ] + f [ k 2 ] f [ k 1 ] = 1 + f [ k 2 ] f [ k 1 ] &lt; 2 \frac{f[k]}{f[k-1]}=\frac{f[k-1]+f[k-2]}{f[k-1]}=1+\frac{f[k-2]}{f[k-1]}&lt;2 恒成立,即 f [ k ] &lt; 2 f [ k 1 ] f[k]&lt;2f[k-1] ,所以当 b b m m i n m_{min} 时,一定可以将 f [ k ] f[k] 堆取完,先手败。

2. 证明n非斐波那契数时,先手必胜:

由齐肯多夫定理: 任何正整数都可以表示为若干个不连续的斐波那契数之和。所以 n = f [ i ] + f [ j ] + f [ k ] + . . . + f [ m ] n=f[i]+f[j]+f[k]+...+f[m] ,其中 f [ i ] + f [ j ] + f [ k ] + . . . + f [ m ] f[i]+f[j]+f[k]+...+f[m] 为递增的互不连续的斐波那契数。先手a如果想赢,只需要第一次取完 f [ i ] f[i] ,则 b b 面临着 f [ j ] f[j] 的局势。可以证明,b取不完 f [ j ] f[j] :
f [ j ] = f [ j 1 ] + f [ j 2 ] = 2 f [ j 2 ] + f [ j 3 ] &gt; 2 f [ j 2 ] f[j]=f[j-1]+f[j-2]=2f[j-2]+f[j-3]&gt;2f[j-2] 上面对n的划分中, i , j , k . . . i,j,k... 互不相临,所以 f [ j ] &gt; 2 f [ i ] f[j]&gt;2f[i] 一定成立,即b取不完 f [ j ] f[j] ,而且b面临的 f [ j ] f[j] 是一个斐波那契数的局势,上面已经证明: b b f [ j ] f[j] 局势中必败。接着又回到了原来的更小的问题,每一个小局势都是 b b 必败,所以 a a 最终必胜。


以上只是个人对斐波那契博弈的思考,如有疏漏之处,欢迎指正。

猜你喜欢

转载自blog.csdn.net/qq_41821116/article/details/84868797