1. 程式人生 > 其它 >演算法學習————SG函式和SG定理

演算法學習————SG函式和SG定理

其實我自己也不是很明白吧

SG函式應用的場景

組合遊戲

在競賽中,組合遊戲的題目一般有以下特點

  1. 題目描述一般為A,B,2人做遊戲

  2. A,B交替進行某種遊戲規定的操作,每操作一次,選手可以在有限的操作(操作必須合法)集合中任選一種。

  3. 對於遊戲的任何一種可能的局面,合法的操作集合只取決於這個局面本身,不取決於其它因素(跟選手,以前的所有操作無關)

  4. 如果當前選手無法進行合法的操作,則為負

必勝點和必敗點的概念

必敗點(P點) 前一個(previous player)選手將取勝的點稱為必敗點

必勝點(N點) 下一個(next player)選手將取勝的點稱為必勝點

SG函式

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

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

雖然我也不知道為什麼要這麼求,但是數學就是這麼神奇呀

SG定理

遊戲和的SG函式等於各子游戲的SG函式的Nim和。

公式說明:\(SG(x_1,x_2,x_3\dots x_n) = SG(x_1)\bigoplus SG(x_2)\dots\bigoplus SG(x_n)\)

應用

具體怎麼應用呢?我可以遞迴求出一部分情況的SG值,然後瞪眼發現規律

例題:[SDOI2009]E&D

`