小智 9

我将假设您正在参考AC-3一致性算法.这个算法在这里很好地简单描述.我将参考这个算法的解释.

首先,让我们计算方法的复杂性REVISE(方法修改两个域之间的一个弧).对于一个域中的每个值,它正在检查第二个域的所有值.因此,在复杂REVISE的方法将是d 2哪里d is maximum domain size.

现在,最坏的情况下会被REVISE召唤多少次?最初,队列中存在所有弧.每次REVISE调用时,都会从队列中删除一个弧.这将是该方法的调用.但我们也将弧线添加回队列.我们能做多少次?好吧,只有当弧从指向的域中删除一个值时,我们才会将弧添加回队列.一个弧指向一个域,因此我们只能将其添加为该域中值的数量.所以在最坏的情况下,我们将每个弧添加回队列d次.

REVISE在最大e + ed次调用e is number of arcs.

当我们把它们放在一起时,我们发现整个算法的复杂性是O((e + ed)d 2),即O(ed 3).

  • 非常完整的答案!很多时候,这也被写为 O(n^2 d^3),用 n 而不是 e 来表示。 (2认同)