摸鱼摸太久了没有那种什么都不想的肝劲了,导致一年了还是很垃圾被人瞧不起了
ICG问题(impartial combinatorial game公平组合游戏)
- 有两个玩家,游戏规则对两人公平
- 游戏状态有限,能走的步数也有限
- 两人轮流走步,一个玩家不能走步时游戏结束
- 游戏的局势不能区分玩家身份。像围棋这样有黑白两方的游戏就不属于此类问题。
特征:给定初始局势,指定先手玩家,双发采取最优策略,获胜者定。
图游戏
给一个有向无环图
G
(
X
,
F
)
G(X,F)
G(X,F),
X
X
X是点(局势)的非空集合,
F
F
F是
X
X
X上的函数,对于
x
∈
X
x\in X
x∈X,有
F
(
x
)
⊂
X
F(x)\subset X
F(x)⊂X。
ICG问题都可以转化为基于图的游戏。
巴什博弈 bash game
规则:有一堆n个石子。每次a和b可以取1~m个石子。不能取的输。
结论:
n
m
o
d
(
m
+
1
)
=
0
n\mod (m+1) =0
nmod(m+1)=0则先手必败。否则,先手必胜。
证明:
先手拿了x个(
x
∈
[
1
,
m
]
x\in [1,m]
x∈[1,m]),那么后手必然可以使得该轮两者共拿了
(
m
+
1
)
(m+1)
(m+1)个。最后必然是后手拿走最后一个石子。
否则,先手可以拿
n
m
o
d
(
m
+
1
)
n \mod (m+1)
nmod(m+1)个石子,问题转化为b是先手的必败态。
扩展巴什博弈
规则:有一堆n个石子。每次可以取
P
=
{
a
,
a
∈
N
+
}
P=\{a,a\in N^+\}
P={a,a∈N+}个石子。
结论:结果存在周期性。先得出前几个的结果,再进行动态规划或直接求出周期取余计算。
斐波那契博弈 fibonacci nim
规则:有一堆n个石子,先手第一次不能取完所有石子。以后每一次取,都只能取不超过上一次取的石子数的两倍的石子。不能取的输。
结论:若n是斐波那契数,则先手必败。否则,先手必败。
证明:
用数学归纳法mathematic induction:当石子数为1和2时,很显然,结论成立。现假设石子数为任意a<x(x为一个斐波那契数)(a为比x小的所有斐波那契数),f(a)结论都成立。我们证明f(x)也成立。
f(x)个石子可以拆分成f(x-1)和f(x-2)个石子。若先手拿走大于等于f(x-1)个石子,由于
2
×
f
(
x
−
1
)
>
f
(
x
−
2
)
2\times f(x-1)>f(x-2)
2×f(x−1)>f(x−2),后手必然可以一次性拿完剩下的石子。因此先手必然拿少于f(x-1)个石子。
因此我们把f(x)个石子拆成两堆。大小分别为f(x-1)和f(x-2)。因为先手必然拿少于f(x-1)个石子。对于f(x-1)个石子的这一堆来看,就等同于把问题的规模转化为了前一个斐波那契数。由数学归纳法的假设,f(x-1)这一堆的最后一个石子必然是后手取的。
假设后手在f(x-1)堆最后一次取的石子数目为m。我们先得出m最大可能为多少。显然这堆石子只有先手取过一次,然后后手就取完的时候m最大。即先手取的数为f(x-1)/3。此时后手取的m最多为
2
∗
f
(
x
−
1
)
/
3
2*f(x-1)/3
2∗f(x−1)/3。接下来先手在堆f(x-2)中取石子。他能取的最多为4*f(x-1)/3。将这个数与f(x-2)进行比较(相减),发现大于f(x-2)。
于是先手在堆f(x-2)中取的时候,他也无法一次取完。那么这个问题又转化成归纳法的假设。这一堆石子的最后一个也是后手取的。
至此,我们证明了f(x)也满足结论。由数学归纳法,可知结论前一半(是斐波那契数时必败态)正确。
当不是斐波那契数时,先手可以把石子数目变成最近的一个斐波那契数。因此必胜。证毕。
威佐夫博弈 Wythoff Game
想起以前gym过一次,出了威佐夫博弈变体。要重新推判断式,特别有意思。其实掌握推导过程就好。
规则:有两堆石子,一堆n个,另一堆m个。要么一堆里取任意个石子,要么两堆一起取等量任意个石子。
结论:若满足奇异局势,则必败态。否则必胜态。奇异局势:(a,b)满足
[
a
b
s
(
b
−
a
)
∗
ϕ
]
=
m
i
n
(
a
,
b
)
[abs(b-a)* \phi] = min(a,b)
[abs(b−a)∗ϕ]=min(a,b)。(
ϕ
\phi
ϕ为黄金分割比例
1
+
5
2
\frac{1+\sqrt{5}}{2}
21+5)
证明:
我们可以逐个推导出必败局势和必胜局势。
首先我们可以看出,威佐夫博弈可以看作另一个游戏。即在棋盘某个位置有一个皇后。我们可以把皇后往右、或往下、或往右下方向移动任意个位置。移动到无法移动(即棋盘右下角)则游戏结束。
于是我们把局势画成一张网格。标记必胜态和必败态。
推导方式:
(1)(0,0)是必败态。
(2)能到达必败态的点是必胜态。
(3)不能到达必败态的点是必败态。
相当于每次加入一个必败态,他所在的横行、竖行和斜行都因此成为必胜态。没有被标记为必胜态的最边界的点自动成为必败态。
观察这些点,(0,0),(1,2),(3,5),(4,7),(6,10),(8,13)。。。我们发现规律。两两之差是0,1,2,3,4,。。。我们将奇异局势表示为
(
a
k
,
b
k
)
(a_k,b_k)
(ak,bk),满足
a
k
+
k
=
b
k
a_k+k=b_k
ak+k=bk。(当然,(2,1),(5,3)。。也是奇异局势。这里仅考虑前者小于后者。)
现引入一个贝蒂定理:若正无理数
a
a
a、
b
b
b满足
1
a
+
1
b
=
1
\frac{1}{a}+\frac{1}{b}=1
a1+b1=1,则
P
=
{
[
a
n
]
,
n
∈
N
+
}
P=\{ [an],n\in N^+ \}
P={[an],n∈N+}和
Q
=
{
[
b
n
]
,
n
∈
N
+
}
Q=\{ [bn],n\in N^+\}
Q={[bn],n∈N+}构成
N
+
N^+
N+的划分。
贝蒂定理证明:
考虑用贝蒂定理表示奇异局势。那么同时满足
[
a
n
]
+
n
=
[
b
n
]
[an]+n=[bn]
[an]+n=[bn]。
[
a
n
]
+
n
=
[
a
n
+
n
]
=
[
(
a
+
1
)
n
]
=
[
b
n
]
[an]+n=[an+n]=[(a+1)n]=[bn]
[an]+n=[an+n]=[(a+1)n]=[bn],对于每个
n
n
n成立。
那么
a
+
1
=
b
a+1=b
a+1=b。代入
1
a
+
1
b
=
1
\frac{1}{a}+\frac{1}{b}=1
a1+b1=1可得
a
=
1
+
5
2
a=\frac{1+\sqrt{5}}{2}
a=21+5(黄金分割数)。
尼姆博弈 nim game
规则:有m堆石子,数量分别为
a
1
,
a
2
,
.
.
.
,
a
m
a_1,a_2,...,a_m
a1,a2,...,am。每次可以从一堆中取不限个。没有石子可取者败。
结论:尼姆和(异或和)为0则必败。(Bouton定理)
证明:
我们把游戏抽象为图问题。
(0,0,。。。,0)为无法转移的节点。
必败态为必然会转移到必胜态或自身无法转移(即不能转移到必败态)的节点。
必胜态为可以转移到必败态的节点。
首先(0,0,0,…,0)是必败态(无法转移的节点)。其异或和为0。
假设
(
a
1
,
a
2
,
.
.
.
,
a
m
)
(a_1,a_2,...,a_m)
(a1,a2,...,am)的异或和为
S
≠
0
S\neq 0
S=0。他可以一步走到异或和为0的状态。
而异或和为0的状态必然走到异或和不为0的状态。
如果证明上述,我们就证明了结论。
那么我们先证明
(
a
1
,
a
2
,
.
.
.
,
a
m
)
(a_1,a_2,...,a_m)
(a1,a2,...,am)的异或和
S
≠
0
S\neq 0
S=0的时候可以一步转移到异或和为0。找到
S
S
S最高位的1,
a
1
,
.
.
.
,
a
m
a_1,...,a_m
a1,...,am中必然有至少一个数在这一位有1。找到该数,这一位改为0,则
S
S
S的这一位就变为了
0
0
0。
S
S
S剩下的位中有1的地方,都可以用该数改位来转为0。即证。
接下来证明异或和为0的状态必然走到异或和不为0的状态。很显然。因为必然要改变一个数,肯定有至少一位的数字被改变。证毕。
SG函数
定义:
s
g
(
u
)
=
m
e
x
{
s
g
(
v
)
,
v
∈
c
h
i
l
d
(
u
)
}
sg(u)=mex\{sg(v),v\in child(u)\}
sg(u)=mex{sg(v),v∈child(u)}。
终节点为sg=0。
s
g
(
x
)
=
0
sg(x)=0
sg(x)=0的节点是必败态,否则是必胜态。
证明很直观,考虑
m
e
x
mex
mex的定义,即必败态只能走向必胜态,必胜态可以走向必败态。
求解复杂度:
n
m
nm
nm。(n为石子数量,m为一次最多可拿的石子数(即转移方式数量))