博弈论

定义

  • 必胜或必胜状态:仅仅考虑当前的状态,不考虑的操作人时,一定必胜或必输

  • aba,b 在二进制下,对位取反。

  • SG(i)=mex{SG(j)ijSG(j)ij

    其中 ij 表示 i 有一条边指向 jmex 指一个数列第一个未出现的非负数

Nim 游戏

考虑有 n 堆石子,两个人轮流来拿走棋子(至少拿一个),拿到最后剩下的一颗棋子的人获胜。

结论

定义 Nim 和 =a1a2a3an

当 Nim 和 为 0 时,该状态为必败状态;反之,则为必胜状态。

证明:

我们需要三个引理:

  1. 无后继状态为必败状态

    这个情况只有全 0,同时满足 a1a2an=0

  2. 对于当前状态 a1a2an0,一定存在某种移动使得其异或和为 0

    考虑来构造一下:

    a1a2an=s,同时设 s 的在二进制下,最高位为 k

    如果我们想使 s 变为 0,就非常想两边同时乘 s

    但是每次进行一次拿石子必须需要时某个 ai 减少,

    所以可以考虑在 ai 处拿,则需要证明 ais<ai 的。

    现在来想一想异或的定义,发现 s 最高位为 1 ,则在 a1,a2,an 肯定有一个 t ,使得 at 这一位也是 1

    那就拿 ats ,我们又发现最高位变成了 0

    由于这是最高位,则 atk 还高的位就不会改变,所以 ats 一定 <at

    于是就构造出来一组解了。

  3. 对于当前状态 a1a2an=0,一定不存在某种移动使得其异或和为 0

    也就是说,只要有一个 a 数组中数的位发生改变,那么其异或和就不为零了。

SG 函数

在一个有向无环图中,只有一个起点,上面有一颗棋子,两个玩家轮流来移动这颗棋子(必须移动),最先不能移动棋子的人算输。

SG(i) 那就表示当前在点 i 状态(为零必输,非零必赢)

SG 定理

n 个有向图游戏组成的组合游戏,设起点分别为 s1,s2,,sn

则当 SG(s1)SG(s2)SG(sn)0 时,则游戏先手必赢

同时,这是该游戏状态 x 的 SG 值。

证明:

  1. SG(i) 转移到 SG(j)=SG(i)

    这显然是不可能的,看一会SG 函数的定义就会明白。

  2. SG(i) 转移到 SG(j)>SG(i)

    那对手就可以移回与 SG(i) 相等的点,那就无意义了。

  3. SG(i) 转移到 SG(j)<SG(i)

    其实,可以将其抽象成取石子,那就可以使用 Nim 和(即异或和)来求解

posted @   tyccyt  阅读(33)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器
· PowerShell开发游戏 · 打蜜蜂
· 凌晨三点救火实录:Java内存泄漏的七个神坑,你至少踩过三个!
点击右上角即可分享
微信分享提示