博弈论---Nim游戏(公平组合游戏,概念,证明异或为0就是必败态,示例)

目录

概念: 

公平组合游戏ICG

有向图游戏

Nim游戏

先手)必胜状态

先手)必败状态

如何确定先手是否必胜或者必败(都采用最优策略)

证明:全部异或为0则是必败状态

   综上:

例子


概念: 

公平组合游戏ICG

    若一个游戏满足:
        1.由两名玩家交替行动;
        2.在游戏进程的任意时刻,可以执行的合法行动与轮到哪名玩家无关;
        3.不能行动的玩家判负;
     则称该游戏为一个公平组合游戏。
     NIM博弈属于公平组合游戏,但城建的棋类游戏,比如围棋,就不是公平组合游戏。因为围棋交战双方分别只能落黑子和白子,胜负判定也比较复杂,不满足条件2和条件3。 

有向图游戏

     给定一个有向无环图,图中有一个唯一的起点,在起点上放有一枚棋子。两名玩家交替地把这枚棋子沿有向边进行移动,每次可以移动一步,无法移动者判负,该游戏被称为有向图游戏。

     任何一个公平组合游戏都可以转化为有向图游戏。具体方法是,把每个局面看成图中的一个节点,并且从每个局面向沿着合法行动能够到达的下一个局面连有向边。 

Nim游戏

    NIm就是一种公平组合游戏。

     Nim游戏是一个古老的数学游戏,通常由两名玩家轮流进行。游戏使用一堆物品,例如棋子、石头或者硬币,这些物品被分成几堆,每堆可以有任意数量的物品。玩家在每一回合可以选择一堆物品,并且从中取走任意数量的物品,但是至少要取走一个。最后取走最后一个物品的玩家获胜。

     Nim游戏的关键在于掌握取物品的策略,因为有正确的方法可以确保你获胜,无论对手怎么移动。这个策略涉及到让每一堆物品的数量保持在特定的模式,这样你就可以控制游戏的走向,迫使对手进入必败局面。

     Nim游戏可以有很多变种和扩展,包括多堆物品、多个玩家或者其他规则的变化。

  • 先手)必胜状态

    先手进行某一个操作,留给后手是一个必败状态 时,对于先手来说是一个必胜状态。即先手可以走到某一个必败状态

  • 先手)必败状态

    先手不管使用什么策略,都只留给后手必胜的状态。

  • 如何确定先手是否必胜或者必败都采用最优策略)

   我们使用异或(XOR)运算来确定每一堆物品的数量。

  1. 如果所有堆物品的数量进行异或结果为0,则这是一个必败状态。
  2. 否则,是一个必胜状态。
  • 证明:全部异或为0则是必败状态

