国际象棋检查算法复杂性

时间:2012-09-20 03:27:52

标签: time-complexity graph-algorithm

我想知道图搜索算法的复杂性是用于确定Big O表示法中国际象棋的一个将死。

4 个答案:

答案 0 :(得分:2)

每边8个。第一步有单独的棋子有16种可能性,骑士有另外4种,第二部电影有相同的数量。在此之后,可能性列表将增长到不可计算的水平。

世界上最好的国际象棋引擎使用“最可能的”图搜索。

这篇维基百科文章非常实用:http://en.wikipedia.org/wiki/Game_complexity

“Allis还估计游戏树复杂度至少为10123,”基于平均分支因子35和平均游戏长度80“。作为比较,可观察宇宙中的原子数,它经常被比较,估计在4×1079和1081之间。“

答案 1 :(得分:0)

国王最多有八个动作。并且需要花费一些时间来验证国王在每次移动后是否受到威胁。加上国王留下来的情况(和另一件移动)。所以这是恒定的时间。

答案 2 :(得分:0)

如果你只是想检查一个给定的棋盘是否包含一个将死,那么你可以这样做:

  1. 确定你的国王可以移动到的(王)方块组(8个方向 - 你自己的棋子所占据的领域 - 田野的边界)
  2. 迭代所有敌人的棋子并确定他们攻击的方格。如果这些方块中有任何一个在你的王牌中,请删除它们。保持一个布尔值来表明你的国王是否受到攻击。
  3. 将军,如果你的王牌空了,国王受到攻击
  4. 件数确实起作用,所以如果你有一个任意大小的板子有n件,那就很重要了。在这种情况下,瓶颈将是检查所有碎片,如果他们攻击一个位置,因为另一件可以阻止攻击。一个简单的实现可以在二次时间内完成。 通过将片段的位置保持在一组中并对add()和contains()进行优化,你可以将其降低到n的线性(尽管电路板的大小也会影响这一点)所以我猜线性复杂度是可行的。

答案 3 :(得分:0)

答案是算法将通过剩余的棋子(N)解决所有可能的移动。因为一旦复杂度为O(N)(线性),它只通过每个部分。