前幾天在網上學習了一下sg函式,稍微了解了大概,覺得自己動手理一下可以加深印象。
sg函式的使用似乎都和nim遊戲有關。
首先理清幾個概念:
p點:必敗點,處於此位置時,在雙方採取最佳策略時必敗。
n點:必勝點,處於此位置時,在雙發採取最佳策略時必勝。
p點與n點的性質:
1.所有終結點都是必敗點。(比如取石子時面對三堆石子的狀態是(0,0,0),則無法取物,敗。而(0,0,0)為終結點,由此可得此性質。)
2.從必勝點n可以一步到達必敗點p;(所有能一步走到p的就是n點)
3.p只能進入n點。(通過一步只能到達n的是p點。)
通常分析必勝點和必敗點都是以終結點逆序分析的。
下面介紹sg定理和sg函式:
sg定理:
各個遊戲sg函式的nim和 等於遊戲和的sg函式。(即如果當前狀態由幾個部分組成,則當前狀態的sg等於這幾個部分sg的異或值。和nim遊戲一樣,如果每堆有x個石子,則這一堆的sg為x,n堆的sg為每堆sg的異或。)這樣就可以將遊戲劃分為若干個子遊戲,然後對每乙個子遊戲分而治之,從而簡化問題。
而bouton定理(狀態(x1,x2,x3)為必敗狀態,當且僅當x1^x2^x3=0,即nim和為0)可以看做是sg定理在nim遊戲中的運用(練習:uvalive/la 5059+uva 10561+uva 12293)。
sg函式
首先定義mex(minimal excludant)運算,這是施加於乙個集合的運算,表示不屬於該集合的最小非負整數。如:mex=3,mex=0,mex{}=0。
對於任意狀態x,定義sg(x)=mex(s),其中s是x後繼狀態的sg函式的集合。比如x有3個後繼狀態:sg(a)、sg(b)、sg(c),則sg(x)=mex。若x為終態,則x的後繼狀態為空集,所以sg(x)=mex{}=0。即集合s的終態為空集,所以x為必敗點p 當且僅當 sg函式的終態為sg(x)=0。
(因為x為必敗點,所以當到達終態時,x的後繼為空集,即在選擇之前已經取光,無法進行任何選擇,所以sg(x)=0)
(乙個狀態是必敗態當且僅當它所有後繼都是必勝態;乙個狀態是必勝態當且僅當至少有乙個後繼是必敗態。)
來個網上的例子加深下對後繼狀態的了解。
【例項】取石子問題
有1堆n個石子,每次只能取個,先取完者勝,則各個狀態的sg值為多少?
首先知道當狀態x=0時,無法選取石子,沒有後繼狀態,所以sg[0]=mex{}=0,可以取的狀態為f=。
當前有1個石子(即面對狀態x=1),只能取走1個石子,所以剩餘個,sg[1]=mex=mex=1。
(0即為1的後繼狀態。)
當前有2個石子(即面對狀態x=2),只能取走1個石子,所以剩餘個,sg[2]=mex=mex=0。(1為2的後繼狀態。)
當前有3個石子(即面對狀態x=3),可以取走1,3個石子,所以剩餘個,sg[3]=mex=mex=1。
當前有4個石子(即面對狀態x=4),可以取走1,3,4個石子,所以剩餘個,sg[4]=mex=mex=2;
當前有5個石子(即面對狀態x=5),可以取走1,3,4個石子,所以剩餘個,sg[5]=mex=mex=3;
以此類推……
可以得到: x
0123
4567
8sg[x]01
0123
201 由上述例項可以得到sg函式求解步驟:
1.使用陣列f將可改變當前狀態的方式記錄下來。(如上述中每次只能取個石子,則f=。)
2.使用另乙個陣列標記當前狀態x的後續狀態。
3.最後模擬mex運算,即搜尋未被標記的最小非負值,將其複製給sg[x]。
4.不斷重複2-3步,至完成1-n的sg函式值。
網上還給了一道實戰演練:hdu-1848。(鏈結)
還有一些組合博弈的題目,先列下來,慢慢刷。
poj 2234 matches game
hoj 4388 stone game ii
poj 2975 nim
hoj 1367 a stone game
poj 2505 a multiplication game
zju 3057 beans game
poj 1067 取石子遊戲
poj 2484 a funny game
poj 2425 a chess game
poj 2960 s-nim
poj 1704 georgia and bob
poj 1740 a new stone game
poj 2068 nim
poj 3480 john
poj 2348 euclid's game
hoj 2645 wnim
poj 3710 christmas game
poj 3533 light switching game
主要參考部落格:
博弈sg函式
sg函式 個人認為還是用於三種方法都無法解決的情況,如按特殊數字取石子 我們把整個博弈過程抽象為有向無環圖 1.幾項準備工作 mex求最小非負整數mex 0,mex 3,mex 0 sg x mex 就是石頭變少的繼 這樣sg就滿足幾個性質 1.sg x 0時,它的後繼都不為零 2.sg x 0時,...
博弈SG函式
題意 乙個棋盤有n行,每行20格仔,都有一些棋子,兩個人輪流進行這個操作 選擇某一行乙個棋子移動到該行右邊第乙個空的格仔。不能進行的人輸。問先手是否能贏。分析 sg函式的應用,當時自己做的時候沒做出來qaq。終結點是這一行沒有棋子可以走,即0,然後逆推出其他結點的sg函式。每一行的狀態看成是乙個結點...
SG函式博弈函式
必勝點和必敗點的概念 p點 必敗點,換而言之,就是誰處於此位置,則在雙方操作正確的情況下必敗。n點 必勝點,處於此情況下,雙方操作均正確的情況下必勝。必勝點和必敗點的性質 1 所有終結點是 必敗點 p 我們以此為基本前提進行推理,換句話說,我們以此為假設 2 從任何必勝點n 操作,至少有一種方式可以...