统一成本搜索及其时间/空间复杂性

时间:2017-05-23 21:28:33

标签: python algorithm search graph graph-algorithm

作为编程作业的一部分,我在Python 3中编写了一个函数ucs(G,v),它搜索具有加权边的有向图GG中的三个节点随机选择为目标节点,此功能的任务是应用统一成本搜索(即最便宜的第一次搜索)以从给定节点中找到最便宜的路径{ {1}}到其中一个目标节点。

我有两个问题:

  • 实施是否正确?我怀疑当同一节点的多条路径被推送到优先级队列时,正在进行冗余检查。

  • 如何根据| V |确定时间和空间的复杂程度和| E |?

我感谢任何建议,尤其是第二个问题。在| V |方面,我无法在网上任何地方找到UCS的复杂性和| E |。

这是我的实施:

v

1 个答案:

答案 0 :(得分:1)

关于你的第一个问题:代码对我来说似乎很好。

关于你的第二个问题:

统一成本搜索不使用启发式功能(它是强力搜索)。如果所有边缘都有正成本,UCS最终将达到有限成本的目标。在这种情况下,如果存在到目标节点的有限路径,则UCS返回最佳路径。

时间复杂度

time complexity - 其中 e 是每条边的最低费用, b 是分支因素, c 费用。 因此,要发现最高成本 c 的所有节点,正确的算法必须生成深度为c/e的所有节点。否则,可能会找到一个更好(更便宜)的解决方案。 因此,算法最差情况下的时间复杂度为time complexity(因为您在每个级别上按b分支)

空间复杂性

每个生成的节点都存储在 Open List Close List 中,因此时间和空间复杂度实际上是相同的。这意味着空间复杂性也是space complexity

限制

UCS被视为内存限制,因为内存要求是指数级的。