从Nim游戏到SG函数

从Nim游戏到SG函数

Nim游戏

公平组合问题在蓝桥杯等算法竞赛中经常出现,最经典的例子莫过于Nim游戏

Nim游戏:两个玩家面前有若干堆石子,每个玩家每次可在每堆石子中取走任意多个石子,取走最后一枚石子的玩家获胜。

其结论为如果所有堆的石子个数的异或值为0,那么代表这个状态是先手必负,否则说明该状态为先手必胜状态。

SG函数

由SG定理可知,所有的公平组合问题都等价于若干单堆Nim游戏的和(要求是类似取走最后一个石子的人获胜)

例子

Bash博弈

一堆石子,每次只能取1~k个,取到最后一个石子的人获胜。

首先SG(0)=0为先手必负状态

SG(1)=1

SG(2)=2

SG(3)=3

...

SG(k)=k

SG(k+1)=0

因此Bash博弈的先手必负条件等价于n%(k+1)=0

否则先手必胜.

相关推荐
不会C语言的男孩16 分钟前
C++ Primer 第3章:字符串、向量和数组
开发语言·c++
ʚ希希ɞ ྀ17 分钟前
岛屿数量 -- 图论
算法·深度优先·图论
code monkey.1 小时前
【Linux之旅】Linux 应用层自定义协议与序列化:从粘包问题到网络计算器
linux·网络·c++
草莓熊Lotso1 小时前
【Linux网络】深入理解 HTTP 协议(二):从协议格式到手写工业级 HTTP 服务器
linux·运维·服务器·网络·c++·http
aWty_1 小时前
实分析入门(11)--Cantor三分集
学习·数学·算法·实变函数
兰令水1 小时前
leecodecode【二叉树递归+对称】【2026.6.1打卡-java版本】
算法
地平线开发者9 小时前
profiler debug 工具用法与高一致性策略
算法·自动驾驶
编程大师哥10 小时前
匿名函数 lambda + 高阶函数
java·python·算法
我叫袁小陌10 小时前
算法解题思路指南
算法
MC皮蛋侠客10 小时前
C++17 多线程系列(五):C++17 并行算法——从串行到并行的零成本迁移
c++·多线程