分情况讨论:

      1.当所有堆的物品数目都为 00\oplus0\oplus0....\oplus0 = 0

      2.当前存在 a_1\oplus a_2...\oplus a_ n = x \neq 0 

        证明,一定可以通过某种方式(减少某些物品的数量)使得情况2的异或值变为 0 。

           假如 x 的二进制表示中最高的一位 1 在第 k 位。

           那么意味着 a_1,\ a_2,\ ...a_n 中必然至少存在一个数 a_ia_i 的第 k 位的值是 1 。

           那么 a_i > a_i \oplus x  , a_i - (a_i \oplus x ) 是合法的 。

           现在将拿走 a_i 中 a_i - (a_i \oplus x ) 数量的东西,则a_i-(a_i - (a_i \oplus x )) = a_i\oplus x 。

           拿走之后所有堆的物品数目再进行异或: a_1\oplus a_2...\oplus a_i\oplus x\oplus a_ n = x\oplus x = 0

           证明完成。

      3.当前 a_1\oplus a_2...\oplus a_ n = 0

         证明,不管证明去拿多少数目(\neq 0),剩下的所有数异或值都不是0

            反证:假设拿出 a_i 中 k(k \neq 0) 个数目,剩余 a_i^`   ,剩下所有数的异或值为 0 

            则有 a_1\oplus a_2...\oplus a_i^`\oplus a_ n = 0        ①

            原有  a_1\oplus a_2...\oplus a_i\oplus a_ n = 0      ②

            再将 ① 和 ② 者进行异或运行,相同的数就被抵消掉,剩余 a_i^` \oplus a_i = 0

            a_i^` \oplus a_i = 0   说明 a_i^` = a_i ,与假设矛盾。证明完成

   综上:

        当全是0的时候,那么先手必输。

        如果当前先手中数目异或不为 0,那么可以取出某个数的值使得轮到后手时,手中数目异或值为 0。后手不管怎么拿,再次轮到先手时,异或值都不会为 0。保证了先手始终 异或不为 0 的状态,而后手始终为 0 的状态,最后后手会首先遇到全 0 状态,先手始终处于必胜态

        如果先手一开始 异或值就为 0 ,那么后手可以始终保持最优策略使得先手 异或为 0先手处于必败态

 

K-Nim游戏:每次只能取k个

 

例子

给定 n 堆石子,两位玩家轮流操作,每次操作可以从任意一堆石子中拿走任意数量的石子(可以拿完,但不能不拿),最后无法进行操作的人视为失败。

问如果两人都采用最优策略,先手是否必胜。

输入格式

第一行包含整数 n。

第二行包含 n 个数字,其中第 i 个数字表示第 i 堆石子的数量。

输出格式

如果先手方必胜,则输出 Yes

否则,输出 No

数据范围

1≤n≤10^5,
1≤每堆石子数≤10^9

输入样例:

2
2 3

输出样例:

Yes
import java.io.*;class Main{static int n;public static void main(String[] args) throws IOException{BufferedReader in = new BufferedReader(new InputStreamReader(System.in));n = Integer.parseInt(in.readLine());String[] s = in.readLine().split(" ");int res = 0;for(int i=0;i<n;i++)res ^= Integer.parseInt(s[i]);if(res==0) System.out.println("No");else System.out.println("Yes");}
}

 后续会更新更多版本的Nim游戏。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/710401.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

babylonjs入门-基础模版+调试GUI

基于babylonjs封装的一些功能和插件 &#xff0c;希望有更多的小伙伴一起玩babylonjs&#xff1b; 欢迎加群&#xff08;点击群号传送&#xff09;&#xff1a;464146715 官方文档 中文文档 案例传送门 ​ 懒得打字&#xff0c;粘贴复制一气呵成

linux系统---LNMP架构下部署Discuz社区论坛与Wordpress博客

目录 一、编译安装Nginx 1、关闭防火墙 2、安装依赖包 3、创建运行用户 4、压缩软件包并编译安装 5、软链接路径优化 ​编辑 6、添加Nginx系统服务 二.编译安装MySQL服务 1.安装依赖环境 ​编辑 2、创建运行用户 3、编译安装 ​编辑 4、修改mysql 配置文件 5、…

HUAWEI 华为交换机 配置基于VLAN的MAC地址学习限制接入用户数量 配置示例

组网需求 如 图 2-15 所示&#xff0c;用户网络 1 通过 LSW1 与 Switch 相连&#xff0c; Switch 的接口为 GE0/0/1 。用户网络2通过 LSW2 与 Switch 相连&#xff0c; Switch 的接口为 GE0/0/2 。 GE0/0/1 、 GE0/0/2 同属于 VLAN2。为控制接入用户数&#xff0c;对 VLAN2 进…

Go语言公开库与私有库及版本控制

公开库与私有库 go mod除了用作模块化开发之外&#xff0c;也是新版本go源码库的私有与共有的重要途径。 module gitee.com/xvwen/gocmd/cwgogengo 1.21.5在go mod中module的名称规定了该源码是否共有&#xff0c;如果该名称与远程git仓库地址一致&#xff0c;则该源码可以通…

如何合理布局子图--确定MATLAB的subplot子图位置参数

确定MATLAB的subplot子图位置参数 目录 确定MATLAB的subplot子图位置参数摘要1. 问题描述2. 计算过程2.1 确定子图的大小和间距2.2 计算合适的figure大小2.3 计算每个子图的position数据 3. MATLAB代码实现3.1 MATLAB代码3.2 绘图结果 4. 总结 摘要 在MATLAB中&#xff0c;使用…

【C++】认识类和对象

&#x1f525;博客主页&#xff1a; 小羊失眠啦. &#x1f3a5;系列专栏&#xff1a;《C语言》 《数据结构》 《C》 《Linux》 《Cpolar》 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 文章目录 一、什么是面向对象&#xff1f;二、类的引入三、类的定义四、类的访问限定符与…

HarmonyOS—端云一体化组件

概述 DevEco Studio还为您提供多种端云一体化组件。集成端云一体化组件后&#xff0c;您只需进行简单配置即可向应用用户提供登录、支付等众多功能。 登录组件 您可使用端云一体化登录组件向应用用户提供登录和登出功能&#xff0c;目前支持帐号密码登录、手机验证码登录、以…

【ZooKeeper 】安装和使用,以及java客户端

目录 1. 前言 2. ZooKeeper 安装和使用 2.1. 使用Docker 安装 zookeeper 2.2. 连接 ZooKeeper 服务 2.3. 常用命令演示 2.3.1. 查看常用命令(help 命令) 2.3.2. 创建节点(create 命令) 2.3.3. 更新节点数据内容(set 命令) 2.3.4. 获取节点的数据(get 命令) 2.3.5. 查看…

STM32串口DMA发送接收(1.5Mbps波特率)机制

数据拷贝过程中不需要CPU干预&#xff0c;数据拷贝结束则通知CPU处理。 以115200bps波特率&#xff0c;1s传输11520字节&#xff0c;大约69us需响应一次中断&#xff0c;如波特率再提高&#xff0c;将消耗更多CPU资源 高波特率场景下&#xff0c;串口非常有必要使用DMA。 关…

整合swagger,并通过Knife4j美化界面

如果是前后端分离的项目&#xff0c;需要前端的参与&#xff0c;所以一个好看的接口文档非常的重要 1、引入依赖 美化插件其中自带swagger的依赖了&#xff0c;所以不需要再单独导入swagger的坐标了 <dependency><groupId>com.github.xiaoymin</groupId>&…

单片机独立按键控制LED状态

一、前言 这幅图是按键的抖动与时间的联系 按键抖动&#xff1a;对于机械开关&#xff0c;当机械鮑点断开、闭合时&#xff0c;由于机械触点的弹性作用&#xff0c;一个开关在闭合时不会马上稳定地接通&#xff0c;在断开时也不会一下子断开&#xff0c;所以在开关闭合及断开的…

长江路一号桥的安全监测革新

位于无锡新区的长江路一号桥&#xff0c;自1997年落成以来&#xff0c;一直是多功能的市政要道。大桥北侧连接供气管道&#xff0c;右侧则是城市供水管道&#xff0c;而桥底则设有蓝藻环保监测点。这意味着一旦此桥出现问题&#xff0c;其影响远超交通堵塞的层面。近年来&#…

electron打包前端项目

1.npm run build 打包项目文件到disk文件夹 2.安装electron:npm install electron 打开后进到/dist里面 然后把这个项目的地址配置环境变量 配置环境变量&#xff1a;在系统变量的path中添加进去 配置成功后&#xff0c;electron -v看看版本。 3.创建主程序的入口文件main.…

本地写的Bash脚本,Linux端运行报错:/bin/bash^M: bad interpreter: No such file or directory

背景 在本地写了个Bash Shell脚本&#xff0c;但上传到Linux端后加完权限执行时报错&#xff1a; &#xff08;脚本名&#xff1a;script.sh&#xff09; -bash: ./script.sh: /bin/bash^M: bad interpreter: No such file or directory 分析 这个错误通常是由于脚本文件的行…

【机器学习:Recommendation System】推荐系统

推荐系统&#xff08;或推荐系统&#xff09;是一类机器学习&#xff0c;它使用数据来帮助预测、缩小范围并在呈指数级增长的选项中找到人们正在寻找的内容。 【机器学习&#xff1a;Recommendation System】推荐系统 什么是推荐系统&#xff1f;用例和应用电子商务与零售&…

如何通过代理IP安全使用Linkedln领英?

LinkedIn是跨境外贸必备的拓客工具&#xff0c;世界各地的许多专业人士都使用领英来作为发布和共享内容的主要工具&#xff0c;这使得它成为跨境出海必备的渠道工具。 但是不少做外贸的朋友都知道&#xff0c;领英账号很容易遭遇限制封禁&#xff0c;但如果善用工具&#xff0…

【信息系统项目管理师】--【信息技术发展】--【现代化创新发展】--【大数据】

文章目录 第二章 信息技术发展2.2 新一代信息技术及应用2.2.3 大数据1.技术基础2.关键技术3.应用和发展 第二章 信息技术发展 信息技术是在信息科学的基本原理和方法下&#xff0c;获取信息、处理信息、传输信息和使用信息的应用技术总称。从信息技术的发展过程来看&#xff0c…

C语言:数据在内存中的存储

C语言&#xff1a;数据在内存中的存储 整数存储原码、反码、补码转换规则数据与内存的关系 大小端字节序浮点数存储IEEE 754标准存储过程取用过程 数据的存储范围 整数存储 原码、反码、补码 整数的2进制表示方法有三种&#xff0c;即原码、反码和补码 三种表示方法均有符号位…

【Linux】进程间通信之共享内存

文章目录 引入共享内存的原理共享内存的相关接口shmget()shmat()shmdt()shmctl() 共享内存的简单使用共享内存的特点 引入 进程间通信&#xff0c;顾名思义就是一个进程和另一个进程之间进行对话&#xff0c;以此完成数据传输、资源共享、通知事件或进程控制等。 众所周知&am…

Nodejs基于vue的个性化服装衣服穿搭搭配系统sprinboot+django+php

本个性化服装搭配系统主要根据用户数据信息&#xff0c;推荐一些适合的搭配穿搭&#xff0c;同时&#xff0c;用户也可自己扫描上传自身衣物以及输入存放位置&#xff0c;搭配后存储到“我的搭配”中&#xff0c;以便下次挑选&#xff0c;既可以节省搭配时间&#xff0c;也方便…