首页 > 其他分享 >博弈论基础

博弈论基础

时间:2024-08-27 16:07:26浏览次数:4  
标签:博弈论 博弈 游戏 sg texttt 基础 oplus SG

前置知识

\(\operatorname {mex}\):没有出现过的最小自然数,如 \(\operatorname {mex} \{0,2,3\}=1\)。
\(\oplus\):按位异或。

前言

博弈类问题大致分为,公平组合游戏、非公平组合游戏(绝大多数的棋类游戏)、反常游戏。
只需要关注公平组合游戏 \(\texttt{(ICG)}\),反常游戏是公平组合游戏的变形,经济类博弈也不是博客所讨论的范围

  • 两个玩家轮流行动游戏方式一致
  • 两个玩家对状况完全了解
  • 游戏一定会在有限步数内分出胜负
  • 游戏以玩家无法行动结束

博弈的双方都被认为是神之个体,因为所有玩家对状况完全了解,且充分为自己打算,绝对理性
当局面确定,结果必然注定,并且没有任何随机的成分
游戏中的每一个状态,最终导致的结果也必然注定,只有必胜态、必败态,两种状态
这一类博弈问题的结果没有任何意外,一方可以通过努力去改变结果是不可能的,这一点是反直觉的。

  • 常用对数器打表来找规律。
  • 博弈论的题目就是 要干去干,去找规律,不要怕

巴什博弈 \(\texttt{(Bash)}\)

\(n\) 个的石头,每次操作可以拿走 \([1,m]\) 个石头。拿到最后 \(1\) 个石头的人获胜(也就是不能拿石头的人输)。

这个问题特别简单,就是显然答案是如果 \(n\) 为 \(m+1\) 的倍数那么先手输,否则先手赢。

\(\texttt{sg}\) 函数

接下来引入 \(\texttt{sg}\) 函数。

\(\texttt{sg}\) 表示当前状态的胜负情况。

有如下公式 \(sg(A)=\operatorname {mex} (sg(B)|A\to B)\)。

式子中的 \(A\) 和 \(B\) 表示状态,\(A\to B\) 表示 \(A\) 状态可以达到 \(B\)状态。也就是说我们可以通过 \(A\) 能达到的状态的SG函数值推算出 \(A\) 的 \(SG\) 值。

如果 \(\texttt{sg}\) 值为 \(0\) 则表示先手输,否则先手赢。

数学归纳法证明:

  1. 最终状态 \(SG=0\)。
  2. 对于任意一个必胜态 \(SG\not=0\),存在一个后继态 \(SG=0\)
  3. 对于任意一个必败态 \(SG=0\),不存在一个后继态 \(SG=0\)。

\(\texttt{e.g.}\):在巴什博奕中:当 \(m = 2\) 时,\(\texttt{sg[0]=0,sg[1]=1,sg[2], sg[3]=0,}\cdots\)。

\(\texttt{FAQ}\):

  • Q: 不就是判断一个输赢吗?为什么要用一个 \(\texttt {int}\),我 \(\texttt{bool}\) 也可以啊。
  • A: 是的,确实可以只有 \(\texttt{bool}\),用 \(\texttt{int}\) 另有用途,我们下面会讲。

P2197 【模板】\(\texttt{(Nim)}\) 游戏———\(\texttt{sg}\) 多个独立的子问题的合并

题目描述

甲,乙两个人玩 \(\texttt{nim}\) 取石子游戏。

\(\texttt{nim}\) 游戏的规则是这样的:地上有 \(n\) 堆石子(每堆石子数量小于 \(10^4\)),每人每次可从任意一堆石子里取出任意多枚石子扔掉,可以取完,不能不取。每次只能从一堆里取。最后没石子可取的人就输了。假如甲是先手,且告诉你这 \(n\) 堆石子的数量,他想知道是否存在先手必胜的策略。

公式引入

若局面X由若干个子游戏 \(X1,X2...Xn\) 构成,则
\(SG(x)=SG(X_1)\oplus SG(X_2) \oplus \cdots\oplus SG(X_n)\)

数学归纳法证明:

  1. 最终局面成立
  2. \(\forall X\),所有后继局面可以取到 \(G(X_1)\oplus SG(X_2) \oplus \cdots\oplus SG(X_n)-1\),取不到\(SG(X_1)\oplus SG(X_2) \oplus \cdots \oplus SG(X_n)\)

同样看做 \(\texttt{Nim}\) 游戏

设 \(S \rightarrow S_1\)

\(S \oplus (S \oplus S_1) =S_1\)

设 \((S \oplus S_1)\) 最高位为 \(k\),存在 \(A\) 使得 \(k\) 位为 \(1\)。

那么\(A \oplus (S \oplus S_1) < A\),所以让 \(A\) 变成\(A \oplus (S \oplus S_1)\)就行了。

