Nim游戏,Grundy函数介绍
来源:互联网 发布:mac转音频格式 编辑:程序博客网 时间:2024/06/17 22:40
Nim游戏,Grundy函数介绍
部分翻译自:http://www.cut-the-knot.org/ctk/May2001.shtml
Nim是一种很古老又很迷人的双人参与的数学游戏。这个游戏的名字和相关理论是在100多年前由哈佛大学的C.L.Bouton发明的。
玩家轮流从堆中(堆叠,格子,或盒子等)中移走物品(数字,硬币,或卡片等),但是一次只能选择一堆。一般的问题中是移走最后的物品的玩家获胜,反问题中是移走最后物品的玩家失败。
Bouton的理论基于整数的二进制表示。Plainim是用来演示Bouton理论的最好的nim游戏。
Nim游戏是公平游戏(Impartial game)的一种,在所有公平游戏中,如果两位玩家都选择最优操作,有些状态是必胜的,有些状态则是必败的。称必胜的状态为N状态,表示下一位(next)将要操作的玩家必胜;称必败的状态为P状态,表示上一位(previous)已经操作过的玩家必胜,即下一位玩家必败。
一个经典的Nim游戏的例子就是有三堆石头,第一堆有a块,第二堆有b块,第三堆有c块,用(a,b,c)来表示这个状态。有一些推论可以给出一些特定情况的判断,例如若n是奇数,(1,n,n+1)是个N(必胜)状态;若(a,b,c)是P状态,那么(2a,2b,2c)和(2a+1,2b+1,2c)也是P(必败)状态。
20世纪30年代的时候,R.P.Sprague和P.M.Grundy发明了一套关于平衡游戏的理论。Nim游戏是平衡游戏中很经典的一种。根据Sprague-Grundy的理论,公平游戏中的每一个状态都可以为其分配一个Grundy数,这个数等价于Nim游戏中某一堆物品的数量。
假设在一个公平游戏中,从一个状态S可以通过某个合法的操作到达状态
很明显如果
Kayles游戏提供了一个很好的例子。这个游戏是由Dudeney和Loyd发明的。两个玩家轮流推倒排成一排的小柱子。每次可以任意推倒一根或者推倒相邻的两根,推倒最后的柱子的玩家获胜,也就是没有柱子可以推倒的玩家会失败。
最开始有
-
-
-
-
-
-
-
-
一个游戏如果有n个独立的子游戏组成的话,这个游戏的Grundy函数为这n个子游戏Grundy函数的异或。独立的游戏可以定义为一个已经得到Grundy函数的游戏,或者说本身符合平衡游戏要求的所有特点的游戏可以看成一个独立游戏。这样的定义是在强调独立游戏也可以由几个子游戏组成。例如一个游戏的状态T是由
而
所以对于Kayles游戏,相应的Grundy函数的值如下:
有了Grundy函数后,就很容易判断是N状态还是P状态了,g(K)=0表示K是P状态,g(K)>0表示K是N状态。
关于平衡游戏还有许多更深入的话题,但是一般知道Grundy函数的计算规则就可以解决许多问题了。
- Nim游戏,Grundy函数介绍
- 博弈论 套路开始的地方(NIM游戏和Sprague-Grundy函数)
- NIM游戏&SG函数
- S-Nim Sprague-Grundy Therem
- Codeforces Round #188 (Div. 1) Game with Powers 引发的联想 NIM游戏 Sprague Grundy Theory
- 【转】找出游戏的必胜策略——Nim与Grundy数小记
- nim游戏/sg函数(博弈论)
- nim游戏/sg函数(博弈论)
- Nim游戏和SG函数
- Nim游戏和sg函数
- nim游戏/sg函数(博弈论)
- Nim游戏和SG函数
- Nim 游戏和 SG 函数
- Nim游戏和sg函数
- NIM游戏与SG函数
- 《挑战程序设计竞赛》4.2.2 游戏必胜策略-Nim与Grundy数 POJ2975 1704 2311 3537 2315 CF138D(2)
- POJ Cutting Game(Nim博弈+grundy数)
- Sprague-Grundy函数
- 响应式布局基本实现Media Query(媒介查询)
- 通过服务器返回来JSON歌词数据进行解析
- JAVA 课堂笔记
- setsockopt
- Eclipse常用快捷键
- Nim游戏,Grundy函数介绍
- nodejs模块加载的猜想
- HDU2018
- mysql 单表查询 空值查询
- for循环入门
- vofuria的开发(4)更换目标图片(target)
- R时间序列分析
- 原生javascript实现图片轮播效果——续
- L2-003. 月饼