從nim遊戲到sg函式博弈論類問題高階之路

2021-07-22 16:20:55 字數 1731 閱讀 9800

把多校賽之間的文章補一下。

先從sg函式開始吧。

本文打算結合之前已有的文章,將博弈論從nim遊戲到sg函式分析,大概系統的學完並會應用要兩天吧,如果完全沒接觸過的話。還有本文會重點從平衡狀態分析。

鄙人才疏學淺肯定講不清。可以看看例題。詳細的理論可以看下面的鏈結的文章:

在這就不複雜的介紹了。

但還是重點介紹一下這兩個狀態。

p-position和n-position

其中p 代表previous,n 代表next。 p-position是必敗態,n-position是必勝態。

必敗(必勝)點屬性

(1) 所有終結點是必敗點(p點); //容易理解

(2) 從任何必勝點(n點)操作,至少有一種方法可以進入必敗點(p點); //就是那種我們要走的方法

(3)無論如何操作, 從必敗點(p點)都只能進入必勝點(n點). //對手走完又只能把n留給我們

取子遊戲演算法實現

步驟1:將所有終結位置標記為必敗點(p點);

步驟2: 將所有一步操作能進入必敗點(p點)的位置標記為必勝點(n點)

步驟3:如果從某個點開始的所有一步操作都只能進入必勝點(n點) ,則將該點標記為必敗點(p點) ;

步驟4: 如果在步驟3未能找到新的必敗(p點),則演算法終止;否則,返回到步驟2

例題

kiki』s game

另終點為p狀態,則可畫出此圖:

nim遊戲

簡單的講就是從一堆或幾堆石子中每次選擇一堆,可以從這一堆中取出任意個數,不能不取。直到有人不能取為止。

結合上面的知識,假設現在只有兩堆石子,那麼:(0,0)—p, (n,0)—n, (n,m)—n, (n,n)—p.

也就是當兩堆石子數相同是為p點,那麼只要是對方始終在p點取子就行了,因為p只能進入n點,而n點必能進入p點。所以這就完成了一輪博弈。

但如果是三堆石子,就不適用了。

在這介紹另乙個重點^(異或xor)運算:

5(101)^11(1011)=12(1110)

12(1110)^5(101)=11(1011)

正如兩式所示,異或的逆運算正是異或。只要將兩值經過操作變得相等就能使異或值變為0。使異或為零就能達到平衡。

例題

being a good boy in spring festival

這道題對理解異或後的值與平衡的建立有幫助。異或知道總異或值s後再分別對每個值a[i]異或找到可通過操作使值s降到0的就加1。

sg函式

如果結合p/n問題可以將石子的數目轉換為乙個狀態值,就是sg值特點是每個sg值都一定可以到達比它小的值,而且一般可以理解為最大連續可到達p點的步數+1。

現在我們已經知道如何將符合數值大小的問題了,如果sg值與大小無關,我們可以通過該點的後繼方法來判斷。

例題

s-nim

最簡單的sg應用。乙個值的sg值可以通過它能到達的值來獲得。

chess

推我入坑的題,先狀態壓縮用1/0表示棋盤的情況,選出乙個空位在讓能移動到該值的棋子移動,統計出sg值。因為數是從小到大增加的可以保證它的後繼是以賦值的。

博弈論 Nim遊戲與SG函式

普通nim遊戲 有若干堆石子,兩人輪流從中取石子,取走最後乙個石子的人為勝利者 我們判斷先手必勝還是先手必敗就要判斷先手面對的局面是必勝態還是必敗態 並且普通nim遊戲滿足以下性質 1.無法移動的狀態是必敗態 2.可以移動到必敗態的局面一定是非必敗態 3.在必敗態做所有操作的結果都是非必敗態 這些性...

博弈論 Nim博弈 反Nim博弈 SG函式

nim遊戲 hdu1846 若各堆石子異或和為不為零,則先手勝 後手當且僅當異或和為零時取勝 此題問要想先手取勝第一步的取法,考慮到上述引理,只需遍歷一遍石子找到異或和的最高位匹配的個數。int a 105 int main return0 view code hdu 1848 在上題的基礎上取法只...

博弈論之NIM遊戲與SG函式

恩,本文會簡要介紹一下nim取石子遊戲與sg函式,並附上一些有趣的例題。首先,讓我們來看一看最簡單的取石子遊戲。遊戲1 規則 有x個石子,兩人輪流取,最多取y個,不能不取,沒得取的人輸,兩個人都按照最優策略進行遊戲,問先手必勝的充要條件。答案 x mod y 1 0 恩,剛才那個遊戲很簡單,下面讓我...