再談SG函式和SG定理

2021-08-07 11:56:28 字數 1461 閱讀 8311

今天考了一道博弈論的題,讓我重新複習一下sg定理吧。

首先通常的nim遊戲的定義是這樣的:有若干堆石子,每堆石子的數量都是有限的,合法的移動是「選擇一堆石子並拿走若干顆(不能不拿)」,如果輪到某個人時所有的石子堆都已經被拿空了,則判負(因為他此刻沒有任何合法的移動)。

我們知道對於最普通最一般的nim取石子來說,所有石子個數異或起來如果為0,那麼先手必敗,如果不為0那麼先手必勝。

具體證明如下:

1、最後的遊戲狀態必然是所有石子個數為0,也可以看成所有石子異或為0。

2、假如現在所有石子異或起來為j,我們用ai表示第i堆石子個數,總共n堆。那麼就有a1^a2^a3……^an=j,我們把j二進位制表示,則a中必有乙個數最高位與j的最高位同為1(位數一樣),不然j的那個1是哪來的?然後我們令這個數是am,所以am^j必然小於am,顯然最高位被消掉變小了。我們可以取石子把am變成am^j,那麼對於原式就是a1^a2^……^an^j=j^j=0;

3、如果異或起來為0,那麼如果任意拿掉石子,新的異或一定不為0,這個證明十分簡單,留給讀者解決。(偷懶~)

所以當異或不為0的時候,都可以通過操作讓它變成0,所以顯然就有了上面那個結論。

那麼現在我們上重頭。

對於乙個大的遊戲,我們把它看成是多個小的遊戲,比如這個取石子,我們把它看成是n個小的遊戲。

現在我們單獨考慮乙個遊戲,也就是一堆石子如何解決。

我們規定乙個對於集合的操作mex,表示最小的不屬於該集合的非負整數。

舉幾個栗子:mex=3,mex=0,mex=2;

我們再定義sg函式:sg(x)=mex。

什麼叫y是x的後繼?我們用普通的nim遊戲舉個栗子。假如有一堆石子個數為x,普通的nim遊戲可以取任意個,但不能乙個不取,所以x的後繼就是0~x-1,所以y取值0~x-1。

有乙個結論就是普通的取石子sg(x)=x。

我們考慮sg函式的性質,我們把遊戲看成乙個圖,那麼其實就是乙個點在這張圖上面跑,當這個點走到0的時候它就走不動了。sg值為0時,表示當前點為必敗點,因為它下面的sg值都大於0。sg值大於0,當前點是必勝點,因為它可以走到乙個點的sg值為0。

所以得到結論sg值為0就是必敗,sg大於0就是必勝。

我們已經考慮完了單個遊戲,那麼我們考慮把遊戲合起來考慮。

合起來的遊戲其實相當於n個點同時在這張圖上面跑。

這裡還有乙個sg函式的性質,如果sg(x)=y,那麼它可以走到的後繼的sg值有0-y-1,參考它的定義。這裡是不是有點熟悉?這不就相當於最普通的nim取石子嗎?可以取任意個,但不能乙個不取。我們把sg值看成石子個數,那麼整個遊戲的sg值就是子遊戲的sg值異或的和。

至此我們可以得到對於這類題,普遍的解法了。先打出sg函式找規律然後異或就完了。

給出乙個找sg函式的模板:(其實就是模擬sg函式的定義)

int f[n],sg[n],s[n];  

void getsg(int n)

} }

SG函式和SG定理

大神鏈 我們先用乙個簡單的例子引入 考慮有這樣乙個遊戲,有3堆火柴,分別有a,b,c根,記為 a,b,c 每次乙個遊戲者可以從任意一堆中拿走至少一根火柴,也可以整堆拿走,但是不能從多堆火柴中拿 無法拿火柴的人輸 這個遊戲就叫做nim遊戲 舉個例子,假設a 1,b 2,c 3,若你先拿,你會怎麼辦呢?...

sg函式和sg定理

下面這篇解釋得很清楚。單個遊戲 sg 0 0 sg值為0的有且只有必敗態 sg x mex sg y x的所有後繼狀態中 第乙個不能達到的sg值,則x可到達sg為0 sg x 1的狀態 組合遊戲 可將sg值看作為石子數,則轉化為nim取石子遊戲,總遊戲的勝負由sg的異或和決定。hdu1848 1 i...

博弈 SG函式和SG定理

在介紹sg函式和sg定理之前我們先介紹介紹必勝點與必敗點吧.必勝點和必敗點的概念 p點 必敗點,換而言之,就是誰處於此位置,則在雙方操作正確的情況下必敗。n點 必勝點,處於此情況下,雙方操作均正確的情況下必勝。必勝點和必敗點的性質 1 所有終結點是 必敗點 p 我們以此為基本前提進行推理,換句話說,...