詳解博弈論的一類問題——Nim遊戲
先來一道例題:
甲,乙兩個人玩
取石子游戲。
遊戲的規則是這樣的:地上有
堆石子,每人每次可從任意一堆石子裡取出任意多枚石子扔掉,可以取完,不能不取。每次只能從一堆裡取。最後沒石子可取的人就輸了。假如甲是先手,且告訴你這
堆石子的數量,他想知道是否存在先手必勝的策略。
這道題有一個神奇的結論:當 堆石子的數量異或和等於 時,先手必勝,否則先手必敗。
看網上大部分對於這個結論中異或的出現解釋的都不是很清楚,這裡想結合自己的想法談一下這類問題的解法。
一、瞭解定義
我們要知道博弈問題通常有的兩種狀態:必勝態和必敗態。
所謂必勝態,就是在當前的局面下,先手必勝
必敗態,就是在當前的局面下,先手必敗。
那麼,這個遊戲的必敗態我們顯然知道,就是所有石子堆都為 時。
二、從簡單入手
我們可以用一個 元組( )來表示每一個局面,
例如, 表示一共三堆石子,第一二堆有三個,第三堆有一個。
顯然 和 是同一種局面,即交換每堆順序不影響答案。
如果初始局面只有一堆石子,則甲有必勝策略。
甲可以一次把這一堆石子全部取完,這樣乙就無石子可取了。
如果初始局面有兩堆石子,而且這兩堆石子的數目相等,則乙有必勝策略。
因為有兩堆石子,所以甲無法一次取完;
如果甲在一堆中取若干石子,乙便在另一堆中取同樣數目的石子;
根據對稱性,在甲取了石子之後,乙總有石子可取;
石子總數一直在減少,最後必定是甲無石子可取。
對於初始局面(1),甲有必勝策略,而初始局面(3, 3),乙有必勝策略。
局面的加法:
所以 。
對於局面
,若
,則稱局面
可以分解為“子局面”
和
。
局面
可以分解為
和
。
如果初始局面可以分成兩個相同的“子局面”,則乙有必勝策略。
設初始局面
,想象有兩個桌子,每個桌子上放一個
局面;
若甲在一個桌子中取石子,則乙在另一個桌子中對稱的取石子;
根據對稱性,在甲取了石子之後,乙總有石子可取;
石子總數一直在減少,最後必定是甲無石子可取。
對於局面S,若先行者有必勝策略,則稱“S勝”。
對於局面S,若後行者有必勝策略,則稱“S負”。
若
,
,
,則
勝,
負,
負。
我們要做的,就是如何判斷局面的勝負。
如果局面
勝,則必存在取子的方法
,且
負。
如果局面
負,則對於任意取子方法
,有
勝。
設初始局面 可以分解成兩個子局面 和 (分解理論)。
若A和B一勝一負,則S勝。
不妨設
勝
負;
想象有兩個桌子
和
,桌子上分別放著
局面和
局面;
因為
勝,所以甲可以保證取桌子
上的最後一個石子;
與此同時,甲還可以保證在桌子
中走第一步的是乙;
因為
負,所以甲還可以保證取桌子
中的最後一個石子;
綜上,甲可以保證兩個桌子上的最後一個石子都由自己取得。
若A負B負,則S負。
無論甲先從
中取,還是先從
中取,都會變成一勝一負的局面;
因此,乙面臨的局面總是“勝”局面,故甲面臨的
是“負”局面。
即:若 負,則 的勝負情況與 的勝負情況相同。
若A勝B勝,則有時S勝,有時S負。
如果
,則S的勝負情況與A相同。
令
,則
且
負,故
的勝負情況與
相同。
初始局面