简单博弈论
简单博弈论
Nim游戏
Nim游戏满足以下三个条件:
(1)两名玩家交替行动
(2)游戏过程中,可以执行的的行动和轮到哪位玩家没有关系
(3)不能行动的玩家判负
比如围棋就不是一种Nim游戏,因为围棋有黑白两子不满足(2),围棋判断输赢规则较为复杂不符合(3)。下面的取石子游戏就是一个Nim游戏:给定n堆石子,两位玩家轮流操作,每次操作可以从任意一堆石子中拿走任意数量的石子(可以拿完,但不能不拿),最后无法进行操作的人视为失败。
问如果两人都采用最优策略,先手是否必胜。
例如:有两堆石子,第一堆有2个,第二堆有3个,先手必胜。
操作步骤:
- 先手从第二堆拿走1个,此时第一堆和第二堆数目相同
- 无论后手怎么拿,先手都在另外一堆石子中取走相同数量的石子即可。
- 两个概念
必胜状态:即经过某一个操作后留给另一个玩家的是一个必败状态,则对于先手玩家来说就是一个必胜状态,即先手可以走到一个必败状态。
必败状态:即无论怎么操作都必定会走到一个必胜状态,则对于先手玩家来说是一个必败状态,即先手必定走到一个必胜状态。 - 解决方法和数学证明
假设这n堆石子分别为 个,那么当 时为先手必败, 个,那么当 时为先手必胜。(xor是异或运算)
证明:首先当每堆石子数量都为0时有: 此时为终止状态,先手必败。当 时,我们设x的二进制数为1的最高位是第k位,显然有 ~ 中至少有一个数的二进制数的第k位为1,不妨设这个数为 ,则 [^异或计算],那么就可以保证从第i堆石子中取 有意义,设取了以后第i堆剩下的石子个数为 ,则取后各堆石子异或为: 所以对于任一个各石堆个数异或值不为0的状态,我们都可以取特定的石子让它变为异或值为0的状态,即此时状态为先手必胜。再证:首先当 此时为先手必败状态。这里我们可以用反证法,假设我们可以通过取一定的石子让它的异或值继续为0,即:
不知道为什么,这下面的发不出来。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!