Time complexity 棋类将死算法复杂度

Time complexity 棋类将死算法复杂度,time-complexity,graph-algorithm,Time Complexity,Graph Algorithm,我想知道用大O表示法确定国际象棋将死的图形搜索算法的复杂度是多少。。第一步有16种可能,仅兵一种,骑士一种有4种,第二部电影也有同样的可能。在这之后,可能性列表增长到一个无法计算的水平 世界上最好的象棋引擎使用“最可能”的图形搜索 这篇维基百科文章非常有用: “Allis还估计博弈树的复杂度至少为10123,”基于平均分支因子35和平均博弈长度80。作为比较,可观测宇宙中的原子数(经常与之比较)估计在4×1079和1081之间。”国王最多有八步。而且每次移动后都要花一定的时间来验证国王是否受到威

我想知道用大O表示法确定国际象棋将死的图形搜索算法的复杂度是多少。

。第一步有16种可能,仅兵一种,骑士一种有4种,第二部电影也有同样的可能。在这之后,可能性列表增长到一个无法计算的水平

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

这篇维基百科文章非常有用:


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

国王最多有八步。而且每次移动后都要花一定的时间来验证国王是否受到威胁。再加上king原地不动(另一块移动)的情况。所以它是恒定时间。

如果您只想检查给定的棋盘是否包含将死,那么您可以执行以下操作:

  • 确定你的国王可以移动到的(国王)方格集(8个方向-你自己的棋子占据的场地-场地边界)
  • 迭代所有敌人棋子并确定他们攻击的方块。如果这些方块中有任何一个在你的组队中,就把它们移除。保留一个布尔值以指示您的国王是否受到攻击
  • 如果你的王牌组变空,国王受到攻击,将其将死
  • 片数确实起作用,因此,如果你有一个任意大小的板,有n片,这是很重要的。在这种情况下,瓶颈将是检查所有棋子是否攻击某个位置,因为另一个棋子可能会阻止攻击。一个简单的实现可以在二次时间内完成。
    通过保持棋子在一个集合中的位置,并针对add()和contains()对其进行优化,您可以将其降到n中的线性(尽管棋盘的大小也会影响这一点),因此我认为线性复杂度是可行的。

    答案是该算法将解决剩余棋子(n)的所有可能移动。因为它只经过每一个片段一次,复杂性是O(N)(线性)。

    这是否意味着O(1)?它会不会因棋盘上还有多少棋子而有所不同?