博弈论
定义
-
必胜或必胜状态:仅仅考虑当前的状态,不考虑的操作人时,一定必胜或必输
-
: 在二进制下,对位取反。
-
其中 表示 有一条边指向 , 指一个数列第一个未出现的非负数
Nim 游戏
考虑有 堆石子,两个人轮流来拿走棋子(至少拿一个),拿到最后剩下的一颗棋子的人获胜。
结论:
定义 Nim 和 。
当 Nim 和 为 时,该状态为必败状态;反之,则为必胜状态。
证明:
我们需要三个引理:
-
无后继状态为必败状态
这个情况只有全 ,同时满足 。
-
对于当前状态 ,一定存在某种移动使得其异或和为
考虑来构造一下:
设 ,同时设 的在二进制下,最高位为 。
如果我们想使 变为 ,就非常想两边同时乘 。
但是每次进行一次拿石子必须需要时某个 减少,
所以可以考虑在 处拿,则需要证明 的。
现在来想一想异或的定义,发现 最高位为 ,则在 肯定有一个 ,使得 这一位也是
那就拿 ,我们又发现最高位变成了 。
由于这是最高位,则 比 还高的位就不会改变,所以 一定 。
于是就构造出来一组解了。
-
对于当前状态 ,一定不存在某种移动使得其异或和为
也就是说,只要有一个 数组中数的位发生改变,那么其异或和就不为零了。
SG 函数
在一个有向无环图中,只有一个起点,上面有一颗棋子,两个玩家轮流来移动这颗棋子(必须移动),最先不能移动棋子的人算输。
那就表示当前在点 状态(为零必输,非零必赢)
SG 定理
有 个有向图游戏组成的组合游戏,设起点分别为
则当 时,则游戏先手必赢
同时,这是该游戏状态 的 SG 值。
证明:
-
从 转移到
这显然是不可能的,看一会SG 函数的定义就会明白。
-
从 转移到
那对手就可以移回与 相等的点,那就无意义了。
-
从 转移到
其实,可以将其抽象成取石子,那就可以使用 Nim 和(即异或和)来求解
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器
· PowerShell开发游戏 · 打蜜蜂
· 凌晨三点救火实录:Java内存泄漏的七个神坑,你至少踩过三个!