基本定理
一、必勝點與必敗點
- \(P\) 點:必敗點, 在雙方都無比聰明的情況下,當前先手的人必敗的情況。
- \(N\) 點:必勝點,在雙方操作都正確的情況下,先手必勝的位置。
幾個性質
- 所有終止位置都是必敗點。(可當做公理,即所有公式的推理都在這個性質成立的基礎上進行)。
- 從任意一個必勝點 \(N\) 出發,至少有一種方式到達一個必敗點 \(P\)。
- 從一個必敗點 \(P\) 出發,所有的移動都會到達必勝點 \(N\)。
二、無偏博弈
無偏博弈是一類任意局勢對於遊戲雙方都是平等的回合制雙人遊戲。這裏平等的意思是所有可行的走法僅僅依賴於當前的局勢,而與現在正要行動的是哪一方無關。換句話說,兩個遊戲者除了先後手之外毫無區別。此外還需要滿足以下性質:
- 完全信息,任意一個玩家都能夠知曉整個遊戲狀態。
- 無隨機行動,所有的行動都會轉移到一個唯一確定的狀態。
- 在有限步內遊戲會終止, 此時有位移的必勝者。
三、DAG中的博弈
給定一張有向無環圖,在起始定點有一枚棋子,兩個頂尖聰明的人交替移動這枚棋子,不能移動的人算輸
不要小看這個遊戲,事實上,所有無偏博弈問題都可以抽象爲這種遊戲(即把初始局面看做頂點,把從一個狀態可以到另一個狀態之間連邊)。
SG函數
- SG 函數:對於每一個狀態的一個尼姆數的函數
- Sprague−Grundy 定理:所有一般勝利下的無偏博弈(定義在上面)都能夠轉化成尼姆數表達的尼姆堆博弈,一個無偏博弈的尼姆值定義爲這個博弈的等價尼姆數。
首先來定義 mex 運算,這是一種集合中的運算,它表示最小不屬於這個集合中的自然數。
\(mex \{0. 1, 2, 3\} = 4\), \(mex \{2, 3 \} = 0\), \(mex \{\emptyset \} = 0\)
那麼我們有運算\(SG(x)=mex{SG(y),<x,y> \in E}\) (E 爲邊集)。即對於當前狀態 x 的 SG 函數,它的值定義爲所有的後繼狀態的 mex 值。
我們來看一下它的性質:
- 所有匯點的 SG 函數都爲 0。
這個性質比較顯然,因爲匯點沒有後繼狀態,因此那個集合爲空集,所以 SG 函數爲 0。
- 當 \(SG(x) = 0\) 時,該節點爲必敗點。
由 SG 函數的性質可知, x 的後繼狀態都非 0。滿足必敗點的定義。
- 當 \(SG(x) \not = 0\) 時, 該節點爲必勝點。
由 SG 函數的性質可知, x 的後繼狀態中只有一個必敗點, 滿足必勝點定義。
SG定理
遊戲和的 SG 函數等於各個遊戲 SG 函數的異或和。
翻譯成人話就是:對於一個遊戲 \(X\),可以拆分成 n 個小問題, \(x_1, x_2, \dots, x_n\),
那麼 \(SG(X) = SG(x_1) \oplus SG(x_2) \oplus \dots \oplus SG(x_n)\)。
至於證明的話...........不完全歸納法算不算。
Anti-SG遊戲 & SJ定理
基本問題
決策集合爲空者的操作者勝利。翻譯成 Nim 一點的問題就是,給定 n 堆式子,每次每個人可以從任意一堆石子中拿走不少於一個的石子,拿走最後一個石子的人輸。
解決方法
SJ 定理:對於一個 Anti−SG 遊戲,如果我們規定當前局面中所有單一遊戲的 SG 爲 0 時,遊戲結束,則先手必勝的條件爲:
- 遊戲的 SG 值不爲 0, 且存在一個單一遊戲的 SG 值大於 1。
- 遊戲的 SG 爲 0, 且不存在任意一個單一遊戲的 \(SG\) 值大於 1。
模板 & 代碼
Multi-SG遊戲
基本模型
決策集合爲空的操作者輸。一個單一遊戲的後繼可以是多個單一遊戲。換成 Nim 一點的說法就是,給你 n 堆石子,每次可以去任意多個,或者將一堆石子分成兩堆非空的石子,不能操作者輸, 讓你判定勝負。
解決辦法
還是可以使用 \(SG\) 函數來解決。舉個栗子,比如一堆 3 個石子,你可以一次取 0, 1, 2, 3 個或者將它分成 \((1, 2)\) 兩堆, 因此 $SG(3) = mex { SG(0), SG(1), SG(2), SG(3), SG((1, 2)) = SG(1) \oplus SG(2) } $
那麼這個問題本質上還是一個 Nim 遊戲, 可以直接用 SG 函數來解決。
同時,這樣每次拆分成兩堆的 Multi-SG 遊戲,打表找規律後發現這樣的性質。
模板 & 代碼
HDU 3032 Nim or not Nim
BZOJ 2940
小結
主要參考, yyb的博弈論總結 & attack 大爺的blog。