取石子游戲的策略及其應用


有一種很有意思的游戲,就是有物體若干堆,可以是石子或是圍棋子等等均可。兩個人輪流從堆中取物體若干,規定最后取光物體者取勝。取石子游戲是我國民間流傳已久的一種博奕,在國外亦稱Nim游戲。別看這游戲極其簡單,卻蘊含着深刻的道理。下面我們來分析一下要如何才能夠取勝。

游戲Ⅰ 有若干堆任意數目的小石子{a1,a2,…,am}(m≥1),兩人輪流取石子,每人每次可以從其中任意一堆中取,每次可以取1、2、3、……或k(1≤k≤ min{a1,a2,…,am})顆石子,把石子取完的人為勝者。

采用符號{a1,a2,…,am;k}來代表游戲Ⅰ中小石子的初始狀況和限制條件,一個人取一次石子實際上就是把{a1,a2,…,am;k}中某個分量ai(1≤i≤m)減小為ai′,即{a1,a2,…,ai,…,am;k}—→{a1,a2,…,ai′,…,am;k}(0≤ai<ai),我們把這種取一次石子使數組發生的變換稱為T變換,根據現成博奕論先驅馮·諾伊曼(VonNeumann)的“完全確定信息游戲必定存在一種確定的獲勝策略”的經典理論,要么對先取者存在某種取法,即某個T變換,無論后取者如何取,先取者總有相應對策,直至最終取得勝利;要么無論先取者如何取,后取者可以找到某種T變換,保證后取者總有相應策略獲勝。為了解決游戲{a1,a2,…,am;k}的對策,我們先看一個簡單的例子。

例1 桌上放着一堆小石子一共100顆,兩人(甲、乙)輪流取,每次可以取1至10顆,取完的人為勝者,怎樣才能取勝?

分析這個問題實際上是取石子游戲的特殊情形{100;10},我們利用倒推法:容易看出11是取勝的關鍵數學,因為到此時,不論對方(甲)取多少顆(大於0且小於11),總留下大於0且小於11顆石子,這樣乙方一次取完即獲得勝利。同樣地分析,要取到11必須取到22,33,44,55,66,77,88,99,這樣我們就知道了獲勝之道:

①先取1顆石子,留下99顆,然后對方取a(1≤a≤10)顆,己方取(11—a)顆,就總能掌握這種致勝的關鍵數,從而確保獲勝。②如果對方先取,己方只需利用對方不知道其中奧秘,爭取到一個致勝數,就總能依①中方法取到下一個致勝數,最后取得勝利。實際上,如果局中人均熟知獲勝策略,那么開局的局勢就已經完全決定了結局的輸贏,例1其實是先取者必勝的局勢,從這個例子的分析過程我們得到啟示:可以用同余理論來探討一般情況。

