Nim游戏(初谈博弈)
*這游戲看上去有點復雜,先從簡單情況開始研究吧。
如果輪到你的時候,只剩下一堆石子,
那么此時的必勝策略肯定是把這堆石子全部拿完一顆也不給對手剩,然后對手就輸了。
*如果剩下兩堆不相等的石子,必勝策略是通過取多的一堆的石子將兩堆石子變得相等,
以后如果對手在某一堆里拿若干顆,你就可以在另一堆中拿同樣多的顆數,直至勝利。
如果你面對的是兩堆相等的石子,那么此時你是沒有任何必勝策略的,
反而對手可以遵循上面的策略保證必勝。
*現在我們如何從兩堆的取子策略擴展到任意堆數中呢?
*首先來回憶一下,每個正整數都有對應的一個二進制數,
于是,我們可以認為每一堆硬幣數由2的冪數的子堆組成。
這樣,含有57枚硬幣大堆就能看成是分別由數量為2^5、2^4、2^3、2^0的各個子堆組成。
*現在考慮各大堆大小分別為N1,N2,……Nk的一般的Nim取子游戲。
將每一個數Ni表示為其二進制數(數的位數相等,不等時在前面補0):
N1 = as…a1a0
N2 = bs…b1b0
……
Nk = ms…m1m0
如果每一種大小的子堆的個數都是偶數,我們就稱Nim取子游戲是平衡的,
而對應位相加是偶數的稱為平衡位,否則稱為非平衡位。
因此,Nim取子游戲是平衡的,當且僅當:
as + bs + … + ms 是偶數
……
a1 + b1 + … + m1 是偶數
a0 + b0 + … + m0是偶數
于是,我們就能得出獲勝策略:
游戲人I能夠在非平衡取子游戲中取勝,而游戲人II能夠在平衡的取子游戲中取勝。
*我們以一個兩堆硬幣的Nim取子游戲作為試驗。設游戲開始時游戲處于非平衡狀態。
這樣,游戲人I就能通過一種取子方式使得他取子后留給游戲人II的是一個平衡狀態下的游戲,
接著無論游戲人II如何取子,再留給游戲人I的一定是一個非平衡狀態游戲,如此反復進行,
當游戲人II在最后一次平衡狀態下取子后,游戲人I便能一次性取走所有的硬幣而獲勝。
而如果游戲開始時游戲牌平衡狀態,那根據上述方式取子,最終游戲人II能獲勝。
*下面應用此獲勝策略來考慮 4堆 的Nim取子游戲。
其中各堆的大小分別為7,9,12,15枚硬幣。
用二進制表示各數分別為:0111,1001,1100和1111。于是可得到如下一表:
由Nim取子游戲的平衡條件可知,此游戲是一個非平衡狀態的取子游戲,
因此,游戲人I在按獲勝策略進行取子游戲下將一定能夠取得最終的勝利。
具體做法有多種,游戲人I可以從大小為12的堆中取走11枚硬幣,使得游戲達到平衡(如下表),
之后,無論游戲人II如何取子,游戲人I在取子后仍使得游戲達到平衡。
同樣的道理,游戲人I也可以選擇大小為9的堆并取走5枚硬幣而剩下4枚,
或者,游戲人I從大小為15的堆中取走13枚而留下2枚。
所以歸根結底,Nim游戲的核心就是判斷初始狀態是不是平衡狀態
非平衡狀態先手必勝,平衡狀態后手必勝
轉載于:https://www.cnblogs.com/wutongtong3117/p/7673588.html
總結
以上是生活随笔為你收集整理的Nim游戏(初谈博弈)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SQL Server 2012从零开始学
- 下一篇: JAVA-配置path环境