问题解答

显然对于每一个子问题,对于石头个数为 \(n\), \(\texttt {sg(n)=n}\)。

所以 \(SG=\oplus_{i=1}^{n}a_i\)。判断 \(\oplus_{i=1}^{n}a_i 是否为零即可\)

代码

#include<bits/stdc++.h>
using namespace std;
int t, n, a;
signed main(){
	scanf("%d", &t);
	while (t--) {
		scanf ("%d", &n); int ans = 0;
		while (n--) scanf("%d", &a), ans ^= a;
		if (ans == 0) puts("No"); else puts("Yes");
	}
    return 0;
}

参考资料

施工进度

标签:博弈论,博弈,游戏,sg,texttt,基础,oplus,SG
From: https://www.cnblogs.com/kimi0705/p/18382642/game

相关文章

  • C++面试基础系列-this指针
    系列文章目录文章目录系列文章目录C++面试基础系列-this指针Overview1.this指针1.1.特性1.2.用法1.3.注意事项2.使用'this'指针的多态类的示例3.在C++中,指针和对象本身有什么区别?关于作者C++面试基础系列-this指针Overview1.this指针在C++中,this指针是一......
  • 逻辑回归算法 0基础小白也能懂
    逻辑回归算法0基础小白也能懂(附代码)原文链接啥是逻辑回归算法逻辑回归(LogisticRegression)是一种广泛用于分类任务的统计模型,特别适用于二元分类问题。尽管名称中带有“回归”,但逻辑回归主要用于分类。逻辑回归算法包含以下几个关键部分:线性回归与分类,Sigmoid函数与决策边......
  • sqlserver基础
    说明:此次笔记针对sqlserver2019版本启停右击服务名称,可选择停服/起服/重启服务sqlserver(MSSQLSERVER)--开启代理--开启sqlserver网络配置--mssqlserver的协议--TCP/IP--开启SQLNativeClient11.0配置--客户端协议--TCP/IP--开启客户端SQLServerManag......
  • inno setup基础的脚本代码
    ;脚本由InnoSetup脚本向导生成!;有关创建InnoSetup脚本文件的详细资料请查阅帮助文档!#defineMyAppName"LeawoBlu-rayPlayer"#defineMyAppVersion"1.0.0.0"#defineMyAppPublisher"moyea"#defineMyAppURL"https://www.example.com/"#defi......
  • C++与C语言中基础数据类型详解
    目录引言基础数据类型分类实际编程中的应用建议结论引言在C++与C语言的编程世界中,理解并正确使用基础数据类型是每个程序员的必备技能。不同的数据类型在内存中的占用和表示方式直接影响到程序的性能和行为。本文将详细介绍C++与C语言中常见的基础数据类型,探讨它们......
  • 软件设计师全套备考系列文章12 -- 计算机网络基础
    软考--软件设计师(12)--计算机网络基础文章目录软考--软件设计师(12)--计算机网络基础前言一、章节考点二、网络分类三、七层网络协议结构四、TCP/IP五、IP协议前言考试时间:每年5月、11月,软件设计师每年都会开考。考试条件:三不限考试形式:一共两门 计算机于软......
  • PostgreSQL基础
    1.数据类型1.4布尔类型bool1.5网络地址类型cidr:对ip和子网掩码合法性做校验,输出时会带子网掩码inet:对ip做校验,输出时有可能带子网掩码macaddr和macaddr8:MAC地址1.5.1操作符1.5.2函数host:取ip地址SELECThost(cidr'192.168.2.0/24')text:取ip和子网掩码SE......
  • SQL基础综合练习题(39题)
    https://download.csdn.net/download/ruyigongfang/89681313可以用这个文件的建表语句在自己的pysql执行,就有该练习用的表。https://download.csdn.net/download/ruyigongfang/89681312该链接是只有题没有答案的文档。所用到的表:student(学生表):sno(学号),sname(学生姓名),ssex(学......
  • 【Linux入门】shell基础篇——变量与运算
    文章目录shell中的变量概述变量的作用Shell变量名与变量值变量名变量值变量的作用范围局部变量(LocalVariables)全局变量(GlobalVariables)注意变量的类型1.环境变量(EnvironmentVariables)2.位置变量(PositionalVariables)3.预定义变量(PredefinedVariables)补充:自定......
  • (软件测试)基础3
    1.用例执行添加一列为实际结果:出现上述情况:此时不通过!!!最耗时:等待bug回归2.缺陷缺陷介绍:问题不等于错误   任何问题都叫缺陷,问题并不代表错误测试:最终站在用户的角度缺陷产生原因:从需求产生,直至发布上线,从中都有可能有缺陷的产生(木桶效应)设计:架......