一般地,在取石子游戲{a1,a2,…,am;k中,ai≡ai′(modk+1)(i=1,2,…,m)其中0≤ai′≤k,在{a1′,a2′,…,am′;k}中有取勝策略的一方在{a1,a2,…,am;k}中也有取勝策略。證明 在{a1′,a2′,…,am′;k}中有獲勝策略的一方,對於大於k的分量ai(i=1,2,…,m總能做到ai≡ai′(modk+1),即對方取a(1≤k),己方取k+1-a,使兩人各取一次之后該分量減小k+1,也就對第i堆各取n(n≥1)次之后石子數便由ai=ai′+n(k+1)變成ai′,故在{a1′,a2′,…,am′;k}中有取勝策略的一方在{a1,a2,…,am;k}中也有取勝策略。

 

 

游戲Ⅱ 有若干堆任意數目的小石子{a1,a2,…,am},兩人輪流從中取石子,每人每次可以取走任意一堆中任意數目的石子,不能不取,把石子取完的人為勝者。

采用m元數組{a1,a2,…,am}(m≥1)來描述這類取石子游戲,一人取走一次石子相當於用某個T變換把其中某個分量ai(1≤i≤m)減小為ai′,即{a1,a2,…,ai,…,am}T{a1,a2,…,ai′,…,am}(0≤ai′<ai)。

有趣的是為了解決這類一般情況,我們需要用到整數的二進位制,把m元數組{a1,a2,…,am}中的每一個分量用二進位制數表示,ai(1≤i≤m)寫在第i行,同時對齊二進位制數的位數,在列上作十進位制加法,其和寫在第(m+1)行,記為{n1,n2,…,nj,…,nl},如果所有這些和數nj(1≤j≤l)均為偶數,我們稱這個m元數組為偶數組;若nj(1≤j≤l),中有一個數為奇數,則稱之為非偶數組。

例如:對於3元數組{2,3,5};

a1    2      0  1  0

a2    3      0  1  1

a3    5      1  0  1

1    2  2

n1  n2  n3

因為其中n1=1,所以{2,3,5}是非偶數組。

同樣,對於3元數組{2,3,1}:

a1    2    1  0

a2    3    1  1

a3    1    0  1

 

由於nj(j=1,2)為偶數,則{2,3,1}為偶數組。

 

偶數組與非偶數組在T變換下具有如下性質:

 

(1)偶數組經過一次T變換之后一定變為非偶數組;

 

(2)對於非偶數組,一定可以找到某一個T變換,使其變為偶數組。

 

這樣我們容易判定:如果給定的m元數組是偶數組,則后取者必有獲勝策略;相反,若給定m元數組為非偶數組,則先取者有方法獲勝,因為給定的m元數組為偶數組,先取者無論怎樣取,只能將偶數組變為非偶數組,后取者則有策略將此時的非偶數組變為偶數組,由於每次取走石子,剩下石子數目一定越來越小,而{0,0,…,0}是偶數組,所以后取者獲勝,同理可證相反情況。

 

 

 

例2 有三堆石子,各堆數目分別是2、3、6,兩人輪流取,取完的人為勝者,若甲先乙后,誰取勝?

 

解:

 

a1    2    0  1  0

 

a2    3    0  1  1

 

a3    6    1  1  0

 

           1  3  1

 

           n1 n2  n3

 

ni為奇數i=1,2,3,所以{2,3,6}為非偶數,我們可以判定:先取者甲獲勝,依性質證明過程給出的操作方法,只需將a3=6變為1,可以驗證{2,3,1}是偶數組,無論乙如只可能變成如下六種情形之一:{2,3,0},1},{2,1,1},{2,0,1},{1,3,1},{0,3,1},都是非偶數組,同樣按原方法可以將其變2}或{1,1},乙再取后,甲總能確保獲勝。 

 

 

例3: 12 屆全國青少年信息學奧林匹克聯賽初賽題現有5堆石子,石子數依次為3,5,7,19,50,甲乙兩人輪流從任一堆中任取 (每次只能取自一堆,不能不取),取最后一顆石子的一方獲勝。甲先取,問甲有沒有獲勝策略(即無論 乙怎樣取,甲只要不失誤,都能獲勝)?如果有,甲第一步應該在哪一堆里取多少?請寫出你的結果: _________________________________________________。

解:由游戲Ⅱ知,得到如下推理:

19    010011

7   000111

5        000101

3        000011

          010010   (18)10

50-18=32

所以第1次只能在第5堆石子中取32粒,使得取出32粒后為偶數組。

 

 

最后我們看一道綜合利用游戲Ⅰ、Ⅱ的例子:

例4 在3×25的棋盤上放着三顆石a、b、c(如圖所示),兩人輪流將石子向右移人一次只可以移動其中一顆石子1至5后無格可走者為輸家,若甲先行,乙后行,贏?

 

 

a

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

b

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

c

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

解 由25≡7(mod6),根據游戲Ⅰ的策略{25,25,25;5}中有獲勝策略的一方在{7,7,7;5}中也有獲勝方法,又把石子由圖中所示{3,2,6}移到{7,7,7}即相當於取石子游戲Ⅱ的{4,5,1},由於{4,5,1}是偶數組,故先移者輸.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM