问题
一个简单的双人游戏涉及一堆N个火柴棍和两个 交替转弯的球员。在每个回合中,玩家移除1, 桩上有2或3个火柴。删除最后一个的玩家 火柴棒输掉比赛。
A)游戏树的分支因素和深度是什么(给出以N表示的一般解决方案)?搜索量有多大 空间?
B)游戏中有多少独特状态?对于大N,可以做些什么来提高搜索效率?
答案
A)我说分支因子是3,但我证明了这一点,因为玩家最多只能删除3个匹配,这意味着我们的树通常会有3个孩子。关于深度的第二部分,我不确定。
B) N x 2其中N是剩余的匹配数。我不确定如何让搜索更有效率呢?也许引入Alpha-beta修剪?
答案 0 :(得分:1)
任何时候的比赛状态都可以通过轮流和每个球员保持的比赛次数来描述。在n个移动之后有3 ^ n个可能的历史,但是对于大n,少于3 ^ n个可能的状态,所以你可以节省时间,例如,通过识别你将要遇到你已经遇到的状态和为之前制定了一个价值。
另见https://en.wikipedia.org/wiki/Nim - 如果这是Nim,或者是各种Nim,那么已经有了有效的策略。
答案 1 :(得分:1)
答: 对于深度,想象一下最长的游戏会是什么样子。这是由两个玩家组成的游戏,每回合只能移除1个匹配。由于有n个匹配,这样的游戏将需要n个转弯:树具有深度n。
B:
只有2 * N个状态,每个状态可从3个较高火柴杆数的状态访问。由于随着游戏的进行,匹配数量必然下降,因此可能状态的图形是DAG(有向无环图)。因此,动态编程方法可以分析该游戏。最后,您会看到最佳移动仅取决于N mod 4
,其中N是剩余匹配数。
编辑:N mod 4
的证明:
每个职位都是失败或获胜的职位。失败的位置是这样一种情况,无论你玩什么,如果你的对手发挥出最佳状态,你就会失败。同样,获胜位置是指如果你发挥正确的动作,对手就无法获胜。 N = 1是失败位置(根据游戏的定义)。因此,N = 2,3,4是获胜位置,因为通过删除适当数量的比赛,你将对手置于失败位置。 N = 5是一个失败的位置,因为无论你删除的比赛允许的数量是多少,你都将对手置于胜利位置。 N = 6,7,8是获胜位置......你明白了。
现在只是让这个证明正式化:假设一个位置N
是一个失败的位置,当且仅当N mod 4 = 1
。如果在某个整数k
之前为真,则可以证明k+1
为真。如前所述,k = 4
为真。通过重复,任何N
都是如此。