博弈论
一、巴什博弈
一堆物品有n个,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个。最后取光者得胜。
解: 显然,如果n=m+1,那么由于一次最多只能取m个,所以,无论先取者拿走多少个,后取者都能够一次拿走剩余的物品,后者取胜。因此我们发现了如何取胜的法则:如n=(m+1)r+s ,(r为任意自然数,s≤m),那么先取者要拿走s个物品,如果后取者拿走k(≤m)个,那么先取者再拿走m+1-k个,结果剩下(m+1)(r-1)个,以后保持这样的取法,那么先取者肯定获胜。总之,要保持给对手留下(m+1)的倍数,就能最后获胜。
参考:https://baike.baidu.com/item/巴什博弈/1819345?fr=aladdin
二、SG定理
Winning state:胜态
Losing state:败态
1.terminal states=L state, S=terminal state ⇒ S=L 终态=败态
2.∃move, S->L ⇒ S=W 存在一个移动,能到达败态,的状态是胜态
3.∀move, S->W ⇒ S=L 对所有移动,都会到达胜态,的状态是败态
题:A和B轮流搬砖,每次只能搬2或3块转,没有砖搬的输,A先搬,共n块砖,问谁能赢.
解:A的状态
n | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | … |
---|---|---|---|---|---|---|---|---|---|---|---|
S | L | L | W | W | W | L | L | W | W | W | … |
mex{list}=不在集合中的最小非负整数 | |||||||||||
SG(n)=mex{SG(可到达的n)}=⊕SG(可到达的n) | |||||||||||
SG=0 ⇒ S=L |
SG(0)=mex{}=0
SG(1)=mex{}=0
SG(2)=mex{SG(0)}=mex{0}=1
SG(3)=mex{SG(0),SG(1)}=mex{0,0}=1
SG(4)=mex{SG(1),SG(2)}=mex{0,1}=2
SG(5)=mex{SG(2),SG(3)}=mex{1,1}=0
SG(6)=mex{SG(3),SG(4)}=mex{1,2}=0
SG(7)=mex{SG(4),SG(5)}=mex{2,0}=1
SG(8)=mex{SG(5),SG(6)}=mex{0,0}=1
SG(9)=mex{SG(6),SG(7)}=mex{0,1}=2
三、Nim游戏
Alice与Bob总是在进行各种各样的比试,今天他们在玩一个取石子的游戏。 在这个游戏中,Alice和Bob放置了N堆不同的石子,编号1..N,第i堆中有Ai个石子。 每一次行动,Alice和Bob可以选择从一堆石子中取出任意数量的石子。至少取1颗,至多取出这一堆剩下的所有石子。 Alice和Bob轮流行动,取走最后一个石子的人获得胜利。 假设每一轮游戏都是Alice先行动,请你判断在给定的情况下,如果双方都足够聪明,谁会获得胜利?
解:
第i堆石子的SG函数:
SG(0)=mex{}=0
SG(1)=mex{SG(0)}=mex{0}=1
SG(2)=mex{SG(0),SG(1)}=mex{0,1}=2
……
SG(ai)=mex{SG(0),……,SG(ai-1)}=mex{0,1,……,ai-1}=ai
所有堆的SG函数:SG=SG(a0)⊕SG(a1)⊕……⊕SG(an)