博弈论-SG函数和SG定理
1.SG函数和SG定理是一个十分神奇的东西,有了它,绝大部分的博弈都可以被统一到这个上面,都可以使用SG函数解决。是一种解决博弈问题的十分方便的手段。
2.首先给出一些基本的定义:mex运算,这个是作用在集合上的运算,具体的含义就是:找出不属于当前集合最小的非负整数,可能你有点晕,我们看几个例子。mex{1,2,3}=0;为什么?因为自然数从0开始,不属于这个集合最小的非负整数就是0了,再例如mex{0,1,3}=2;根据上面的观点这个应该也是很好理解的吧。
3.元素x的后继状态:这个可能比较难以理解,什么叫做元素x的后继状态呢?其实就是x可以转移过去的状态。我们在Bash博弈中,可以取1-m个石子,当前有x个石子,所以x可以转移到的状态是{x-1,x-2,....x-m}这个集合的每一个元素叫做x的后继状态。
4.SG函数:对于任意的状态x,我们定义函数SG(x)=mex(S),其中S的X的后继状态的集合。
5.SG定理:游戏和的SG函数等于各个游戏SG函数的Nim和。(NIm和就是每个SG函数值异或起来)。
6.SG函数值和博弈结果的关系:(1)在一个游戏中有n个物品,如果SG(n)=0,先手必败,否则先手必胜。(2)n个游戏组成的一个游戏(可以看做n堆物品),游戏和的SG函数等于0,先手必败,否则先手必胜。
7.实际的例子:SG函数的使用。这个例子不像传统的四大博弈一样直接有结论可用,其实这个有点像Nim博弈,但是拿去物品数量的限制使得这个题不能使用Nim博弈的结论,所以这个时候SG函数就十分有用了。我们先简单的分析一下SG函数的使用步骤
1、使用 数组S将 可改变当前状态 的方式记录下来。(其实就是可以拿取多少物品的集合)
2、然后我们使用 另一个数组 将当前状态x 的后继状态标记。
3、最后模拟mex运算,也就是我们在标记值中 搜索 未被标记值 的最小值,将其赋值给SG(x)。
4、我们不断的重复 2 - 3 的步骤,就完成了 计算1~n 的函数值。
下面是AC的代码:
#include<bits/stdc++.h>
#define MAXN 1000 + 10
#define N 20
int f[N], SG[MAXN], S[MAXN];
void getSG(int n) {int i, j;memset(SG, 0, sizeof(SG));for (i = 1; i <= n; i++){memset(S, 0, sizeof(S));for (j = 0; f[j] <= i && j < N; j++)S[SG[i - f[j]]] = 1;for (j = 0;; j++) if (!S[j]) {SG[i] = j;break;}}
}
int main() {int n, m, k;f[0] = f[1] = 1;for (int i = 2; i <= 16; i++)f[i] = f[i - 1] + f[i - 2];getSG(1000);while (scanf("%d%d%d", &m, &n, &k), m || n || k) {if (SG[n] ^ SG[m] ^ SG[k]) printf("Fibo\n");else printf("Nacci\n");}return 0;
}
博弈论-SG函数和SG定理相关推荐
- SG函数和SG定理的运用
SG函数和SG定理的运用 SG函数和SG定理常用于解决博弈论的相关问题.其中SG函数的求解主要根据MEX运算.什么是MEX运算?MEX( minimal excludant ) 字面上意思是最小除外的 ...
- 再谈SG函数和SG定理
今天考了一道博弈论的题,让我重新复习一下SG定理吧. 首先通常的Nim游戏的定义是这样的:有若干堆石子,每堆石子的数量都是有限的,合法的移动是"选择一堆石子并拿走若干颗(不能不拿)" ...
- SG函数和SG定理(Sprague_Grundy)
一.必胜点和必败点的概念 P点:必败点,换而言之,就是谁处于此位置,则在双方操作正确的情况下必败. N点:必胜点,处于此情况下,双方操作均正确的情况下必胜. 必胜点和必败点的性质: ...
- (转载)--SG函数和SG定理【详解】
在介绍SG函数和SG定理之前我们先介绍介绍必胜点与必败点吧. 必胜点和必败点的概念: P点:必败点,换而言之,就是谁处于此位置,则在双方操作正确的情况下必败. N点:必胜点,处于此情况下,双方操作均正 ...
- (组合游戏)SG函数与SG定理详解
文章目录 前言 什么是组合游戏 必胜点和必败点的概念 Sprague-Grundy(SG)定理 SG函数 前言 好久没写博客了,上一篇博客还是去年实训写的,一是因为寒假,二是因为随着难度的加深,学 ...
- 组合博弈游戏 - SG函数和SG定理
转载来自:http://blog.csdn.net/luomingjun12315/article/details/45555495 在介绍SG函数和SG定理之前我们先介绍介绍必胜点与必败点吧. 必胜 ...
- 组合游戏 - SG函数和SG定理
在介绍SG函数和SG定理之前我们先介绍介绍必胜点与必败点吧. 必胜点和必败点的概念: P点:必败点,换而言之,就是谁处于此位置,则在双方操作正确的情况下必败. N点:必胜点,处于此情况下,双方操作均正 ...
- SG函数和SG定理【详解】
在介绍SG函数和SG定理之前我们先介绍介绍必胜点与必败点吧. 必胜点和必败点的概念: P点:必败点,换而言之,就是谁处于此位置,则在双方操作正确的情况下必败. N点:必胜点,处于此情况下,双方操作均正 ...
- 三个常见博弈游戏以及 SG 函数和 SG 定理
前言 原文章 通过数论或者自然数性质完美解决的三个常见博弈游戏: 博弈 解决方法 Bash Game 同余理论 Nim Game 异或理论 Wythoff Game 黄金分割 Bash Game 描述 ...
最新文章
- 解决git 提交出现这个错误fatal: Unable to create ‘project_path/.git/index.lock‘: File exists.
- 51CTO微博认证说明
- mysql :完整性约束
- 彭文华:详解数字化转型的破局之道(附直播视频)
- java8中字符串常量以及GC相应处理机制
- 手机淘汰了多少机器,你怎么看?
- JAVA day13,14 API、Object类、日期时间类(long,Date,Calendar,DateFormat)、String类(字符串,可变长字符串)、正则表达式、包装类
- 手机安装python模块吗_你不知道的Python模块安装教程
- IDEA左侧project导航栏设置背景色
- 微信小程序腾讯云实时语音转写
- wps怎么把边框加粗_怎么设置WPS表格边框线加粗 - 卡饭网
- java public aspect_ASPECT Java的使用
- Harbor构建企业级私有docker镜像的仓库的开源解决方案
- Linux内核抢占机制(preempt)
- 传奇服是怎样架设的,怎样搭建一个属于自己的游戏服 10分钟学会游戏架设 玩转云服务器搭建游戏
- Arduino 用声音传感器制作简单的“声纹锁”
- 疫情下如何通过华为云会议提升工作效率【华为云至简致远】
- stm32+esp8266 GET请求心知天气的简单方法
- 关于指数函数等价无穷小的小发现!
- 素数c分解语言程序,深入分析C语言分解质因数的实现方法