博弈游戲的各種經典模型(備忘)


SG函數的計算方法:

一個局面的SG為mex{后繼局面的SG}

mex運算為集合中沒出現的最小的自然數

幾個局面的和的SG為單個的SG亦或

SG不為0時先手必勝,SG為0時后手必勝

 

1.Nim Game

最為經典

n堆石子,每次可以從一堆里面取任意個石子

對於一堆石子,SG函數就是石子數

整個游戲的SG函數是每一堆石子的SG函數的亦或和

必勝:SG不為0

必敗:SG為0

 

2.Bash Game

每次最多取m個石子,其他同Nim

一堆石子的SG函數為石子數mod(m+1)

整個游戲的SG函數是每一堆石子的SG函數的亦或和

必勝:SG不為0

必敗:SG為0

 

3.Nimk Game

每次最多可以同時從k堆石子進行操作,這k堆可以取不同數量的石子

一堆石子的SG函數為石子數

對每一個二進制位單獨算,求SG函數每一個二進制位1的個數mod(k+1),如果都為0,則必敗,否則必勝

證明:

對於必敗態不管怎么走都只能走到必勝態

對於變化的SG的最高位,你至少變化為1,最多變化為k,所以這一位1的個數不可能mod(k+1)還是為0

對於必勝態我們肯定可以找到一種方法走到必敗態

我們從高位往低位做,記s為這一位可以隨意填值的數字個數(如果把某一位從1變成0,那么更低位就能隨便取值了)

假設我們現在做到第k位,記n為除了能隨便取值的s位以外這一位1的個數mod(k+1)

如果n+s<=k,那么很簡單,我們取出n個第k位為1的讓這些數字的第k位變成0,那s個數字這一位也變成0,然后s+=n

如果n+s>k,即n+s>=k+1,那么s>=k+1-n,我們在s中間取k+1-n個變為1,其他變為0就可以滿足條件了

 

4.Anti-Nim Game

不能取石子的一方獲勝

必勝:SG不為0且至少有一堆石子數大於0,SG為0且每一堆石子數都為1

必敗:其余為必敗

 

5.Staircase Nim

階梯博弈

每次可以從一個階梯上拿掉任意數量石子放到下一層階梯,不能操作的為輸

SG函數為奇數階梯上的石子的亦或和

如果移動偶數層的石子到奇數層,對手一定可以繼續移動這些石子到偶數層,使得其SG不變

 

6.Wythoff Game

有兩堆石子,每次可以從一堆或者兩堆里拿走一樣數目的石子,不能取的為輸

必敗態為(1,2)(3,5)(4,7)(6,10)...

差為1,2,3,4.....每一對數的第一個數為前面沒出現的最小的正整數

 

7.Take & Break

每次可以把一堆石子分成兩堆甚至多堆不為0的石子,不能操作的為輸

暴力計算SG

 

8.樹上刪邊游戲

給定根節點,每次可以刪掉一條邊,不與根節點相連的部分刪除

葉子節點SG為0,其他節點的SG函數為子樹SG+1的亦或和

證明:

將子樹SG+1看做石子數(我們可以定義沒有節點的圖的SG為-1),然后就變成了取石子游戲

 

9.無向圖刪邊

規則同樹上刪邊游戲

結論:把奇環縮成一個點加一條新邊,把偶環縮成一個點,不影響SG,然后套用樹上刪邊游戲

 

10.翻硬幣游戲

n枚硬幣排成一排,有的正面朝上,有的反面朝上。
游戲者根據某些約束翻硬幣(如:每次只能翻一或兩枚,或者每次只能翻連續的幾枚),但他所翻動的硬幣中,最右邊的必須是從正面翻到反面。
誰不能翻誰輸。

需要先開動腦筋把游戲轉化為其他的取石子游戲之類的,然后用如下定理解決:
局面的 SG 值等於局面中每個正面朝上的棋子單一存在時的 SG 值的異或和。

 

證明的基本套路:

必勝局面存在一個操作到達必敗局面,必敗局面無論怎么操作都會到必勝局面


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM