无偏博弈是指这样一种游戏:游戏双方共用棋子,游戏过程没有随机变化,一定会结束在其中一方胜利。 根据结束状态反推,可以用数学归纳法来证明,这类游戏一定可以确认每个游戏状态是必胜还是必败的。
我们可以构造一种必胜方法,在游戏进行过程中,保证每一步都停留在必胜状态上面。 可以根据游戏状态维护一个特殊值,每当这个特殊值不为0的时候,都可以把状态转换到特殊值是0的状态。 然后游戏一定结束在特殊值是0的状态,如果这个状态是必胜态,那么这种方法一定必胜。 如果双方都采用这种方法,失去机会维护这个状态的玩家必败。
这个状态我们叫grundy值。构造的算法采用递归。首先获取这个状态可以走到的所有状态的grundy值, 然后取不属于这些值的最小非负数整数。 假设状态K的grundy值是n,那么K一定可以转换到grundy值是n-1, n-2, …, 0的状态。 证明通过反证法:如果有一个状态t<n不能转换,那么n<=t,产生矛盾。
有了grundy值,之后通过维护grundy值来保证转换到必胜态就好了。 实际做题,通过动态规划来计算一个状态的grundy值,然后通过这个值知道当前状态必胜还是必败。 状态有的时候会非常多,需要寻找规律,把状态合并起来。
学习资料应用:《挑战程序设计竞赛》中游戏博弈部分