博弈论及算法实现

本文深入探讨了三种经典博弈论游戏:巴什博弈、尼姆博弈和威佐夫博奕。通过分析各自的游戏规则和必胜策略,阐述了先手优势和后手优势的判断方法,如巴什博弈的取模判断、尼姆博弈的异或运算以及威佐夫博奕的奇异局势识别。同时,介绍了 Sprague-Grundy 定理在简化复杂游戏状态中的应用。通过实例展示了如何计算 SG 函数值,为解决类似博弈问题提供了理论基础和实践指导。

一、巴什博弈(Bash Game)

      只有一堆n个物品,两个人从轮流中取出(1~m)个;最后取光者胜。

      考虑到 若n=m+1 那么 第一个人不论如何取都不能取胜。

      进一步我们发现 若 n=k*(m+1)+r; 先取者拿走 r 个,那么后者再拿(1~m)个

      n=(k-1)*(m+1)+s; 先取者再拿走s 个 最后总能造成 剩下n=m+1 的局面。

      因此,此时先手有必赢策略。

      相对应的,若n=k*(m+1) 那么先取者必输。

      因此我们可以写出对应的程序(默认 n m都大于0)

int Bash_Game(int n,int m)//是否先手有必赢策略
{
    if (n%(m+1)!=0) return 1;
    return 0;
}

 二、尼姆博弈(Nimm Game)

把n堆抽象为n个非负整数,再将n个整数转化为二进制,然后对n个二进制数按位相加(不进位),若每一位相加都为偶数。那么称这个状态为偶状态,否则称它为奇状态.

 可以证明:任何一个偶状态在其中一个数变小后一定成为奇状态,而一个奇状态一定可以通过改变一个数变成偶状态.

   前一点很显然,因为一个数变小至少有一位发生改变,这一位就改变了原来的偶状态. 

对于后一点,对于一个从高位到低位某一位和为奇的奇状态,必定有一个数的二进制表示在此位为1,对于后面的较低位和为奇的情况,只要把这个数对应位取反即可得到一个偶状态.

  XOR 和判断:

  如果有奇数个二进制数在第K位为1 那么在这一位上的和为奇,同样的,偶数个1和为偶.

  很明显位运算xor满足我们的要求,偶数个1异或和为0,奇数个为1;

 由此,终于可以给出算法:

int Nimm_Game(int n)//假设n个数存在数组f[]中,有必胜策略返回1
{
    int f
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郭晋龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值