為什麼會想到用異或來算SG函數?它的本質是什麼?


下面是之前回高中講課的時候的講法梗概,個人覺得還湊合吧。

記法和一些其他的說明:

組合遊戲(下稱「遊戲」)全部用DAG來表示(應當是單源單匯的,即恰有一個入度為0的點和一個出度為0的點)。遊戲的全體記為GAME(是一個可數的集合),空的遊戲(只有一個頂點的DAG)用phi 表示。nim(k)表示只有一堆k個石子的nim遊戲。

GAME上有一個二元的+運算,就是somehow把兩個遊戲的頂點集合的笛卡爾積作為新的頂點集合的通常的「遊戲的和」運算,你們懂的。由於DAG的表示可能牽涉頂點編號之類的問題,我們就不談論+是否交換之類的事情了,這不太重要。

謂詞win(g)表示遊戲g是先手必勝的。定義關係T(x,y)成立如果對任意的zin GAME都有win(x+z)=win(y+z)。容易驗證TGAME上的一個等價關係,以下也記為x sim y或者「xy等價」。TGAME上誘導出的等價類集合記為ar{GAME} ,根據T的定義,+也能自然地誘導到ar{GAME} 上。你應驗證裝備了+ar{GAME} 為一abel群,其中:

ar{phi}是單位元

ar{phi}以外的元素都為2階

i
e jar{nim(i)} 
e ar{nim(j)}(因此ar{GAME} 也是可數的)

容易證明ar{GAME} 同構於一列2階群的直和(每次取一個還不能被生成的元素加進生成元集即可),因此同構於裝備了xor運算的自然數。

之前的活看上去從一片黑暗中得到了xor運算。接下來我們還需要找一個具體並且好用的表示,終於需要干一些不能避免的臟活(僵硬的「驗證」而非「推倒」)了。你需要:證明ar{nim}們能生成整個ar{GAME} 而不是它的一個真子群(對頂點數歸納,證明任意遊戲都等價於某個nim(k),驗證mex結論的正確性),並且證明把ar{nim(k)}映到k確實是同構。

最後一步驗證ar{nim(x)} + ar{nim(y)} = ar{nim(x oplus y)}直接驗證mex(left{ a oplus x : a<y 
ight}cup left{ aoplus y : a<x 
ight} ) = x oplus y有點無趣。一個好一點的方法是,可以不費力地驗證ar{nim(1)} + ar{nim(x)} = ar{nim(x oplus 1)},進而可以看到left{ ar{nim(2k)} 
ight} 同構於ar{GAME},然後容易證明left{ ar{nim(2^k)} 
ight} ar{GAME}的一個極小生成元集。


以下內容全是個人的空想臆測,一時民科性子發作,僅供娛樂消遣。

考慮在一個單源拓撲圖G上的博弈遊戲,初始狀態為源點S,玩家輪流選擇當前狀態的一條出邊(u,v)並將當前狀態變為v,不能如此做的玩家輸。

這個遊戲的勝負判定是很簡單的,但是如果多個這樣的遊戲組合起來呢?

形式化的說,對於有向圖X,Y,記Xcdot YXY的笛卡爾積。

我們從這個遊戲的性質出發,我們用一個迷之函數f: DirectedGraph o ???來表示有向圖G上的遊戲的勝負狀態。

對於這個函數值定義一種複合運算f(X)oplus f(Y)=f(Xcdot Y)

規定,若G上的遊戲先手必輸,則f(G)=0

於是顯然有f(G)oplus 0=f(G),f(G)oplus f(G)=0,f(X)oplus f(Y)=f(Y)oplus f(X),(f(X)oplus f(Y))oplus f(Z)=f(X)oplus (f(Y)oplus f(Z))

不難驗證這個函數值構成了一組線性空間,現在的首要任務是找到一組基。

我們希望找到一組儘可能簡單的有向圖G的函數值f(G)來作為基,為了考察f(X)是否等於f(Y),我們考慮Xcdot Y上的遊戲是否先手必敗。

不難發現,記刪除S後,以S的直接後繼們分別為源點形成的拓撲圖集合為Tforall tin T,f(G)
eq f(t),這是由於在Gcdot t的遊戲中先手只需從S走一步即可使遊戲變成f(tcdot t)=0

