1. 程式人生 > 其它 >Nim遊戲與SG函式

Nim遊戲與SG函式

博弈論最基礎的兩個知識點 : Nim 遊戲, SG 函式.

Nim 遊戲

結論 : 若

\[a_1\oplus a_2 \oplus a_3 \oplus...\oplus a_n = 0 \]

先手必勝.

證明 :

\[a_1\oplus a_2 \oplus a_3 \oplus...\oplus a_n = x \]

\(x\) 的二進位制表示中的最高位為 \(k\), 那麼 \(a_1,a_2...a_n\) 中必然存在至少一個 \(a_i\) 的第 \(k\) 位是 \(1\), 因為 \(a_i \oplus x < a_i\), 所以可以拿走 \(a_i-(a_i\oplus x)\)

個石子使得 \(a_i\) 變成 \(a_i-(a_i-(a_i\oplus x)) = a_i\oplus x\) 個石子. 因為

\[a_1\oplus a_2 \oplus a_3 \oplus...\oplus a_i\oplus...\oplus a_n = x \]

則必然有 :

\[a_1\oplus a_2 \oplus a_3 \oplus...\oplus a_i\oplus x\oplus...\oplus a_n = 0 \]

也就是說, 倘若異或和不為 \(0\), 我們一定可以找到一個 \(a_i\) 使其變成 \(a_i \oplus x\) , 使異或和變為 \(0\)

. 又因為終止狀態 (全 \(0\)) 的異或和為 0, 因此異或和為 \(0\) 為必敗態, 異或和不為 \(0\) 為必勝態.

\(SG\) 函式

\(mex\) 函式 : 若 \(S\) 是一個非負整數集合, \(mex(S)\) 為求出未出現在集合中的最小非負整數.

\(SG\)​ 函式 : 在有向圖遊戲 \(G\)​ 中, 設當前結點為 \(x\)​, 後繼結點分別有 \(y_1, y_2,..,y_k\)​ . 則 \(SG(x)=mex\{SG(y_1),SG(y_2),...SG(y_k)\}\)​​. 起點 \(s\)​ 的 \(SG\)​ 值為整個遊戲的 \(SG\)​ 值, \(SG(s)=SG(G)\)

​, 若有多個有向圖遊戲 \(G_1,G_2,...,G_k\)​, 則 \(SG(G)=SG(G_1)\oplus SG(G_2)\oplus ...\oplus SG(G_k)\). 這與 \(Nim\) 遊戲的證明相同.

\(SG\) 函式的求法 : 記憶化搜尋.

Nim 遊戲 : Acwing 891. Nim遊戲, Acwing 892. 臺階-Nim遊戲

\(SG\) 函式 : Acwing 893. 集合-Nim遊戲