斐波那契博弈:
有一堆个数为n的石子,游戏双方轮流取石子,满足:
1)先手不能在第一次把所有的石子取完;
2)之后每次可以取的石子数介于1到对手刚取的石子数的2倍之间(包含1和对手刚取的石子数的2倍)。
约定取走最后一个石子的人为赢家,当n为斐波那契数时,先手必败;否则先手必胜。
1. 证明n为斐波那契数时,先手必败:
假设如今有
n个石子,分成两堆,有
n=f[k]+f[k−1],两堆数目是相邻的斐波那契数。如今先手先取。设先手为
a ,后手为
b。
-
a<3f[k−1] 时:
b<32f[k−1],此时
(a+b)<
f[k−1],先手后手都没能将
f[k−1]堆取完。经过这一轮,还是剩下两堆石子,又回到原来的问题。a如果想赢的话,必然想要一下子取完剩下的
f[k],也就要求
b取的尽量多,这种取的方法不是每次取的最优策略。
-
a=3f[k−1] 时:
- 如果
b <
32f[k−1],此时仍有
(a+b)<
f[k−1],还是回到原来的问题。
- 如果
b =
32f[k−1],则
(a+b)=
f[k−1],
f[k−1]堆被取完。接下来该先手取,
a 最多为
34f[k−1]。那么接下来证明a的最大值小于剩下的石子数目的大小:
f[k]34f[k−1]=3f[k]4f[k−1]=3(f[k−1]+f[k−2])4f[k−1]=3(1+f[k−1]f[k−2])4<1即:
f[k−1]=f[k−2]+f[k−3]<3f[k−2]
f[k−3]<2f[k−2]=2f[k−3]+2f[k−4]
0<f[k−3]+2f[k−4]
该式恒成立,即
amax=2b=34f[k−1]<f[k],所以此时先手不能取完
f[k]。在不回到原来问题的条件下,
f[k]堆剩下的石子一定被后手,也就是
b取完,一定是先手败,因为先手(即
a)取不完当前的堆。
-
3f[k−1]<a<f[k−1]时:
b将
f[k−1]堆中的剩余石子取完,即
1≤b<32f[k−1]且
a+b=f[k−1]。接下来
2≤a<34f[k−1],上面已经证明
34f[k−1]<f[k],所以
a无法将
f[k]堆取完,又回到原来的问题,往复循环,先手必败。
-
f[k−1]≤a≤f[k]−1时,
1≤b≤m,其中
2f[k−1]≤m≤2f[k]−2,可以证明
f[k−1]f[k]=f[k−1]f[k−1]+f[k−2]=1+f[k−1]f[k−2]<2恒成立,即
f[k]<2f[k−1],所以当
b取
mmin时,一定可以将
f[k]堆取完,先手败。
2. 证明n非斐波那契数时,先手必胜:
由齐肯多夫定理: 任何正整数都可以表示为若干个不连续的斐波那契数之和。所以
n=f[i]+f[j]+f[k]+...+f[m],其中
f[i]+f[j]+f[k]+...+f[m]为递增的互不连续的斐波那契数。先手a如果想赢,只需要第一次取完
f[i],则
b面临着
f[j]的局势。可以证明,b取不完
f[j]:
f[j]=f[j−1]+f[j−2]=2f[j−2]+f[j−3]>2f[j−2]上面对n的划分中,
i,j,k...互不相临,所以
f[j]>2f[i]一定成立,即b取不完
f[j],而且b面临的
f[j]是一个斐波那契数的局势,上面已经证明:
b在
f[j]局势中必败。接着又回到了原来的更小的问题,每一个小局势都是
b必败,所以
a最终必胜。
以上只是个人对斐波那契博弈的思考,如有疏漏之处,欢迎指正。