1. 程式人生 > >詳解博弈論的一類問題——Nim遊戲

詳解博弈論的一類問題——Nim遊戲

先來一道例題:

甲,乙兩個人玩 N i m Nim 取石子游戲。
n i m

nim 遊戲的規則是這樣的:地上有 n n 堆石子,每人每次可從任意一堆石子裡取出任意多枚石子扔掉,可以取完,不能不取。每次只能從一堆裡取。最後沒石子可取的人就輸了。假如甲是先手,且告訴你這 n n
堆石子的數量,他想知道是否存在先手必勝的策略。

這道題有一個神奇的結論: n n 堆石子的數量異或和等於 0 0 時,先手必勝,否則先手必敗

看網上大部分對於這個結論中異或的出現解釋的都不是很清楚,這裡想結合自己的想法談一下這類問題的解法。

一、瞭解定義

我們要知道博弈問題通常有的兩種狀態:必勝態和必敗態。

所謂必勝態,就是在當前的局面下,先手必勝

必敗態,就是在當前的局面下,先手必敗。

那麼,這個遊戲的必敗態我們顯然知道,就是所有石子堆都為 0 0 時。

二、從簡單入手

我們可以用一個 n n 元組( a 1 , a 2 , , a n a_1, a_2, …, a_n )來表示每一個局面,

例如, ( 3 , 3 , 1 ) (3,3,1) 表示一共三堆石子,第一二堆有三個,第三堆有一個。

顯然 ( 3 , 3 , 1 ) (3,3,1) ( 1 , 3 , 3 ) (1,3,3) 是同一種局面,即交換每堆順序不影響答案。

如果初始局面只有一堆石子,則甲有必勝策略。

 甲可以一次把這一堆石子全部取完,這樣乙就無石子可取了。

如果初始局面有兩堆石子,而且這兩堆石子的數目相等,則乙有必勝策略。

 因為有兩堆石子,所以甲無法一次取完;
 如果甲在一堆中取若干石子,乙便在另一堆中取同樣數目的石子;
 根據對稱性,在甲取了石子之後,乙總有石子可取;
 石子總數一直在減少,最後必定是甲無石子可取。

對於初始局面(1),甲有必勝策略,而初始局面(3, 3),乙有必勝策略。

局面的加法: ( a 1 , a 2 , , a n ) + ( b 1 , b 2 , , b m ) = ( a 1 , a 2 , , a n , b 1 , b 2 , , b m ) (a_1, a_2, …, a_n) + (b_1, b_2, …, b_m) = (a_1, a_2, …, a_n, b_1, b_2, …, b_m)

所以 ( 3 ) + ( 3 ) + ( 1 ) = ( 3 , 3 ) + ( 1 ) = ( 3 , 3 , 1 ) (3) + (3) + (1) = (3, 3) + (1) = (3, 3, 1)

對於局面 A , B , S A, B, S ,若 S = A + B S=A+B ,則稱局面 S S 可以分解為“子局面 A A B B
局面 ( 3 , 3 , 1 ) (3, 3, 1) 可以分解為 ( 3 , 3 ) (3, 3) ( 1 ) (1)

如果初始局面可以分成兩個相同的“子局面”,則乙有必勝策略。

 設初始局面 S = A + A S=A+A ,想象有兩個桌子,每個桌子上放一個 A A 局面;
 若甲在一個桌子中取石子,則乙在另一個桌子中對稱的取石子;
 根據對稱性,在甲取了石子之後,乙總有石子可取;
 石子總數一直在減少,最後必定是甲無石子可取。

對於局面S,若先行者有必勝策略,則稱“S勝”。
對於局面S,若後行者有必勝策略,則稱“S負”。
A = ( 1 ) A=(1) B = ( 3 , 3 ) B=(3, 3) C = ( 2 , 2 , 5 , 5 , 5 , 5 , 7 , 7 ) C=(2, 2, 5, 5, 5, 5, 7, 7) ,則 A A 勝, B B 負, C C 負。
我們要做的,就是如何判斷局面的勝負。

 如果局面 S S 勝,則必存在取子的方法 S T S→T ,且 T T 負。
 如果局面 S S 負,則對於任意取子方法 S T S→T ,有 T T 勝。

設初始局面 S S 可以分解成兩個子局面 A A B B 分解理論)。

若A和B一勝一負,則S勝。

 不妨設 A A B B 負;
 想象有兩個桌子 A A B B ,桌子上分別放著 A A 局面和 B B 局面;
 因為 A A 勝,所以甲可以保證取桌子 A A 上的最後一個石子;
 與此同時,甲還可以保證在桌子 B B 中走第一步的是乙;
 因為 B B 負,所以甲還可以保證取桌子 B B 中的最後一個石子;
 綜上,甲可以保證兩個桌子上的最後一個石子都由自己取得。

若A負B負,則S負。

 無論甲先從 A A 中取,還是先從 B B 中取,都會變成一勝一負的局面;
 因此,乙面臨的局面總是“勝”局面,故甲面臨的 S S 是“負”局面。

即:若 B B 負,則 S S 的勝負情況與 A A 的勝負情況相同。

若A勝B勝,則有時S勝,有時S負。

 如果 S = A + C + C S=A+C+C ,則S的勝負情況與A相同。
 令 B = C + C B=C+C ,則 S = A + B S=A+B B B 負,故 S S 的勝負情況與 A A 相同。

初始局面 ( 3 , 3 , 1 ) =