博弈论专题

Nim游戏

内容:

有 n 堆石子,每堆石子的石子数给出,甲乙两人回合制取石子,每次可以取任意一堆石子的任意多个(可以直接取完,但不能不取),每个人都按照最优策略来取(抽象),问先手必胜先手必败

结论:

设有 n 堆石子,每堆的个数分别为 a1 , a2 , a3 , …… , an-1 , an 。则有:

先手必胜态:a1 ^ a2 ^ a3 ^ …… ^ an-1!= 0

先手必败态:a1 ^ a2 ^ a3 ^ …… ^ an-1 = 0

证明:

每堆石子数的异或和等于零,说明:二进制位下,每个数的各位数对齐。将 2^0 , 2^1 , 2^2 , …… , 2^x 各位的 1 相加,每位一的个数和必定是偶数个(含0)。

先手必胜态:先手必然可以拿走一些石子,使异或和为0(感性可理解)。后手拿走石子后,异或和必然不为零,因为同一二进制位上最多只能拿一次(只能拿同一堆内的),又不能不拿。直到先手拿走最后一个。

先手必败态同理。

拓展:

台阶型Nim游戏,同样是异或和,必胜态与必败态之间的转化,自己推。

有向图游戏

内容:

给定一个有向无环图,图中只有一个起点,在起点上放一个棋子,两个玩家轮流沿着有向边推动棋子,每次走一步,不能走的玩家失败。

定理:

mex运算:mex( S ) 为集合 S 中没有的最小非负整数。 例:mex( { 1,2,3 } ) = 0 , mex( { 0 } )= 1

SG函数:SG(x) = mex( { SG(y1),SG(y2),SG(y3),……,SG(yk) } ) (其中y1等是x可以走到的点)

SG定理:i)当这个游戏只有一个有向图时,若 SG(start) != 0,则先手必胜;反之先手必败。

  • 证明:因为起点值不为 0,所以它必定可以移动到一个值为 0的点,值为零的点又只能移动到值不为零的点,当值为 0 的点是走不动的点时,后手就输了,故后手必输

ii)当有多个有向图时,若 SG(s1) ^ SG(s2) ^ SG(s3) ^ …… ^ SG(sn) != 0 时先手必胜;反之先手必败

  • 证明:此时每一个有向图游戏的起点处都有一颗棋子,先手后手可能走的是不同图上的棋子。若异或和不为 0,则先手一定可以选择其中一个有向图,那个点 (x) 所连的点的 SG() 值是 [ 0,SG(x) ),必定有构造将所有的 SG() 的异或值为 0(此时移动过后的有向图start发生改变),将必败态留给对手。当所有的 SG() 值都为不能继续走的 0 时,先手获胜。

博弈论(Nim游戏 , 有向图游戏)的更多相关文章

  1. 博弈论进阶之Anti-SG游戏与SJ定理

    前言 在上一节中,我们初步了解了一下SG函数与SG定理. 今天我们来分析一下SG游戏的变式--Anti-SG游戏以及它所对应的SG定理 首先从最基本的Anti-Nim游戏开始 Anti-Nim游戏是这 ...

  2. 51nod1069【Nim取石子游戏】

    具体看:萌新笔记之Nim取石子游戏可以这么写: #include <bits/stdc++.h> using namespace std; typedef long long LL; in ...

  3. 萌新笔记之Nim取石子游戏

    以下笔记摘自计算机丛书组合数学,机械工业出版社. Nim取石子游戏 Nim(来自德语Nimm!,意为拿取)取石子游戏. 前言: 哇咔咔,让我们来追寻娱乐数学的组合数学起源! 游戏内容: 有两个玩家面对 ...

  4. MMORPG大型游戏设计与开发(游戏服务器 游戏场景 概述 updated)

    我们在玩游戏的时候,我们进入游戏后第一眼往往都是看到游戏世界中的场景,当然除了个别例外,因为那些游戏将游戏场景隐藏了起来,如文字游戏中的地点一样.既然我们接触了游戏世界的核心,那么作为核心的场景又包括 ...

  5. MUD江湖_MUD文字游戏_MUD五指_武林群侠_北侠_夺宝江湖_书剑_文字江湖游戏_MUD游戏下载

    MUD江湖_MUD文字游戏_MUD五指_武林群侠_北侠_夺宝江湖_书剑_文字江湖游戏_MUD游戏下载  武侠类手机文字游戏,经典再现高度自由玩法宠物 自制装备 师徒自立门派 自造武功欢迎来玩 Q群 1 ...

  6. (NO.00005)iOS实现炸弹人游戏(八):游戏主角(一)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 最近一直在做另一个RPG游戏,所以本系列迟迟没有更新,上一篇博 ...

  7. python小练习:使用循环和函数实现一个摇骰子小游戏。游戏规则如下:游戏开始,首先玩家选择Big or Small(押大小),选择完成后开始摇三个骰子,计算总值,11<=总值<=18为“大”,3<=总值<=10为“小”。然后告诉玩家猜对或者是猜错的结果。

    python小练习:使用循环和函数实现一个摇骰子小游戏.游戏规则如下:游戏开始,首先玩家选择Big or Small(押大小),选择完成后开始摇三个骰子,计算总值,11<=总值<=18为“ ...

  8. Unity3D游戏-愤怒的小鸟游戏源码和教程(二)

    Unity愤怒的小鸟游戏教程(二) 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) AngryEva游戏效果 ...

  9. Unity3D游戏-愤怒的小鸟游戏源码和教程(一)

    Unity愤怒的小鸟游戏教程 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) AngryEva游戏效果: 1 ...

  10. Java初学者作业——实现控制台的猜数字游戏。游戏运行时产生一个1~100之间的随机数字

    返回本章节 返回作业目录 需求说明: (1)实现控制台的猜数字游戏.游戏运行时产生一个1-100之间的随机数字 (2)要求用户从控制台输入数字,若输入的数字比随机数小,则输出"太小了,再大一 ...

