博弈論中的SG函式

2021-06-22 22:00:45 字數 1029 閱讀 2995

sg函式的定義:

g(x) = mex ( sg(y) |y是x的後繼結點 )

其中mex(x)(x是乙個自然是集合)函式是x關於自然數集合的補集中的最小值,比如x= 則mex(x)=3;

什麼是後繼結點?

所謂後繼結點就是當前結點經過乙個操作可以變成的狀態。比如對於娶4石子遊戲,假如每次可以取的數目是1,2,4,當前的石子數目也就是當前狀態是5,那麼5的後繼結點就是=;

如果5的三個後繼結點的sg函式值分別為0,1,3,那麼5的sg值就是集合的補集的最小元素,也就是2。

關於整個遊戲的sg值之和sum,定義sum=sg1 ^ sg2 ^ sg3 ^ ……sgn.  其中^表示按位異或運算。

結論:乙個遊戲的初始局面是必敗態當且僅當sum=0。

一篇非常好的關於sg值的**:

sg值打表模板:

//f:可以取走的石子個數

//sg:0~n的sg函式值

//hash:mex{}

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

void getsg(int n)

中未出現的最小的非負整數}}

}

hdu1848  

題意:取石子問題,

一共有3堆石子

,每次只能取斐波那契數個石子,先取完石子者勝利,問先手勝還是後手勝

可選步數為一系列不連續的數,用getsg(計算)

最終結果是所有sg值異或的結果

#include#include#includeusing namespace std;

const int maxn=1001;

//f 可以取走的石子數

//sg 0~n的sg函式值

//hash mex{}

int f[maxn],sg[maxn],hash[maxn];

void getsg(int n)}}

}int main()

return 0;

}

博弈論 (SG函式)

首先定義mex minimal excludant 運算,這是施加於乙個集合的運算,表示最小的不屬於這個集合的非負整數。例如mex 3 mex 0 mex 0。對於乙個給定的有向無環圖,定義關於圖的每個頂點的sprague grundy函式g如下 g x mex,這裡的g x 即sg x 例如 取石...

博弈論SG函式

有n堆石子,每次可以從第1堆石子裡取1顆 2顆或3顆,可以從第2堆石子裡取奇數顆,可以從第3堆及以後石子裡取任意顆 這時看上去問題複雜了很多,但相信你如果掌握了本節的內容,類似的千變萬化的問題都是不成問題的。現在我們來研究乙個看上去似乎更為一般的遊戲 給定乙個有向無環圖和乙個起始頂點上的一枚棋子,兩...

博弈論 SG函式

學習博弈論不得不提一哈sg函式 關於sg函式的一些概念就不多說了 說下我自己的理解sg函式記錄為0的是p狀態 不為0記錄的是n狀態 相當於有個週期再迴圈 p n狀態輪番出現 sg模板 include include include define maxn 1000 using namespace s...