Sprague-Grundy Function-SG函數--博弈論(3)


^^^轉載請注明出處~~~

The Sprague-Grundy theory of impartial games

公平游戲的Sprague-Grundy定理

 

公平游戲是一種雙人游戲,在游戲中雙方都有完整的信息,沒有牽涉,任何狀態的合法操作對雙方來說都是相同的。

一個公平游戲可以抽象地用一個有向無環圖來表示,這個圖中每個點都對應這一個狀態,每條有向邊代表從一個狀態到另一個狀態的合法操作。

 

我們可以想象一個代幣最初放在某個點上,然后兩個玩家輪流將其從當前的點移動到它的后繼點。當代幣移動到匯點時游戲結束,匯點是一個沒有出度的點,最后一個需要操作的玩家就是勝者。

P- 和 N-狀態

 

如果雙方都按照最佳策略進行游戲,我們可以將游戲中的每個狀態依據其是先手必勝還是后手必勝分類。

一個先手勝狀態被認為是一個N-狀態(因為下一個玩家即將獲勝),一個后手勝狀態被認為是一個P-狀態(因為前一個玩家即將獲勝)

 

P-和N-狀態歸納性地描述如下:

一個點v是P-狀態當且僅當它的所有后繼都為N-狀態

一個點v是N-狀態當且僅當它的一些后繼是P-狀態

這個歸納從匯點開始,匯點是P-狀態因為它顯然滿足P-狀態的要求。

游戲的P-和N-狀態的信息提供了它的必勝策略。如果輪到我們且游戲處在一個N-狀態,我們應該轉移到一個P-狀態。接着我們的對手就會被迫進入N-狀態,依此類推。我們最終會移入一個匯點並獲得勝利。

游戲的和

如果G1和G2 是公平游戲,那么他們的和G1 + G2是另一個公平游戲,玩法如下:每個回合,一個玩家選擇G1, G2 中的一個(隨便哪個他希望的)然后玩它,不碰另一個游戲。當 G1 和 G2都不能操作時游戲結束。

 

形式上,如果 G1 = (V1, E1) 和 G2 = (V2, E2)是游戲圖,那么他們的和 Gsum = (Vsum, Esum) 規定為:

Vsum = V1 × V2,

Esum = {(v1v2, w1v2) | (v1, w1) ∈ E1} ∪ {(v1v2, v1w2) | (v2, w2) ∈ E2}.

 

現在,假定我們給出兩個游戲G1 和 G2。如果我們只知道單個游戲的P-狀態和N-狀態我們能夠正確地玩好游戲和G1 + G2嗎?答案是否定的。不難看出兩個P-狀態的和總是P-狀態,P-狀態和N-狀態的和總是N-狀態。但是兩個N-狀態的和既可能是P-狀態也可能是N-狀態。因此,只知道單個游戲的P-狀態和N-狀態是不夠的。

為了正確地玩好游戲和我們需要推廣P-狀態和N-狀態,它就是Sprague-Grudy函數(或者簡稱為Grundy函數)。

 

The Sprague-Grundy function

Sprague-Grundy 函數

 

令N = {0, 1, 2, 3, ...} 為自然數的集合。Sprague-Grundy 函數給游戲中的每個狀態分配了一個自然數。結點v的Grundy值等於沒有在v的后繼的Grundy值中出現的最小自然數。

形式上:給定一個有限子集 S ⊂ N,令mex S(最小排斥值)為沒有出現在S中的最小自然數

mex S = min (N S). 

現在,給定一個游戲圖G=(V,E),其Sprague-Grundy函數g:V → N 歸納定義為

g(v) = mex {g(w) | (v, w) ∈ E}.

從G的匯點開始歸納,可知它的Grundy值為0

 

 

Sprague-Grundy函數滿足兩個重要性質:

點v是一個P-狀態當且僅當g(v)=0 

如果G = G1 + G2 且 v = v1v2 是G的一個狀態,那么g(v) 為g(v1) 和 g(v2) 在二進制下的異或:

g(v) = g(v1) ⊕ g(v2).

運算⊕也稱作nim和。舉個例子,3 ⊕ 5 = 011 ⊕ 101 = 110 = 6。類似地,3 ⊕ 6 = 5 且 5 ⊕ 6 = 3。

不難利用歸納法證明上面兩個性質。

根據這些性質有v = v1v2 是P-狀態當且僅當g(v1) = g(v2), 因為這是唯一能夠使得nim和為0的途徑。

無疑,游戲的求和是滿足交換律和結合律的運算,nim和運算也是。

因此,我們可以通過獲知單個游戲的Grundy函數來正確地玩好任意數目游戲和。 

我們的策略如下:如果輪到我們且游戲的Grundy值給出了一個非0的nim和,那么必然在游戲的某個組分中存在一個操作使得nim和變為0。我們應該執行這個操作,那么接着我們的對手就被迫再次使得nim和非0。最終,我們將成為在最后一個游戲執行最后一個操作的人,最后將nim和變為0.

The game of Nim

Nim游戲

最基本的公平游戲是Nim堆。一個Nim堆由確定數目代幣組成。在每個回合,一個玩家從堆上拿走1到整堆中任意數目的代幣。拿空整堆的人獲得勝利。

 

這個游戲如果獨立看是沒有意義的:先手玩家可直接拿走所有代幣並立即獲得勝利! 

但是如果我們將各種大小的Nim堆加在一起,我們就得到了著名的Nim游戲。

大小為n的Nim堆的Grundy值為n。因此,Nim游戲中每個狀態的Grundy值為每堆大小的Nim和。

Games that decompose into sums of themselves 

一些分解成自身和的游戲

 

Sprague-Grundy定理最自然的應用就是一些分解成自身和的一些游戲。

考慮下面這個游戲:有一個大小為m*n的棋盤,且有無限數目某特定形狀的骨牌供應。在每個回合,玩家在棋盤上一個空位放置一個骨牌,不能放骨牌的玩家就是敗者。

 

 

在游戲期間,棋盤會逐漸分成不同的區域,對其我們可以分別計算Grundy值。

 

 

 

再舉個例子,考慮Grundy游戲。這個游戲的一個狀態由一些不同大小的代幣堆組成,一次操作由只取一堆並把它分成兩個不相等的堆組成。當所有堆的大小只有1和2的時候游戲結束,因為它不能再分。

令g(n)為單個大小為n的堆的Grundy值。數列g(n)如下:

n:     1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20...

g(n):0  0  1  0  2  1  0  2  1  0   2   1  3   2   1   3  2   4   3  0

比如:

當n等於1,2時已滿足條件,即不能再取,也就沒有下一個局面,所以g(1)={};所以G(1)={0,1,2,3,4...};

所以g(1)=0;同理g(2)=0;依次遞推,g(3),g(4),g(5)等,

例如:g(6)={#(1,5),#(2,4)}={g(1)+g(5),g(2)+g(4)}=g(2,0);

所以G(6)={1,3,4,5,6...},所以g(6)=1;

 此題的求法,具體參見我的博客的最下面求f(n)的值:http://www.cnblogs.com/hsqdboke/archive/2012/04/20/2459796.html 

^^^轉載請注明出處~~~


免責聲明!

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



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