博弈論:公平組合遊戲(Nim 遊戲 & SG 定理)學習筆記
公平組合遊戲
定義:
- 兩人輪流以最優方式操作,兩人的操作方式相同。
- 每次操作遊戲狀態必須改變,不能操作者輸,另一人贏。
- 每個遊戲狀態不能重複到達。
我們把每個狀態看作一個點,每個狀態的點向它後繼狀態的點連有向邊,可以生成一張 DAG(有向無環圖)。
所以公平組合遊戲也叫做有向圖遊戲。
必勝狀態 & 必負狀態
定義:
- 沒有後繼狀態的狀態為必負狀態。
- 至少有一個後繼狀態為必負狀態的狀態為必勝狀態。
- 所有後繼狀態都為必勝狀態的狀態為必負狀態。
- 所有狀態為必勝狀態或必負狀態。
記 \(n,m\) 為遊戲生成的有向圖的點數和邊數。
則我們可以根據必勝狀態和必負狀態在 \(O(n+m)\) 的時間用記憶化搜尋解決遊戲的勝負。
Nim 遊戲
有 \(n\) 堆石子,每堆石子有 \(a_i\) 個,兩個人輪流取正整數個石子,不能取者輸。
Nim 和
設一個狀態 Nim 和為 \(S=a_1\oplus a_2\oplus\cdots\oplus a_n\)。
性質:Nim 和為 0 的狀態為必負狀態,Nim 和不為 0 的狀態為必勝狀態。
證明
根據必勝狀態和必負狀態的定義,我們只需證明:
- 沒有後繼狀態的狀態,滿足 \(S=0\)。
- 對於 \(S\ne0\) 的狀態,至少有一種操作使得後繼狀態 \(S=0\)。
- 對於 \(S=0\) 的狀態,沒有一種操作使得後繼狀態 \(S\ne 0\)。
證明如下:
- 沒有後繼狀態的狀態,\(a_1=a_2=\cdots=a_n=0\),則 \(S=0\)。
- 對於 \(S\ne 0\) 的狀態,考慮操作 \(a_i\) 變為 \(a_i'\) 可以滿足條件。則 \(S\oplus a_i\oplus a_i'=0\),即 \(a_i'=a_i\oplus S\)。
由於 \(S\ne 0\),因此考慮 \(S\) 的最高位的一位 1,根據異或的定義,有奇數個 \(a\) 這一位為 1,對於這一位為 1 的 \(a_j\),一定有 \(a_j\oplus S<a_j\),則操作 \(j\) 可以使 \(S'\) 為 0。 - 對於 \(S=0\) 的狀態,根據異或的定義,其中一個 \(a\) 改變則 \(S\) 也會改變。
SG 函式
定義:
- 對於沒有後繼狀態的狀態 \(x\),\(SG(x)=0\)。
- 對於狀態 \(x\) 和它的所有後繼狀態 \(y\),\(SG(x)=mex(\{SG(y)\})\)。
其中 \(mex(S)\) 表示集合 \(S\) 中最小沒出現過的非負整數。
性質:\(SG(x)=0\) 時,\(x\) 為必敗狀態;\(SG(x)\ne 0\) 時 \(x\) 為必勝狀態。
證明
根據必勝狀態和必敗狀態的定義,我們只需證明:
- 沒有後繼狀態的狀態滿足 \(SG=0\)。
- 對於後繼狀態存在 \(SG=0\) 的狀態,它的 \(SG\ne 0\)。
- 對於後繼狀態沒有 \(SG=0\) 的狀態,它的 \(SG=0\)。
根據 \(SG\) 的定義,這三點都是顯然的。
SG 定理
對於由 \(n\) 個有向圖遊戲組成的遊戲,這個遊戲每次操作可以選擇一張圖操作一次。
若當前每張圖的狀態為 \(s_i\),當且僅當 \(SG(s_1)\oplus SG(s_2)\oplus\cdots SG(s_n)\ne 0\) 時,先手必勝。
證明
我們可以把第 \(i\) 堆石子有 \(SG(s_i)\) 個,由於 \(SG(x)=mex(\{SG(y)\})\),則 \(SG(s_i)=x\) 可以轉移到所有的 \(SG(s_i')=y,0\le y<x\),這符合 Nim 遊戲的要求,於是可以用 Nim 和來解釋。