【问题标题】:Time complexity of Uniform-cost search统一成本搜索的时间复杂度
【发布时间】:2024-04-27 13:50:02
【问题描述】:

我正在阅读人工智能:一种现代方法一书。我偶然看到这句话描述了统一成本搜索的时间复杂度:

统一成本搜索由路径成本而非深度指导,因此它的 复杂性不容易用 b 和 d 来表征。反而, 令 C 为最优解的成本,并假设每个 行动成本至少为 ε。那么算法的最坏情况时间和 空间复杂度为O(b^(1+C/ε)),可以远大于b^d。

据我了解,C 是最优解的成本,每个动作的成本至少为 ε,因此 C/ε 就是到达目的地的步数。但是不知道复杂度是怎么推导出来的。

【问题讨论】:

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


    【解决方案1】:

    templatetypedef 的回答有些不正确。 +1 与起始深度为 0 无关。如果每一步成本至少为 ε > 0,最优解的成本为 C,则最优解的最大深度出现在 floor(C /ε)。但最坏情况的时间/空间复杂度实际上是 O(b(1+floor(C/ε))。+1 的出现是因为在 UCS 中,我们只检查一个节点是否是目标我们选择它进行扩展,而不是在我们生成它时(这是为了确保最优性)。所以在最坏的情况下,我们可能会生成目标节点驻留级别之后的整个节点级别(这解释了+1) . 相比之下,BFS 在生成节点时应用了目标测试,因此没有对应的 +1 因子。这是他错过的一个非常重要的点。

    【讨论】:

    • 你也有点不对。在最坏的情况下,我们生成目标节点级别的所有节点。这是在 floor(C / ε) + 1 处。我们无法检查楼层 floor(C / ε) 的目标,因为我们不知道下一步会选择目标状态来展开。
    • @LearningMath 你到底在说什么答案不正确?似乎您只是在重申答案的含义,即 +1 发生是因为目标节点级别之后的所有节点都可能在算法终止之前生成。
    【解决方案2】:

    如果分支因子为b,那么每次展开一个节点,就会遇到k个以上的节点。因此,有

    • 0 级 1 个节点,
    • b 级节点,
    • b2 2 级节点,
    • b3 3 级节点,
    • ...
    • bk 层 k 的节点。

    所以让我们假设搜索在您达到 k 级后停止。发生这种情况时,您将访问的节点总数将是

    1 + b + b2 + ... + bk = (bk+1 - 1) / (b - 1)

    等式来自几何级数的总和。恰好是 bk+1 / (b - 1) = O(bk) 的情况,所以如果你的目标节点在第 k 层,那么你必须展开 O(bk) 个节点才能找到你想要的那个。

    如果 C 是您的目标成本,并且每一步都使您 ε 更接近目标,则您需要走的步数由 C / ε + 1 给出。+1 的原因是您从距离 0 开始并在 C / ε 处结束,因此您可以在距离处采取措施

    0, ε, 2ε, 3ε, ..., (C / ε)ε

    这里总共有 1 + C / ε 步。因此,有 1 + C / ε 层,因此您需要扩展的状态总数为 O(b(1 + C / ε))。

    希望这会有所帮助!

    【讨论】:

    • 感谢您的回复。我不明白的一件事是每个级别扩展的节点数量,因为对于统一成本搜索,每个级别的节点可能没有完全扩展,可能只有其中一些被扩展。它更像是一种广度优先搜索,将扩展每个级别中的所有节点。
    • @photosynthesis- 是的。但是,在 UCS 中,在展开距离为 ke 的层中的所有节点之前,您不会展开距离为 (k+1)e 的层中的任何节点。这有意义吗?
    • 如果有一个 5 层的图,每个层的分支因子为 3。存在从根到目标的路径,所有成本为 1,因此总成本为 5。同时时间,除目标路径之外的所有其他路径的成本均为 100。所以对于这里的UCS,它总是会扩展“目标路径”,因为从根到目标,每增加一次,那条路径的总值总是低于其他路径。所以我认为对于UCS来说,它不会完全扩展每一层的节点。那是对的吗?谢谢!
    • @photosynthesis- 是的,没错。根据您的问题描述,我认为您说每个操作都完全 epsilon 而不是至少 epsilon,尽管重读它我意识到情况并非如此。但是,从最坏情况的角度来看,分析是正确的。
    • @templatetypedef 我认为你的回答有点不正确。