斐波那契博弈
来源:互联网 发布:团团子 琵琶 知乎 编辑:程序博客网 时间:2024/05/16 06:01
问题描述:一堆石头,两个人先后拿,谁拿到最后一个石头就赢。拿的过程满足以下两个条件:
1、 先手第一次不能全部拿完;
2、 之后每次拿的个数不能至少为1,至多为对手刚取个数的2倍。
当n为Fibonacci数时,先手必败。即存在先手的必败态当且仅当石头个数为Fibonacci数。
证明:利用第二数学归纳法。对Fibonacci数列的项进行归纳,其中n=f(m)
① 当m=2时,先手必败。结论成立。
② 设m=k时,结论成立。当m=k+1时,有f(k+1)=f(k)+f(k-1)。根据归纳可知,在石头数为f(k)和f(k-1)时,后手必赢。
所以后手只需考虑两个问题,一是能否将石头分为这样两堆(先手一次拿完f(k-1)堆时,后手是否能赢);二是后手在f(k-1)堆最后一次拿时,先手是否可能将f(k)堆一次拿完。
考虑,当先手第一次拿了超过f(k-1)个时,由于2*f(k-1)>f(k-1)+f(k-2)=f(k),故后手可以一次拿完剩下的石头。
当先手一次拿了f(k-1)/3个时,后手可以在f(k-1)堆中拿到最大数目的石头数为2*f(k-1)/3,比较2*f(k-1)/3与f(k)/2的大小,做差知道后者大,故先手不能一次取完f(k)堆。
综上,可知后手可以先在f(k-1)堆取到最后一个是石头,接着又能在f(k)中取到最后一个石头。即当m=k+1时,结论成立。
当n不为Fibonacci数时,后手必败。证明,需要用到Zeckendorf定理(齐肯多夫定理):任何正整数都可以表示成不连续的Fibonacci数之和。
令n=f(a1)+f(a2)+…+f(ap),其中a1+2<=a2,a2+2<=a3,…, a(p-1)+2<=ap
因为有2*f(a1)<f(a1)+f(a1+1)=f(a1+2)<=f(a2),故当先手第一次取f(a1)个石头时,后手面对(n为Fibonacci数,后手先取)比败局。
- 博弈---斐波那契博弈
- 斐波那契博弈
- 斐波那契博弈
- 斐波那契博弈
- 斐波那契博弈
- 斐波那契博弈
- 斐波那契博弈
- 斐波那契博弈
- 斐波那契博弈
- 斐波那契博弈
- 斐波那契博弈
- 斐波那契博弈
- 斐波那契博弈
- 四种博弈浅谈(巴什博弈、威佐夫博弈、妮姆博奕、斐波那契博弈)
- 博弈模板(巴什博奕,威佐夫博弈,尼姆博弈,斐波那契博弈)
- 巴什博弈 威佐夫博弈 nim博弈 斐波那契博弈
- 博弈学习 (二) 斐波那契博弈
- 拿石头-斐波那契博弈
- 最小二乘法的几何意义 – 巧妙记忆公式的方法
- 一个进程在内存中的布局
- java正则表达式相关
- NP-hard问题
- offsetLeft,Left,clientLeft的区别
- 斐波那契博弈
- (kruscal12.3.4)POJ 1679 The Unique MST(判断最小生成树的唯一性||次小生成树)
- 程序员学习能力提升三要素
- 子进程复制了父进程的什么
- 给Python初学者的一些技巧
- unix环境高级编程学习1-unix文件和目录
- adb push常见问题
- 分治法---大整数相乘
- #小练习 使用HTMLParser获取data时注意事项