zoukankan      html  css  js  c++  java
  • 博弈论

    一、巴什博弈

    一堆物品有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)

  • 相关阅读:
    i++与++i的区别和使用
    C++中函数返回引用
    ASP.NET金课设计(四)
    ASP.NET金课设计(三)
    ASP.NET金课设计(二)
    ASP.NET金课--课程大纲
    使用PagerTemplate实现GridView分页
    后台模块--订单管理
    前台模块--首页
    后台模块--公告管理
  • 原文地址:https://www.cnblogs.com/holaworld/p/12399173.html
Copyright © 2011-2022 走看看