SG函式和SG定理

2021-08-14 20:20:54 字數 3649 閱讀 1386

大神鏈

我們先用乙個簡單的例子引入:

考慮有這樣乙個遊戲,有3堆火柴,分別有a,b,c根,記為(a,b,c)

每次乙個遊戲者可以從任意一堆中拿走至少一根火柴,也可以整堆拿走,但是不能從多堆火柴中拿

無法拿火柴的人輸

這個遊戲就叫做nim遊戲

舉個例子,假設a=1,b=2,c=3,若你先拿,你會怎麼辦呢?

方案一:(1,2,3)—->(0,2,3),然而只要對手把狀態變成(0,2,2),你就輸定了(因為對手可以模仿你的操作)

方案二:(1,2,3)—->(1,0,3)或者(1,2,3)—->(1,2,0),這樣的狀態和方案一是一樣的

方案三:(1,2,3)—->(1,2,2)或者(1,2,3)—->(1,2,1)或者(1,2,3)—->(1,2,0),這樣的狀態下,你還是會輸

至此,我們討論了所有6種可能的拿法,都是你輸

所以我們說(1,2,3)是乙個先手必敗狀態,簡稱必敗狀態

而(1,2,3)的所有後繼狀態都是先手必勝狀態

這裡我們提出兩個規則:

規則一

乙個狀態是必敗態當且僅當ta的所有後繼都是必勝狀態

規則二

乙個狀態是必勝態當且僅當ta至少有乙個後繼是必敗狀態

下面我們介紹一些經典遊戲:ch

omp!

遊戲有乙個m∗n

的棋盤,每次可以取走乙個方格並拿掉ta右邊和上面的所有方格

拿到左下角的格仔(1,1)者輸

分析:本題的結論有一點偏激:除了(1,1)是先手必敗之外,其他情況都是先手必勝

我們可以用反證法:如果後手有必勝狀態,使得無論先手取哪個格仔,後手都可以獲得勝利

那麼現在假設先手取得最右上角的石子(m,n),接下來通過某種取法使得自己搶先進入必勝狀態

但實際上,先手第一次就可以取得和後手一樣的狀態,搶先進入必勝狀態

約數遊戲

有1到n個數字,兩個人輪流選擇乙個數,並且把ta和ta的所有約數刪去

擦去最後乙個數的人贏

分析:這道題和ch

omp!

遊戲有異曲同工之妙

假如先手第一次取了1,接下來後手通過某種取法使得自己搶先進入必勝狀態

實際上,先手第一次就可以取得和後手一樣的狀態,搶先進入必勝狀態

現在我們回到一開始的ni

m 遊戲 l.

bout

on在1902

年提出了這樣乙個定理: 狀態(

x1,x

2,x3

) 是必敗態,當且僅當x1

xorx

2xor

x3=0

,這個異或和就叫做遊戲的ni

m 和

我們要想辦法這條定理擴充套件到所有的博弈問題上

下面我們就介紹乙個很好的工具:sg函式和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(

sg(a

),sg

(b),

sg(c

)) s

g 函式的終態為sg

(x)=

0 ,當且僅當

x 為必敗點時

遊戲和的sg

函式等於各個遊戲sg

函式的ni

m 和

這樣就可以將每乙個子遊戲分而治之,從而簡化了問題 而b

outo

n 定理就是sp

ragu

e−gr

undy

定理在ni

m 遊戲中的直接應用,因為單堆的ni

m 遊戲sg

函式滿足 sg

(x)=

x 我們可以通過乙個例題來理解一下:

翻棋子遊戲

乙個棋盤上每個格仔有乙個棋子,每次操作可以隨便選擇乙個朝上的棋子(x

,y) ,

選擇乙個形如(x

,b) 或(a

,y) (其中

ba<

x ),把兩個棋子一起翻過來,無法操作的人輸

分析:把座標為(x,y)的棋子看做大小分別為

x 和

y的兩堆火柴,則本題轉化為了經典的ni

m 遊戲

除法遊戲乙個n

∗m的矩陣,每個元素均為2~10000之間的正整數

兩個遊戲者輪流操作,每次可以選一行中的1個或多個大於1的整數,把ta們中的每個數都變成ta的某個真因子

比如12可以變成1,2,3,4,6中的乙個

不能操作的輸(換句話說,如果在誰操作之前,在矩陣中的所有數都是1,則ta輸)

分析:考慮把每個數素因數分解

比如說12=2

∗3∗3

,那麼「變成他的素因數」就等價於拿掉ta的乙個或多個素因子

如果我們把每個數的乙個素因子看成一塊石子,每個數看成一堆石子

則本題和ni

m 遊戲就完全等價了

取石子問題

有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       012

3456

78....sg[x] 010

1232

01....

由此我們就可以得到sg函式值求解步驟

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

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

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

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

void getsg(int n)

}}

sg函式和sg定理

下面這篇解釋得很清楚。單個遊戲 sg 0 0 sg值為0的有且只有必敗態 sg x mex sg y x的所有後繼狀態中 第乙個不能達到的sg值,則x可到達sg為0 sg x 1的狀態 組合遊戲 可將sg值看作為石子數,則轉化為nim取石子遊戲,總遊戲的勝負由sg的異或和決定。hdu1848 1 i...

博弈 SG函式和SG定理

在介紹sg函式和sg定理之前我們先介紹介紹必勝點與必敗點吧.必勝點和必敗點的概念 p點 必敗點,換而言之,就是誰處於此位置,則在雙方操作正確的情況下必敗。n點 必勝點,處於此情況下,雙方操作均正確的情況下必勝。必勝點和必敗點的性質 1 所有終結點是 必敗點 p 我們以此為基本前提進行推理,換句話說,...

SG函式和SG定理 詳解

在介紹sg函式和sg定理之前我們先介紹介紹必勝點與必敗點吧.必勝點和必敗點的概念 p點 必敗點,換而言之,就是誰處於此位置,則在雙方操作正確的情況下必敗。n點 必勝點,處於此情況下,雙方操作均正確的情況下必勝。必勝點和必敗點的性質 1 所有終結點是 必敗點 p 我們以此為基本前提進行推理,換句話說,...