我需要帮助了解如何以递送方式创建游戏树,例如带走游戏的NIM。一旦我创建了树,我应该在树上使用非制导搜索来确定导致获胜的不同移动的概率以及我当前状态获胜的概率。我正在使用java进行项目,但我主要是在寻找抽象的解决方案。必须有一些方法来使用递归和memoization来有效地构建这棵树,但是我已经碰壁了,任何想法对我都有很大的帮助!
问题: 考虑一个简单的游戏,由2个玩家组成的一系列n个令牌组成。球员轮流转换。每个玩家必须至少使用一个令牌,并且最多只能获得n / 2(分数向下舍入)。获取最后一个令牌的玩家将失去
输出:对于从1到500的n的所有值,说明玩家“在移动中”获胜的概率,即 他们应该选择哪些代币来最大化他们获胜的机会,以及获胜的可能性 如果获得该号码,则获胜。
我想避免使用硬编码解决方案,但我从试错中知道给对手一个等于(2 ^ n)-1的令牌计数是一个理想的举动,但我希望能够从评估游戏树。 我已经对NIM树的最小 - 最大方法做了一些研究,但我不确定这是否真的有助于我确定获胜的可能性或者只是最好的举动。 有什么想法吗?