博弈論之SG函式
參考自《演算法競賽進階指南》
\(NIM\)博弈:
\(n\)堆物品,第\(i\)堆物品有\(A_i\)個。兩名玩家輪流行動,每次可以任選一堆,取走任意多個物品,可把一堆取光,但不能不取。取走最後一件物品的人獲勝。假設兩人每一步都必然採取最優的策略。問先手是否必勝。
定理:
若先手必贏,那麼當且僅當滿足:\(A_1 \,\, xor \,\, A_2 \,\, xor \,\, A_3 \,\, ... \,\, xor \,\, A_n != 0\)
兩個概念:
必敗局面:若某一局面無論採取什麼行動,都會輸掉遊戲,則稱該局面必敗。
必勝局面:若在某一局面下采取某種行動後可以使對手面對必敗局面,那麼優先採取此行動,那麼這種局面叫必勝局面。
證明:
- 如果所有物品被取光,那麼即\(A_i = 0\),那麼這是一個必敗局面,則滿足:\(A_1 \,\, xor \,\, A_2 \,\, xor \,\, A_3 \,\, ... \,\, xor \,\, A_n == 0\)
- 對於任意一個\(A_1 \,\, xor \,\, A_2 \,\, xor \,\, A_3 \,\, ... \,\, xor \,\, A_n = x != 0\)局面,那麼我們應該證明它一定可以採取一定行動來出現\(x = 0\)的局面。
- 設\(x\)的二進位制表示下最高位的\(1\)在第\(k\)位,那麼至少存在一堆石子\(A_i\),它的第\(k\)
- 對於任意一個\(A_1 \,\, xor \,\, A_2 \,\, xor \,\, A_3 \,\, ... \,\, xor \,\, A_n = x == 0\)局面,那麼我們應該證明無論採取什麼行動都不可能出現出現\(x = 0\)的局面。
- 用反證法證明:假設\(A_i\)
Mex運算
設\(S\)表示一個非負整數集合。定義\(mex(S)\)為求出不屬於集合S得最小非負整數的運算,即:
\[mex(S) \,\, = \min\limits_{x \in N, x \notin S}\{x\} \]SG函式
有向圖中,對於每個節點\(x\),設從\(x\)出發共有\(k\)條有向邊,分別到達節點\(y_1, y_2, ..., y_k\),定義\(SG(x)\)為\(x\)的後繼節點\(y_1, y_2, ..., y_k\)的\(SG\)函式值構成的集合,再執行\(mex\)運算,即:
\[SG(x) = mex({SG(y_1), SG(y_2), ... ,SG(y_k)}) \]整個有向圖的\(SG\)函式就是圖的起點的\(SG\),\(SG(G) = SG(s)\)
那麼多個有向圖的遊戲中,行動規則是任選一個有向圖\(G_i\),並在\(G_i\)中行動一步,那麼類比於\(NIM\)遊戲,如果滿足:
\[SG(G) \,\, = \,\, SG(G1) \,\, xor \,\, SG(G2) \,\, xor \,\, ... \,\, SG(G_m) == 0 \]那麼此時是必勝局面,證明方法與\(NIM\)博弈類似
否則必敗局面。
理解:
在一個沒有出邊的節點上,不能進行任何操作,那麼它的\(SG = 0\),此時就是必敗局面。
對於一個節點的某一個後繼節點\(SG = 0\)的情況,在\(mex\)運算後,該節點\(SG > 0\),那麼等價於當前局面是必勝局面,因為後繼介面是必敗介面。
對於一個節點的後繼節點\(SG\)均不為\(0\),在\(mex\)運算後,該節點\(SG\)值為\(0\),那麼當前就是一個必敗介面。
理論部分結束!
後邊新學知識我再補上。