nim遊戲簡介

2021-06-23 00:42:18 字數 1741 閱讀 2272

定義p-position和n-position,其中p代表previous,n代表next。直觀的說,上一次move的人有必勝策略的局面是p-position,也就是「後手可保證必勝」或者「先手必敗」,現在輪到move的人有必勝策略的局面是n-position,也就是「先手可保證必勝」。更嚴謹的定義是:1.無法進行任何移動的局面(也就是terminal position)是p-position;2.可以移動到p-position的局面是n-position;3.所有移動都導致n-position的局面是p-position。

按照這個定義,如果局面不可能重現,或者說positions的集合可以進行拓撲排序,那麼每個position或者是p-position或者是n-position,而且可以通過定義計算出來。

以nim遊戲為例來進行一下計算。比如說我剛才說當只有兩堆石子且兩堆石子數量相等時後手有必勝策略,也就是這是乙個p-position,下面我們依靠定義證明一下(3,3)是乙個p是乙個p是乙個p-position。首先(3,3)的子局面(也就是通過合法移動可以導致的局面)有(0,3)(1,3)(2,3)(顯然交換石子堆的位置不影響其性質,所以把(x,y)和(y,x)看成同一種局面),只需要計算出這三種局面的性質就可以了。 (0,3)的子局面有(0,0)、(0,1)、(0,2),其中(0,0)顯然是p-position,所以(0,3)是n-position(只要找到乙個是p-position的子局面就能說明是n-position)。(1,3)的後繼中(1,1)是p-position(因為(1,1)的唯一子局面(0,1)是n-position),所以(1,3)也是n-position。同樣可以證明(2,3)是n-position。所以(3,3)的所有子局面都是n-position,它就是p-position。通過一點簡單的數學歸納,可以嚴格的證明「有兩堆石子時的局面是p-position當且僅當這兩堆石子的數目相等」。

根據上面這個過程,可以得到乙個遞迴的演算法——對於當前的局面,遞迴計算它的所有子局面的性質,如果存在某個子局面是p-position,那麼向這個子局面的移動就是必勝策略。當然,可能你已經敏銳地看出有大量的重疊子問題,所以可以用dp或者記憶化搜尋的方法以提高效率。但問題是,利用這個演算法,對於某個nim遊戲的局面(a1,a2,...,an)來說,要想判斷它的性質以及找出必勝策略,需要計算o(a1*a2*...*an)個局面的性質,不管怎樣記憶化都無法降低這個時間複雜度。所以我們需要更高效的判斷nim遊戲的局面的性質的方法。

直接說結論好了。(bouton's theorem)對於乙個nim遊戲的局面(a1,a2,...,an),它是p-position當且僅當a1^a2^...^an=0,其中^表示異或(xor)運算。怎麼樣,是不是很神奇?我看到它的時候也覺得很神奇,完全沒有道理的和異或運算扯上了關係。但這個定理的證明卻也不複雜,基本上就是按照兩種position的證明來的。

根據定義,證明一種判斷position的性質的方法的正確性,只需證明三個命題: 1、這個判斷將所有terminal position判為p-position;2、根據這個判斷被判為n-position的局面一定可以移動到某個p-position;3、根據這個判斷被判為p-position的局面無法移動到某個p-position。

第乙個命題顯然,terminal position只有乙個,就是全0,異或仍然是0。

第二個命題,對於某個局面(a1,a2,...,an),若a1^a2^...^an!=0,一定存在某個合法的移動,將ai改變成ai'後滿足a1^a2^...^ai'^...^an=0。不妨設a1^a2^...^an=k,則一定存在某個ai,它的二進位制表示在k的最高位上是1(否則k的最高位那個1是怎麼得到的)。這時ai^k

博弈 Nim遊戲

nim遊戲是博弈論中最經典的模型,它又有著十分簡單的規則和無比優美的結論。nim遊戲是組合遊戲 combinatorial games 的一種,準確來說,屬於 impartial combinatorial games 以下簡稱icg 滿足以下條件的遊戲是icg 可能不太嚴謹 1 有兩名選手 2 兩...

Nim遊戲模板

鏈結 甲,乙兩個人玩nim取石子遊戲。nim遊戲的規則是這樣的 地上有n堆石子 每堆石子數量小於10000 每人每次可從任意一堆石子裡取出任意多枚石子扔掉,可以取完,不能不取。每次只能從一堆裡取。最後沒石子可取的人就輸了。假如甲是先手,且告訴你這n堆石子的數量,他想知道是否存在先手必勝的策略。模板題...

NIM遊戲 博弈

1.尼姆博弈 n堆石子,每堆的數量a1,a2,a3.an,一方取完後石子個數為0則該方獲勝,問先手是否必勝 if ans a1 a2 a3 an 0 先手必勝 else 先手必輸 延伸1 在此問基礎上新增乙個集合,集合內的數字是每次操作可取的石子個數,每次從一堆中取,最後無法取者判輸 對每堆石子算得...