於是我們考慮一種無向圖B_n=(V,E),其中V={1,2,3,ldots n},E={(u,v)|(u>v)},希望0,f(B_1),f(B_2),ldots能表示出所有的組合遊戲。

sg(G)為滿足f(G)=f(B_{sg(G)})的整數。

這是可以的,考慮歸納法,記刪除S後,以S的直接後繼們分別為源點形成的拓撲圖集合為T,假設sg(G)=n,首先需要滿足,forall tin T,sg(t)
eq n,其次需要滿足forall m<n,exists tin T, sg(t)=m,也就意味著sg(G)=mex{{sg(t)|tin T}}

否則先手將B_n走到B_{sg(G)}的狀態時,我們就會無計可施。

很容易驗證sg(G)=mex{{sg(t)|tin T}}時,f(Gcdot B_{sg(G)})=0,這裡不再贅述。

下面說的話有點精神錯亂。

我們現在已經找到了線性基的超集,現在試圖去尋找我們所要的線性基。

顯然k個基可以組合出2^k種可能的遊戲,如果這2^k種可能的遊戲的sg值是[0,2^k)就好了。那麼如果如此,我們就可以取{0}cup {f(B_{2^k})}來做基了,那麼根據一個數的二進位表示,就可以得出所需要用的基。

於是令D_k=B_{2^k},我們的目的是證明這是一組線性基。

註:以下的二進位第k位均指二進位表示中從右向左數第k+1位。

先來考慮證明的目的,我們回到之前的線性空間,我們用一個二進位數來表示f(G),若f(G)=f(D_{i_1})oplus f(D_{i_2})oplus ldots oplus f(D_{i_k})i_1,i_2,ldots ,i_k互不相同),那麼f(G)=2^{i_1}+2^{i_2}+ldots 2^{i_k},不難驗證oplus就是按位異或運算。同時在證明了之前的結論後,用歸納可以證明,若x的二進位表示中第i位為1,則B_x分解為基的表示中必有D_i,由此顯然有sg(G)=f(G),於是&之所以是異或就是在mod 2下的線性基的加法啦&

回到證明,仍然考慮歸納。

假設0,f(D_0),ldots f(D_{k-1})可以線性表出任意f(B_x),0leqslant x<2^k,證明D_kcup{D_i|i<d}可以線性表出任意2^kleqslant x<2^k+2^d

現在已經可以推出sg(Xcdot Y)=sg(X)oplus sg(Y)(sg(X),sg(Y)<2^k),這是由於f(X)oplus f(Y)f(X)f(Y)都可以用D_k來表示的緣故。

那麼對於2^kleqslant x<2^k+2^d,我們將x的二進位表示寫下,並找到所需的基。

如果先手將B_x改變為B_y,那麼一定有一位從1變成了0,找到最高的這樣的位記為第p位。

若p=k,那麼將D_k改為B_{(x-2^k)oplus y}即可,以下變為0leqslant x<2^{q-1}的情形(第q位是y的最高位)。

否則將D_p改為B_{((x-2^p)mod 2^poplus y)},繼續做,顯然還是滿足2^kleqslant x<2^k+2^q(第q位是y-2^k的最高位)。

如果先手將D_p改變為B_y,若p=k,則規約到k-1的情形,否則將B_x改為B_z,其中z是當前線性基的異或和,繼續即可。

於是得證。

其實最後異或的正確性證明到處都是啦……隨便看一個別的正常的就好啦。

實在是證明不來OTZ,神志清醒的時候再改改吧……


謝邀

考慮一個有向圖

先手必勝:1;先手必敗:0

結束局面0

後繼狀態存在0,則當前狀態為1

後繼狀態不存在0,則當前狀態為0

考慮歸納法:

1. 最終狀態異或和為0

2. 對於任意一個必勝態(異或和不為0),存在一個必敗後繼狀態(異或和為0)

3. 對於任意一個必敗態(異或和為0),不存在一個必敗後繼狀態(異或和為0)


推薦閱讀:

為什麼會出現「年底催收賬款」這種現象?
辯論的過程是什麼的體現?口才還是學識?
如何對高微 mas collel(MWG) game theory 進行一個邏輯上的總結?
有哪些與博弈論相關的電影值得推薦?為什麼?

TAG:演算法 | 博弈論 | OI | ACM競賽 |