Nim遊戲(初談博弈)

2021-08-02 02:40:13 字數 1807 閱讀 9765

通常的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遊戲的核心就是判斷初始狀態是不是平衡狀態

非平衡狀態先手必勝,平衡狀態後手必勝

博弈 Nim遊戲

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

NIM遊戲 博弈

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

博弈 Nim遊戲

1069 nim遊戲 基準時間限制 1 秒 空間限制 131072 kb 分值 0 難度 基礎題 有n堆石子。a b兩個人輪流拿,a先拿。每次只能從一堆中取若干個,可將一堆全取走,但不可不取,拿到最後1顆石子的人獲勝。假設a b都非常聰明,拿石子的過程中不會出現失誤。給出n及每堆石子的數量,問最後誰...