Nim遊戲
給定 n 堆石子, 第 1 堆石子有 a[1] 個, 第 2 堆石子有 a[2] 個, .... , 第 n 堆石子有 a[n] 個.
Alice 和 Bob 進行回合制遊戲, Alice 先手.
每個回合, 當前操作方可以選擇其中的一堆石子, 並在這堆石子中取走任意個, 但是不能不取.
誰拿完所有的石子, 誰贏.
問誰有必勝策略.
我們嘗試將狀態劃分為必勝態和必敗態.
對於必勝態, 它的所有後繼都為必敗態.
對於必敗態, 它存在一個後繼為必勝態.
定義映射 $f : 狀態 \rightarrow \left\{ 必勝態, 必敗態 \right\}$ .
我們探究兩個石子的情況, 可以得到一個基本的結論: $f(\left\{ Y, Y \right\}) = 必敗態$ .
$f(X, X, Y) = f(Y)$ .
我們嘗試將每一堆拆成若幹個二進制的相加, 然後引用上述結論, 就得到了下面的定理.
設 x = a[1] ^ a[2] ^ a[3] ^ ... ^ a[n] .
當 x = 0 時, 當前狀態是必敗態.
當 x != 0 時, 當前狀態是必勝態.
證明
(1) 當 x != 0 時,
a[1] ^ a[2] ^ ... ^ a[n] ^ x = 0 .
設 x 的二進制最高位為 w , 那麽一定存在 i , 使得 a[i] 存在位 w .
那麽 a[i] > (a[i] ^ x) , 因為除去了 x 的最高位 w .
所以只需要將 a[i] 變為 (a[i] ^ x) 即可.
(2) 當 x = 0 時,
假設存在 i , w , w < a[i] , 使得 a[1] ^ a[2] ^ ... ^ a[i-1] ^ w ^ a[i+1] ^ ... ^ a[n] = 0 .
那麽有 w ^ a[i] = 0 即 w = a[i] , 矛盾.
根據上面的證明過程, 我們也知道:
對於必勝態, 當前的最優策略是選取滿足 a[i] > a[i] ^ w 的一個數, 並將 a[i] 變為 a[i] ^ w .
且根據上述證明過程我們可以得知, 這種數一定是存在的.
Nim遊戲