【发布时间】:2012-08-15 10:26:46
【问题描述】:
我在这里的书(人工智能一种现代方法)说,统一成本搜索算法的最坏情况时间和空间复杂度将是 O(b[C*/e]) ,其中 b 是分支因子,C* 是最优解的成本,每个动作的成本至少为 e。但是为什么会这样呢?
【问题讨论】:
标签: algorithm artificial-intelligence
我在这里的书(人工智能一种现代方法)说,统一成本搜索算法的最坏情况时间和空间复杂度将是 O(b[C*/e]) ,其中 b 是分支因子,C* 是最优解的成本,每个动作的成本至少为 e。但是为什么会这样呢?
【问题讨论】:
标签: algorithm artificial-intelligence
首先,复杂度是 O(B^(C/e)) [C/e 中的指数]。
要理解它,先想一个简单的例子:
设G=(V,E) 为图,分支因子为B。该图未加权(w(e) = 1 对应每个 e)。
考虑寻找从 S 到 T 的最短路径。
在这种情况下,算法实际上是一个BFS,它会发现路径中最长为SOL的所有节点,其中SOL是最短路径的长度,即是O(B^|SOL|)
对于一般情况 - 相同的想法成立,您需要发现所有节点的成本最高为 C。因此,您可以发现深度 C/e 的节点,从而为您提供 O(B^(C/e)) 需要探索的总节点。
指数因子是因为:第一级(根)有B^0=1个节点,第二级有B个节点。从这些中你发现B 节点,给你B^2, ....
编辑:
到目前为止错过了,但标题要求空间复杂度而不是时间复杂度。但是,答案保持不变,因为统一成本搜索为已访问的节点保存了一个 visited 集。由于您发现的每个节点也被添加到其中 - 答案仍然是O(B^(C/e))
【讨论】:
C/e? C 是目标的成本,e 是任何节点的最小成本。那么这背后的逻辑是什么。
C/e 是您需要遍历的最大可能深度。如果目标成本为C,并且每条边的成本至少为e,则每条路径中可以遍历的边总数最多为C/e
C*是从根节点遍历到目标节点的代价,还是从目标之前的节点遍历到目标节点的代价?
C*/e 表示在搜索过程中应该访问的平均节点数,对于访问每个节点,您应该查看所有可能的 b 分支(至少是根节点),因此您应该检查 b[C*/e] 节点在您的搜索中。这是您的搜索时间复杂度,这是假设每个节点上的过程需要 O(1)。
PS:最坏的情况是 Ω(b[C*/e])
【讨论】: