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定理相关推荐

  1. SG函数和SG定理的运用

    SG函数和SG定理的运用 SG函数和SG定理常用于解决博弈论的相关问题.其中SG函数的求解主要根据MEX运算.什么是MEX运算?MEX( minimal excludant ) 字面上意思是最小除外的 ...

  2. 再谈SG函数和SG定理

    今天考了一道博弈论的题,让我重新复习一下SG定理吧. 首先通常的Nim游戏的定义是这样的:有若干堆石子,每堆石子的数量都是有限的,合法的移动是"选择一堆石子并拿走若干颗(不能不拿)" ...

  3. SG函数和SG定理(Sprague_Grundy)

    一.必胜点和必败点的概念 P点:必败点,换而言之,就是谁处于此位置,则在双方操作正确的情况下必败.        N点:必胜点,处于此情况下,双方操作均正确的情况下必胜. 必胜点和必败点的性质:    ...

  4. (转载)--SG函数和SG定理【详解】

    在介绍SG函数和SG定理之前我们先介绍介绍必胜点与必败点吧. 必胜点和必败点的概念: P点:必败点,换而言之,就是谁处于此位置,则在双方操作正确的情况下必败. N点:必胜点,处于此情况下,双方操作均正 ...

  5. (组合游戏)SG函数与SG定理详解

    文章目录 前言 什么是组合游戏 必胜点和必败点的概念 Sprague-Grundy(SG)定理 SG函数 前言   好久没写博客了,上一篇博客还是去年实训写的,一是因为寒假,二是因为随着难度的加深,学 ...

  6. 组合博弈游戏 - SG函数和SG定理

    转载来自:http://blog.csdn.net/luomingjun12315/article/details/45555495 在介绍SG函数和SG定理之前我们先介绍介绍必胜点与必败点吧. 必胜 ...

  7. 组合游戏 - SG函数和SG定理

    在介绍SG函数和SG定理之前我们先介绍介绍必胜点与必败点吧. 必胜点和必败点的概念: P点:必败点,换而言之,就是谁处于此位置,则在双方操作正确的情况下必败. N点:必胜点,处于此情况下,双方操作均正 ...

  8. SG函数和SG定理【详解】

    在介绍SG函数和SG定理之前我们先介绍介绍必胜点与必败点吧. 必胜点和必败点的概念: P点:必败点,换而言之,就是谁处于此位置,则在双方操作正确的情况下必败. N点:必胜点,处于此情况下,双方操作均正 ...

  9. 三个常见博弈游戏以及 SG 函数和 SG 定理

    前言 原文章 通过数论或者自然数性质完美解决的三个常见博弈游戏: 博弈 解决方法 Bash Game 同余理论 Nim Game 异或理论 Wythoff Game 黄金分割 Bash Game 描述 ...

最新文章

  1. 解决git 提交出现这个错误fatal: Unable to create ‘project_path/.git/index.lock‘: File exists.
  2. 51CTO微博认证说明
  3. mysql :完整性约束
  4. 彭文华:详解数字化转型的破局之道(附直播视频)
  5. java8中字符串常量以及GC相应处理机制
  6. 手机淘汰了多少机器,你怎么看?
  7. JAVA day13,14 API、Object类、日期时间类(long,Date,Calendar,DateFormat)、String类(字符串,可变长字符串)、正则表达式、包装类
  8. 手机安装python模块吗_你不知道的Python模块安装教程
  9. IDEA左侧project导航栏设置背景色
  10. 微信小程序腾讯云实时语音转写
  11. wps怎么把边框加粗_怎么设置WPS表格边框线加粗 - 卡饭网
  12. java public aspect_ASPECT Java的使用
  13. Harbor构建企业级私有docker镜像的仓库的开源解决方案
  14. Linux内核抢占机制(preempt)
  15. 传奇服是怎样架设的,怎样搭建一个属于自己的游戏服 10分钟学会游戏架设 玩转云服务器搭建游戏
  16. Arduino 用声音传感器制作简单的“声纹锁”
  17. 疫情下如何通过华为云会议提升工作效率【华为云至简致远】
  18. stm32+esp8266 GET请求心知天气的简单方法
  19. 关于指数函数等价无穷小的小发现!
  20. 素数c分解语言程序,深入分析C语言分解质因数的实现方法

热门文章

  1. 雷军:努力工作,克制贪婪,是世界上最笨也最高明的办法
  2. 服务器上查询Redis key
  3. poi操作ppt添加超链接
  4. Jieba中文分词下如何画词云图?
  5. 2倍频程、1倍频程、1/3倍频程介绍
  6. Android用户设备唯一标识老用户识别方案
  7. 使用谷歌浏览器扩展查排名(开发谷歌浏览器扩展)
  8. linux进程状态a,Linux进程冻结技术
  9. 移动APP上线,屏幕大小列表
  10. 数据结构工业出版社(戴敏主编)的思维导图,方便记忆。