随机推荐

  1. BitLocker加密过程中断断电,能否恢复数据?

    BitLocker是Windows系统提供的磁盘加密功能,用户自己可以手动开启.在访问受BitLocker保护的磁盘分区时,需要先提供正确的密码.秘钥或是BEK文件.如果使用BitLocker将系统盘 ...

  2. MIT6.s081/6.828 lectrue1:Introduction and examples

    目前课程官网能够查到 2020,2021.2022 秋季的课程表,但是视频都是 2020 年录制的那一版 简单复习+回顾下自己的 OS 学习之旅 参考资料: 官网:https://pdos.csail ...

  3. HTB靶场之OnlyForYou

    准备: 攻击机:虚拟机kali. 靶机:OnlyForYou,htb网站:https://www.hackthebox.com/,靶机地址:https://app.hackthebox.com/mac ...

  4. BigCode 背后的大规模数据去重

    目标受众 本文面向对大规模文档去重感兴趣,且对散列 (hashing) .图 (graph) 及文本处理有一定了解的读者. 动机 老话说得好: 垃圾进,垃圾出 (garbage in, garbage ...

  5. JVM方法区

    JVM方法区 <Java虚拟机规范>中明确说明:"尽管所有的方法区在逻辑上是属于堆的一部分,但一些简单的实现可能不会选择去进行垃圾收集或者进行压缩."但对于HotSpo ...

  6. UG NX实现叉车运输货物功能遇见的问题

    在前一段时间编写模拟叉车运输功能时遇到,货物无法跟随的问题(如下动图) 后面发现是速度太快的原因导致货物没有跟着动,类似于抽桌布的感觉 解决办法有两种:第一种解决办法很简单就是把速度降低到不超过  2 ...

  7. Go的函数定义

    格式: 1 func function_name( [parameter list] ) [return_types] { 2 函数体 3 } 注释: func:函数由 func 开始声明 funct ...

  8. 文心一言 VS 讯飞星火 VS chatgpt (72)-- 算法导论7.1 3题

    三.请简要地证明:在规模为 n 的子数组上,PARTITION 的时间复杂度为 Θ(n). 文心一言: 首先,我们需要明确PARTITION函数的具体定义.PARTITION函数通常用于快速排序算法中 ...

  9. Weblogic T3协议反序列化命令执行漏洞(CVE-2018- 2628)复现

    好久没发新文章了,躲懒了,是时候该更新一篇了,这一篇是关于WebLogic T3协议反序列化命令执行漏洞(CVE-2018- 2628)的复现,该漏洞是weblogic的经典漏洞,而网上有关的复现稍显 ...

  10. 应用性能监控工具(pinpoint)部署

    Pinpoint是一款全链路分析工具,提供了无侵入式的调用链监控.方法执行详情查看.应用状态信息监控等功能.pinpoint使用HBASE储存数据. 下面介绍pinpoint部署及应用. 1.  安装 ...