首页 > 其他分享 >浅谈SG函数

浅谈SG函数

时间:2024-10-09 23:20:18浏览次数:10  
标签:状态 浅谈 必败 .... 后继 必胜 SG 函数

文章目录

写在前面

听说CSDN给米就来了,不过作为一个品质优良的程序员来说,无私奉献是我应该做的,所以博主写的文章基本上不花钱,都是为了以后某天忘记了,自己能看懂才写的。so,我会写的很啰嗦,直到保证忘记的我能够看懂。

对于读者嘛,能看就看吧,我就不管了。

咱们一步一步来。

公平游戏

这里直接给出公平游戏的特征:

  • 两个玩家博弈
  • 对于当前状态来讲,之后先手操作,而与当前操作人是谁无关
  • 游戏一定可以进行完
  • 游戏的结果是有限个

三个概念

先手必胜态:即谁是先手,在保证后续都聪明的情况下(是考点),此局必胜。

先手必败态: 同理,先手必败(在都保证聪明的情况下)

后继状态: 当前状态的下一个状态就是后继状态~~(一开始我就没明白后继状态,以为是后面所有的状态)~~

然后我们来看几个显然的性质

  • 如果是必胜态当且仅当至少一个后继状态是必败态
  • 没有后继状态的一定是毕生态
  • 如果是必败态(特意空着)
  • 一个状态的后继状态都是必胜态,则当前为必败态。

这个《特意空着》 是我在写性质的时候突然有了疑问?

显然:一个状态的后继状态都是必胜态,则当前为必败态。
这句话一定是正确的,但是反过来来呢?即:如果当前是必败态,那么后续状态都是必胜态?

oiwiki 的定理三:一个状态是必败状态当且仅当它的所有后继状态均为必胜状态。

我们来思考一下,这是对的吗?

举个例子,两堆石子,各 4 4 4 个,问在都是最优策略的情况下谁会赢?

很显然,有个先手必败的策略就是,无论先手选什么,后手跟着选另一堆相同的数,这样必败,那么这就是先手必败喽

我们再来看定义,如果定理三是正确的,那么对于后继状态来讲,必须都是必胜态,可事实如此吗?

当先手选 2 2 2 的时候时候,后者可以有多种选择,而其中选 2 2 2 是一定会胜利的,但是!其他状态可以保证他毕胜吗,显然不行,手玩就可发现不行。

我们发现:后续状态并不全是必胜状态呀?

那应该如何解释?

其实,无论是先手必胜还是先手必败态,我们都是在双方绝对聪明的情况下考虑的,也就是说:上述的状态之中,只有选 2 2 2 才是后继状态,其他是不可能存在的,因为题目条件是:双方都会采取当前最优策略。

所以,通过这个疑问,我们学到了:必胜和必败成立的前提是,双方采取最优策略,否则不成立

看到这里,不免会抱怨,为什么讨论这个问题,感觉是对的不就行了吗?

因为这个定理三在和后面的异或和联系起来的时候,定理三的等价语言就是:

“当 S G 1 ⊕ S G 2 ⊕ . . . . = 0 SG_1 \oplus SG_2 \oplus....=0 SG1​⊕SG2​⊕....=0 时,改变其中一个 S G SG SG值,不存在 S G 1 SG^1 SG1 满足 S G 1 1 ⊕ S G 2 ⊕ . . . . = 0 SG^1_1 \oplus SG_2 \oplus....=0 SG11​⊕SG2​⊕....=0 再次成立”

很显然,单单从异或和方面来讲,这是正确的,但是如果你搞不懂定理三,就不明白为什么可以用异或和表示必胜或者必败态

标签:状态,浅谈,必败,....,后继,必胜,SG,函数
From: https://blog.csdn.net/zxsure/article/details/142799073

相关文章

  • 43 C 程序动态内存分配:内存区域划分、void 指针、内存分配相关函数(malloc、calloc、re
    目录1 C程序内存区域划分1.1代码区(CodeSection)1.2全局/静态区(Global/StaticSection)1.3栈区(StackSection)1.4 堆区(HeapSection)1.5动态内存分配2void指针(无类型指针)2.1void指针介绍2.2void指针的作用2.3void指针的特点2.4 void指针类......
  • 异步场景: promise、async函数与await命令介绍
    如果你也对鸿蒙开发感兴趣,加入“Harmony自习室”吧!扫描下方名片,关注公众号,公众号更新更快,同时也有更多学习资料和技术讨论群。在鸿蒙的开发中,我们时常会遇到promise异步场景,有同学反馈说希望提一下。异步开发这部分的内容比较多,我不确定这位朋友具体想讨论是哪些方面,那我从......
  • 积分与多元函数 高数复习笔记
    4.不定积分4.1.定义如果函数F(x)满足F′(x)=f(x),则称F(x)是f(x)的一个原函数。不定积分∫f(x......
  • vavr Java的函数式编程神器-Part1
    微信公众号:阿俊的学习记录空间小红书:ArnoZhangwordpress:arnozhang1994博客园:arnozhangCSDN:ArnoZhang19941.介绍Vavr(前称Javaslang)是一个为Java8+提供的函数式库,提供持久数据类型和函数控制结构。1.1.Vavr中的Java8函数式数据结构Java8的lambda(λ)使我们能够创......
  • 【C++】类和对象(3)(默认成员函数--拷贝构造&赋值重载)
    引言前文介绍了C++中默认成员函数中的构造函数和析构函数,相信已经对它们的功能与用法有了基本认识,本文接着介绍也很常见的拷贝构造函数和赋值重载函数,便于对C++进一步的学习。拷贝构造函数补充知识:深浅拷贝深拷贝和浅拷贝是C++中对象拷贝的两种不同方式。浅拷贝是指将......
  • Lambda函数的理解
    1.基本概念Lambda函数,亦称为Lambda表达式、匿名函数等,是一种函数对象,Lambda函数可以让函数像普通变量一样进行赋值、传递、函数返回等操作。C++中的Lambda函数经常用来解决如下问题:(1)使得程序更加简洁,尤其对于一次性使用的函数。(2)使得函数可以自由流动,就像变量一样,这给函数式编......
  • 4.Python 函数(函数的定义、函数的传入参数、函数的返回值、None 类型、函数说明文档、
    一、函数快速入门1、函数概述函数是组织好的,可重复使用的,用来实现特定功能的代码段name="HelloWorld"name_length=len(name)print(f"{name}的长度为{name_length}")#HelloWorld的长度为11len()是Python内置的函数,是提前写好的,可以重复使用,实现统计长......
  • python3常用内置函数及常用库functools使用
    常用内置函数#lambda函数-----------------------------add=lambdaa,b,c:a+b+cprint(add(1,2,3))#6#sorted函数-----------------------------a_l=[1,3,5,7,0,-1,-9,-4,-5,8]print(sorted(a_l))#[-9,-5,-4,-1,0,1,3,5,7,8]p......
  • Hive(六)JSON函数
    概念什么是JSONJSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成JSON是存储和交换文本信息的语法,类似XMLJSON比XML更小、更快,更易解析JSON语法数据在名称/值对中数据由,分开使用斜杠\来转义字符大括号{}保存对象......
  • Hive(五)常用函数
    Hive常用函数字符串函数返回值函数描述stringconcat(string/binaryA,string/binaryB…)对二进制字节码或字符串按次序进行拼接intinstr(stringstr,stringsubstr)查找字符串str中子字符串substr出现的位置intlength(stringA)返回字符串的长度int......