【数学】博弈论

PN状态:

面临P为必败态,面临N为必胜态

当可以走到P状态时,该点为N状态

当无论怎么走都只能走到N状态时,该点为P状态

SG函数:

定义mex(minimal excludant)运算:施加于集合,表示最小的不属于这个集合的非负整数

对于一个给定的有向无环图,定义关于图的每个顶点的Sprague-Garundy函数g如下:
g(x) = mex { g(y)  |  y是x的后继 }

定义有向图游戏的和(Sum of Graph Games):设G1、G2、……、Gn是n个有向图游戏,G是G1、G2、……、Gn的和(Sum),游戏G的移动规则是:任选一个子游戏Gi并移动上面的棋子。则
g(G) = g(G1) ^ g(G2) ^ … ^ g(Gn)

三种经典博弈:

1、
巴什博奕:有一堆n个石子,两个人轮流取,每次至少取一个、至多取m 个,最后取光者胜

规律:n%(m+1)==0 时后手胜,否则先手胜

2、
威佐夫博奕:有两堆各若干个物品,两个人轮流从某一堆或同时从两堆中取同样多的物品,每次至少取一个,多者不限,最后取光者胜

用(ak,bk)(ak ≤ bk ,k=0,1,2,…,n)表示两堆物品的数量并称其为局势,如果甲面对(0,0),那么甲已经输了,这种局势我们称为奇异局势

面对非奇异局势,先拿者必胜;否则后拿者取胜

前几个奇异局势是:(0,0)(1,2)(3,5)(4,7)(6,10)(8,13)(9,15)(11,18)(12,20)

规律一:a0 = b0 = 0,ak是未在前面出现过的最小自然数,bk = ak + k

规律二:ak = [k(1+√5)/2],bk = ak + k ( k = 0,1,2,…,n  方括号表示取整函数 )

奇异局势的性质:

(1)任何自然数都包含在一个且仅有一个奇异局势中

(2)任意操作都可将奇异局势变为非奇异局势

(3)采用适当的方法,可以将非奇异局势变为奇异局势

判断状态是否为奇异状态:

bool SP_judge(int x,int y){ //x,y为当前状态,返回是否为奇异状态
    if(x > y) swap(x,y);
    if(x == (int)((y - x)*(1 + sqrt(5.0))/2))
        return true;
    else return false;
}

3、
尼姆博弈:有三堆各若干个物品,两个人轮流从某一堆取任意多的物品,每次至少取一个,多者不限,最后取光者胜

规律:对任何奇异局势(a,b,c)都有 a ^ b ^ c  = 0

将非奇异局势(a,b,c)变为奇异局势:假设 a<b<c,只需将 c 变为 a ^ b,即从c中减去 c -(a ^ b)

尼姆博弈可以推广到 n 堆物品的情形

点赞