【问题标题】:Time Complexity of Uniform Cost Search (Including Min Priority Queue)统一成本搜索的时间复杂度(包括最小优先级队列)
【发布时间】:2021-10-21 21:10:58
【问题描述】:

在大多数教科书中,UCS 最坏情况运行时间的渐近上限定义为 O(b(1 + C / ε))。详细说明在这里:Time complexity of Uniform-cost search

O(b(1 + C / ε)) 反映了 UCS 在找到特定目标状态之前必须探索的状态总数的上限。通常所有这些状态都存储和维护在一个最小优先级队列(边界)中。

我想知道为什么在定义 UCS 的时间复杂度时没有明确考虑维护最小优先级队列的开销。让我们定义 n = b(1 + C / ε)。那么不应该是运行时间O(nlgn)吗?

为什么没有明确包含 lgn?是因为我们在关注渐近行为时可以忽略它吗?

【问题讨论】:

    标签: algorithm search time-complexity artificial-intelligence big-o


    【解决方案1】:

    这里的“问题”实际上与算法无关,而是 CS 的不同子字段对事物使用不同的名称(有时对不同的事物使用相同的名称)。这完全是不同定义的情况。

    “统一成本搜索”是 Dijkstra 算法变体的另一个名称,通常用于基础图可能是无限的 AI 上下文中。正如您所提到的,您提供的链接和该链接中的 AI 教科书计算出 UCS 探索了 O(b^(1 + C / ε)) 节点,这是正确的。然而,算法在计算机上执行的基本操作的数量(这是计算复杂性理论中使用的常用度量)将包括一个对数因子来处理优先级队列操作。如果您通过基本运算来测量运行时间,log n 因子绝对不能在渐近法中被忽略。

    由于您引用的教科书是 AI 教科书,因此仅顺便提及了优先级队列,因为重点不在于数据结构及其运行时的各种实现。他们指出,在比较算法的时间复杂度时,他们只计算探索的状态数量,因为这是教科书的重点。另一方面,“算法简介”教科书中的处理方法将讨论实现和斐波那契堆,并使用不同的时间复杂度度量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-12
      • 2018-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-28
      相关资源
      最近更新 更多