博弈论一

1.必胜必败态介绍#

假设存在一个游戏,游戏双方通过一定相同的策略进行游戏(假设都选择最优策略),直到一方无法进行游戏时被判定为失败。例如:有一堆硬币m个,两个游戏者tom和bob轮流从中取出ai个硬币,共有n个ai。

m = 21,n = 3
a = {1, 3 ,5}

这类游戏存在必败状态和必胜状态,必败状态是指不管在当前状态下游戏者如何选择策略,都必然在对手选择最优策略时候会输。必胜状态为在当前状态下游戏者一定有一种策略将下一轮游戏状态变成必败状态。
如上所示的游戏中,1,3,5都是必胜状态,因为假设当前轮到tom取硬币,状态为5个硬币,则tom可以一次取走5个硬币,bob就输了,所以tom的当前状态可以将下一轮游戏转入必败态所以只要tom选取最优策略必然获胜,1、3同理;而2,4都是必败状态,因为假设当前轮到bob取硬币,状态为4个硬币,则bob可以选择取走3枚硬币,进入状态1而tom进入必胜态,bob输。bob如果取走1枚硬币进入状态3而tom又进入必胜态,bob输。bob并没有其它选择可取,所以bob不论选择什么策略都是输。
从上面的例子可以看出这类游戏只有两种状态:必胜态和必败态。必胜态是通过某一种次策略的选取可以使对手到达必败态的状态,必败态是不论在当前状态怎么选择都将使对手进入必胜态的状态

2.Nim游戏#

假设此时有N堆石子,每堆石子中有ai个石子,tom和bob可以轮流从任意一堆石子中取出一枚以上的石子。取出最后一个石子的游戏者获胜。

n = 2
a = {3, 3}

这个问题看起来比较复杂,状态比较多,需要搜索很多状态的转移是否进入必败态和是进入必胜态。举几个例子:首先(3,3)的子局面(也就是通过合法移动可以导致的局面)有(0,3)(1,3)(2,3)(显然交换石子堆的位置不影响其性质,所以把(x,y)和(y,x)看成同一种局面),只需要计算出这三种局面的性质就可以了。 (0,3)的子局面有(0,0)、(0,1)、(0,2),其中(0,0)显然是必败态,所以(0,3)是必胜态(只要找到一个是必败态的子局面就能说明是必胜态)。(1,3)的后继中(1,1)是必败态(因为(1,1)的唯一子局面(0,1)是必胜态),所以(1,3)也是必胜态。同样可以证明(2,3)是必胜态。所以(3,3)的所有子局面都是必胜态,它就是必败态。通过一点简单的数学归纳,可以严格的证明“有两堆石子时的局面是必败态当且仅当这两堆石子的数目相等”。如果当前状态是3堆或者更多石子就比容易分析了。但是可以通过递归程序计算每个状态的属性,记忆化搜索可以加快效率,但是时间复杂度仍然高达O(a1a2···an)。
更快的计算方法,首先说结论:
对于一个Nim游戏的局面(a1,a2,...,an),它是必败态当且仅当a1a2...an=0,其中表示位异或(xor)运算。
对于一个Nim游戏的局面(a1,a2,...,an),它是必胜态当且仅当a1a2...an!=0,其中表示位异或(xor)运算。
下面给出证明:
对于某个局面(a1,a2,...,an),若a1a2...an!=0,一定存在某个合法的移动,将ai改变成ai'后满足a1a2...ai'...an=0。不妨设a1a2...an=k,则一定存在某个ai,它的二进制表示在k的最高位上是1(否则k的最高位那个1是怎么得到的)。这时aik<ai一定成立(意味着可以取走ai-(aik)枚硬币)。则我们可以将ai改变成ai'=aik,此时a1a2...ai'...an=a1a2...an^k=0。
对于某个局面(a1,a2,...,an),若a1a2...an=0,一定不存在某个合法的移动,将ai改变成ai'后满足a1a2...ai'...an=0。因为异或运算满足消去率,由a1a2...an=a1a2...ai'...an可以得到ai=ai'。所以将ai改变成ai'不是一个合法的移动。证毕。

void solve(int A,int N){
  int x = 0;
  for(int i=0;i<N;i++)x^=A[i];
  if (x!=0)cout<<"tom";
  else cout<<"bob";
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容

  • 3.感受数学# 上一期的文章里我们仔细研究了Nim游戏,并且了解了找出必胜策略的方法。但如果把Nim的规则略加改变...
    tdeblog阅读 419评论 0 0
  • @synthesize和@dynamic分别有什么作用?@property有两个对应的词,一个是 @synthes...
    笔笔请求阅读 507评论 0 1
  • 对于hdu3032题描述如下: Sample Input 232 2 323 3 Sample Out...
    sugar_coated阅读 559评论 0 1
  • 长夜漫漫,诸君陪我再醉一回。 夜茫茫,人心似海。 我愿人间少些套路,多些情怀。 愿诸君陪我再醉一回,体验人...
    Zero丶天煞阅读 106评论 0 1
  • [转]人人都是程序员—自动编程软件在德国浮出水面 2006-12-19阅读4413 评论1 CT公司对外公布最新研...
    张军标阅读 1,352评论 1 50