关于SG函数的一些浅显的感性理解

有向图博弈。给定一个有向图,一个起点,起点上有一个棋子,两个玩家轮流推动棋子,谁不能推了谁就输了。希望知道某个点为起始是必胜还是必败。

注:这两个人都十分聪明,可以看透未来(?)。

一点分析:

1.显然这要是个DAG,不然游戏就不能结束了。。(废话)  而且两个人要在同一张图上操作,轮流进行。。(即所谓的公平游戏)

2.这两个人都很聪明是什么意思呢。。就是说对这两个人而言,这个游戏相当于是给每个点标上属性必胜/必败,然后把整幅图放在他们面前,为了获胜,他们只要无脑走必胜状态就可以了。

2.1如果走到某个点,后继有一个先手必败,这个点就必胜。发现对手的破绽啦,果断往那里冲

2.2如果走到某个点,没有后继或者后继全都是先手必胜,这个点就是必败。敌军太强了,我已走投无路

2.3A的必胜就是B的必败。

3.上面的描述看起来很有道理,然而实际并没有什么用。我们希望把必胜必败转到函数里面,这样就可以套到各种情况里了。

来看一看这个函数的要求。

3.1设函数值的全集为U,先手必胜状态的函数值集合为S1,先手必败状态的函数值集合为S2,则S1|S2=U,S1&S2={};

3.2设当前函数值为y。当后继有至少一个属于S2时,y属于S1;否则y属于S2。

引入mex函数,U为自然数集合,S2={0},完美地满足了条件。

3.3mex的特殊性质:如果SG(x)=y,则一定存在SG(x的后继)=0~y-1。

3.1和3.2是解决单个游戏的关键,3.3是组合多个游戏的关键。

看起来问题解决了?当然没有了。

如果起点和棋子有多个怎么办?

1.如果一个起点有多枚棋子,可以拆分成多个起点,又回到了每个起点一枚棋子的情况。

2.每个起点一枚棋子,有多个起点。每个起点的SG都可以算好了,然后异或起来,=0就是必败,否则必胜。

(异或消掉了相同的部分,而由于3.3,相同的部分也确实是可以通过你走一步我走一步来抵消的)

于是,一个大游戏可以被拆分成若干简单的小游戏。

很经典的NIM游戏,放到这里是适用的。

这样的游戏看起来十分优美,原因在于游戏的结局只有必胜和必败两种情况,可以说是固定的,通过预知所有转移就可以计算。

orz看穿未来却要面对面玩一场注定了结局的游戏的无聊先知A和B

orz人类的神奇娱乐

猜你喜欢

转载自blog.csdn.net/shiveringkonnyaku/article/details/82762360
今日推荐