1. 程式人生 > >SG函式和SG定理(Sprague_Grundy)

SG函式和SG定理(Sprague_Grundy)

 

一、必勝點和必敗點的概念


       P點:必敗點,換而言之,就是誰處於此位置,則在雙方操作正確的情況下必敗。
       N點:必勝點,處於此情況下,雙方操作均正確的情況下必勝。
必勝點和必敗點的性質:
        1、所有終結點是 必敗點 P 。(我們以此為基本前提進行推理,換句話說,我們以此為假設)
        2、從任何必勝點N 操作,至少有一種方式可以進入必敗點 P。
        3、無論如何操作,必敗點P 都只能進入 必勝點 N。
我們研究必勝點和必敗點的目的時間為題進行簡化,有助於我們的分析。通常我們分析必勝點和必敗點都是以終結點進行逆序分析。我們以

hdu 1847 Good Luck in CET-4 Everybody!為例:
當 n = 0 時,顯然為必敗點,因為此時你已經無法進行操作了
當 n = 1 時,因為你一次就可以拿完所有牌,故此時為必勝點
當 n = 2 時,也是一次就可以拿完,故此時為必勝點
當 n = 3 時,要麼就是剩一張要麼剩兩張,無論怎麼取對方都將面對必勝點,故這一點為必敗點。
以此類推,最後你就可以得到;
      n    :   0    1    2    3    4   5    6 ...
position:  P    N   N    P   N   N   P ...
你發現了什麼沒有,對,他們就是成有規律,使用了 P/N來分析,有沒有覺得問題變簡單了。

二、Sprague-Grundy定理(SG定理)

        遊戲和的SG函式等於各個遊戲SG函式的Nim和。這樣就可以將每一個子遊戲分而治之,從而簡化了問題。而Bouton定理就是Sprague-Grundy定理在Nim遊戲中的直接應用,因為單堆的Nim遊戲 SG函式滿足 SG(x) = x。

(NIM遊戲:https://blog.csdn.net/luomingjun12315/article/details/45479073

三、Sprague-Grundy函式(SG函式)

        首先定義mex(minimal excludant)運算,這是施加於一個集合的運算,表示最小的不屬於這個集合的非負整數。例如mex{0,1,2,4}=3、mex{2,3,5}=0、mex{}=0。

        對於任意狀態 x , 定義 SG(x) = mex(S),其中 S 是 x 後繼狀態的SG函式值的集合。如 x 有三個後繼狀態分別為 SG(a),SG(b),SG(c),那麼SG(x) = mex{SG(a),SG(b),SG(c)}。 這樣 集合S 的終態必然是空集,所以SG函式的終態為 SG(x) = 0,當且僅當 x 為必敗點P時。

四、例題

http://poj.org/problem?id=2975

http://poj.org/problem?id=2960

https://ac.nowcoder.com/acm/contest/338/I

五、參考文章

https://blog.csdn.net/luomingjun12315/article/details/45555495

https://www.cnblogs.com/ECJTUACM-873284962/p/6921829.html

https://blog.csdn.net/kamisama123/article/details/77649118