博弈(入门)个人心得

博弈(入门)个人心得

关键词:必败态,异或

我们先看下这张图

┏→ 一定 →┓

必败态          胜态

┗← 可能 ←┛

以下象棋为例,说明上面图示所表示的含义。假如你和一个人在对弈并处于这样一种局面:你已经将了对方的军,轮到对手走棋,对手无论如何都无法补救。这种局面对与该走棋的对手来说就是必败的,就是必败态, 对应上面的图来看,就是对于对手来说的“必败态”,无论他怎样走都“必定”会到发展为对我方有利的局面。

对于对手来说是必败的,那对于自己是不是必胜的呢?答案是否定的,你虽然将军,但并不是怎么走都会赢,也就是说,当你面临这种局面时,须按照一定的方法才会赢,否则对手有可能反败为胜。对应上面的图,对于我方的所谓的“胜态”局面,必须按照一定的策略才会让对手陷于必败的局面,如此循环。

对于博弈类的入门题目,个人觉得就是找到必败态。我们以集合的观点把所有的局面分为两类,一类是必败态集合,另一类是胜态集合。所谓必败态,就是一种局面,一种状态,当对手面临这种局面时,任何符合规则的走法都必然会导致局面变成胜态集合中的元素。我们按照一定的策略把局面再变为必败态集合的元素,对手又被迫使局面变为胜态集合的元素,这样反复循环直到最后一次我们把局面变为结束局面(结束局面也是必败态集合的元素)。这样我们就可以保证,只要对手一开始面临的是必败态集合中的元素,对手必定会输。当然,我们面临必败态的话,也是会输的,因为博弈要求每个选手都按最好的策略走,且对于每个局面,合法的移动集合只取决于这个局面本身,不取决于轮到哪名选手操作。

把图用文字描述就是以下两条:
1.若面临必败态,则任何走法都会导致局面变为胜态
2.若面临胜态,按照一定策略可使局面变为必败态

我们看下例题:------(m堆)石子游戏http://acm.hdu.edu.cn/showproblem.php?pid=2176
这一题要用异或运算,这一点在焦祺师兄的《关于博弈(入门)_焦祺》已经说明,但为什么会想到用异或运算呢?当然是异或运算与必败态的互相转换有着相似之处:
1.XOR(m1,m2,……,mn)==0,则改动任何一个数都会导致XOR(m1,m2,……,mn)!=0
2.XOR(m1,m2,……,mn)!=0,则一定存在改动一个数使XOR(m1,m2,……,mn)==0的策略

┏→ 一定 →┓

XOR==0        XOR!=0

┗← 可能 ←┛

我们可以看到,异或运算与必败态之间有着巧妙的联系。当然,上面两条的正确性是可以证明的,绝不是无中生有。

第一条比较好理解,n个数异或=0,把n个数变作2进制来看,改变任何一个二进制数上的任何一个位置,都会使这个位置所在列的1的个数的奇偶发生改变,从而导致异或!=0

第二条,设a^b^c^d=e(e不等于0),两边同时异或e,则有a^b^c^(d^e)=e^e=0,若d^e小于d,则可以通过把d个石子的一堆取走剩下d^e个使异或=0,否则e与其他数结合。不过好像没有证明a,b,c,d中一定有一个数与e异或小于他自身,这个暂时没想到,希望大家也想想看,讨论一下

posted @ 2009-03-13 14:54  Record drip  阅读(314)  评论(0编辑  收藏  举报