首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >素数塔博弈的最优策略

素数塔博弈的最优策略
EN

Stack Overflow用户
提问于 2018-12-01 20:16:08
回答 2查看 241关注 0票数 0

考虑以下游戏:

你有一个N个立方体的塔。每一回合,玩家只能从塔上取素数,或方格数的幂。胜利者是最后一个玩游戏的玩家,意思是最后一个获得立方体的素数(或素数的幂)的玩家,而没有剩下的立方体了。

备注:

1)每个回合的运行时间必须是最小的。

2)转弯次数没有限制。

目标:

( a)找一个算法来赢得这场比赛,并且在只有一个塔的情况下,确定我们是否需要成为第一个或第二个玩家。

( b)和a一样,但是现在我们有两个不同数量的立方体的塔。

示例:如果我们有数字N=6,如果我们先播放:

我们可以拿下1,但是2-2将获得5胜

我们可以得到2,但玩家-2将获得4和赢(2是素数和2的幂)

我们可以拿下3,但是2号球员将获得3胜。

我们可以赢4,但是2-2会赢。

我们可以赢5,但是2号球员会赢。

因此,在这种情况下,算法应该确定我们必须第二次播放,在这种特殊情况下,我们可以选择丢弃任意数量的立方体。

EN

回答 2

Stack Overflow用户

发布于 2018-12-01 21:14:35

多堆游戏是一个有限的加法游戏,每个塔都是一个独立的游戏,人们可以选择下一个游戏,并保证游戏在有限的步骤中结束,并有一个清晰的胜利者。所有的加法游戏都可以减少到尼姆

具体来说,立即输掉的nim得分是0,立即获胜的是1,否则一个n大小的塔有一个最小的可能的nim得分,你不能一步一步地达到,如果可能的话,nim的分数是从0, 1, 2, ...中提取出来的。

这使得我们可以递归地计算单个塔的nim分数。获胜的策略是总是给对方一个分数的0,最终你会让他们输掉的。请注意,如果给您的职位的nim分数大于0,则始终可以找到给对方一个0分数的移动(如果没有办法获得0,那么nim的得分将是0)。所以,如果你得到了一个0分数的职位,而另一个人打得正确,那么你总是会得到一个分数的0,最终我们会输掉的。

下面是关于加性游戏的基本结果。如果您可以计算每个多个塔的nim分数,则组合的nim分数只是单个nim分数的xor

下面是尼姆的第一个分数。

代码语言:javascript
运行
复制
0:  0 (you just lost)
1:  1 (nim(1-1) = 0)
2:  2 (nim(2-2) = 0, nim(2-1) = 1)
3:  3 (nim(3-3) = 0, nim(3-2) = 1, nim(3-1) = 2)
4:  4 (nim(4-4) = 0, nim(4-3) = 1, nim(4-2) = 2, nim(4-1) = 3)
5:  5 (nim(5-5) = 0, nim(5-4) = 1, nim(5-3) = 2, nim(5-2) = 3, nim(5-1) = 4)
6:  0 (can't get 0)
7:  1 (nim(7-7) = 0)
8:  2 (nim(8-8) = 0, nim(8-7) = 1)
9:  3 (nim(9-9) = 0, nim(9-8) = 1, nim(9-7) = 2)
10: 4 (nim(10 - 4) = 0, nim(10-9) = 2, nim(10-8) = 2, nim(10-7) = 3)

诸若此类。这是很容易计算的递归。记住,它将是O(n**2 / log(n)) (对于每个n数,在所有O(n / log(n))可能的移动之后,构造可以到达的nim值集,然后开始计算从0到不超过O(n / log(n))可能值之后,您发现第一个值是无法实现的)。

要想真正发挥它,你不仅应该存储塔的尼姆分数,还应该查找如何从它得到更好的尼姆值。在一个单一的塔式版本,这让你立即知道如何发挥。在多塔版本中,它稍微复杂一些。当你得到一个有非零尼姆分数的位置时,你应该去找一个塔,它的尼姆得分在得分的领先二进制数中是1。你想和那座塔一起移动,让它的新的尼姆得分成为其他塔的xor。这个新的分数将总是小于它现在的尼姆分数,因此你将能够作出移动,并退回一个0分。

票数 3
EN

Stack Overflow用户

发布于 2018-12-06 12:31:17

我找到了另一种解决方案--你需要始终保持塔中的数字是模6等于0,这样竞争对手就不能获得立方体的素数(或素数的幂)。

对于两个塔,你需要两个塔都是同样的模组,这意味着它们两个模块6必须是相同的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53574682

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档