第一个博弈程序

甲乙两人在玩一个游戏:一堆小石子,共n个,每次每人可以从中取1个,或2个,或4个,甲先开始,最后取的那个人输(不管他去1个,还是2个,还是4个)。

但是呢,甲乙两个人都是智力超群的天才,他们总会使用对自己有利的策略。

问题:我们能否从一开始就知道谁必然赢?

可以这样考虑:如果只剩下1,2,3,4个石子时,轮到 x 取,我们可以推断出那个必然的赢家。

1 x 输
2 x 赢(x 取 1 个)
3 x 赢(x 取 2 个)
4 x 输(不管取 1,2,4 个都输)

我们给甲乙编号,甲为 0,乙为 1,可以得到如下递归程序

这个函数的确可以 Work,但是,直观上看,最坏情况下,时间复杂度是 O(3^n),当然,实际分析是小于这个数的,但仍然太大。有好的办法吗?

动态规划:

 

观察结果,我们会发现这样的模式:

1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 …

也就是说,如果 n % 3 == 1,则 乙(1)  赢,否则,甲(0) 赢,想想为什么?

作者:
该日志由 csdn-whinah 于2011年07月17日发表在算法分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
转载请注明: 第一个博弈程序
标签:
【上一篇】
【下一篇】

您可能感兴趣的文章:

发表评论

您必须 登录 后才能发表评论。