SG函式博弈函式

2021-08-29 02:47:36 字數 2635 閱讀 8734

必勝點和必敗點的概念:

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來分析,有沒有覺得問題變簡單了。

現在給你乙個稍微複雜一點點的: hdu 2147 kiki's game

現在我們就來介紹今天的主角吧。組合遊戲的和通常是很複雜的,但是有一種新工具,可以使組合問題變得簡單————sg函式和sg定理。

sprague-grundy定理(sg定理):

遊戲和的sg函式等於各個遊戲sg函式的nim和。這樣就可以將每乙個子遊戲分而治之,從而簡化了問題。而bouton定理就是sprague-grundy定理在nim遊戲中的直接應用,因為單堆的nim遊戲 sg函式滿足 sg(x) = x。不知道nim遊戲的請移步:這裡

sg函式:

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

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

【例項】取石子問題

有1堆n個的石子,每次只能取個石子,先取完石子者勝利,那麼各個數的sg值為多少?

sg[0]=0,f=,

x=1 時,可以取走1 - f個石子,剩餘個,所以 sg[1] = mex= mex = 1;

x=2 時,可以取走2 - f個石子,剩餘個,所以 sg[2] = mex= mex = 0;

x=3 時,可以取走3 - f個石子,剩餘個,所以 sg[3] = mex = mex =1;

x=4 時,可以取走4-  f個石子,剩餘個,所以 sg[4] = mex = mex = 2;

x=5 時,可以取走5 - f個石子,剩餘個,所以sg[5] = mex =mex = 3;

以此類推.....

x        0  1  2  3  4  5  6  7  8....

sg[x]    0  1  0  1  2  3  2  0  1....

由上述例項我們就可以得到sg函式值求解步驟,那麼計算1~n的sg函式值步驟如下:

1、使用 陣列f 將 可改變當前狀態 的方式記錄下來。

2、然後我們使用 另乙個陣列 將當前狀態x 的後繼狀態標記。

3、最後模擬mex運算,也就是我們在標記值中 搜尋 未被標記值 的最小值,將其賦值給sg(x)。

4、我們不斷的重複 2 - 3 的步驟,就完成了 計算1~n 的函式值。

**實現如下:

//f[n]:可改變當前狀態的方式,n為方式的種類,f[n]要在getsg之前先預處理

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

//s:為x後繼狀態的集合

int f[n],sg[maxn],s[maxn];

void getsg(int n)

}}

題目poj 2234 matches game

hoj 4388 stone game ii

poj 2975 nim

hoj 1367 a stone game

poj 2505 a multiplication game

zju 3057 beans game

poj 1067 取石子遊戲

poj 2484 a funny game

poj 2425 a chess game

poj 2960 s-nim

poj 1704 georgia and bob

poj 1740 a new stone game

poj 2068 nim

poj 3480 john

poj 2348 euclid's game

hoj 2645 wnim

poj 3710 christmas game

poj 3533 light switching game

博弈sg函式

sg函式 個人認為還是用於三種方法都無法解決的情況,如按特殊數字取石子 我們把整個博弈過程抽象為有向無環圖 1.幾項準備工作 mex求最小非負整數mex 0,mex 3,mex 0 sg x mex 就是石頭變少的繼 這樣sg就滿足幾個性質 1.sg x 0時,它的後繼都不為零 2.sg x 0時,...

博弈SG函式

題意 乙個棋盤有n行,每行20格仔,都有一些棋子,兩個人輪流進行這個操作 選擇某一行乙個棋子移動到該行右邊第乙個空的格仔。不能進行的人輸。問先手是否能贏。分析 sg函式的應用,當時自己做的時候沒做出來qaq。終結點是這一行沒有棋子可以走,即0,然後逆推出其他結點的sg函式。每一行的狀態看成是乙個結點...

sg函式 和 博弈

這幾天一直在看博弈,一直想寫部落格,但又一直沒寫,感覺自己沒有搞懂sg函式,幾種簡單的博弈似乎是看懂了。但是sg函式到現在我還是在用著,但是我有些疑惑並不懂。首先先貼一下幾個部落格,第一就是kuangbin菊苣的部落格了 這是他轉的 這是他的一些題目 這個上面的題我都刷了一遍,感覺是難度有點低 首先...