作为编程作业的一部分,我在Python 3中编写了一个函数ucs(G,v)
,它搜索具有加权边的有向图G
。 G
中的三个节点随机选择为目标节点,此功能的任务是应用统一成本搜索(即最便宜的第一次搜索)以从给定节点中找到最便宜的路径{ {1}}到其中一个目标节点。
我有两个问题:
实施是否正确?我怀疑当同一节点的多条路径被推送到优先级队列时,正在进行冗余检查。
如何根据| V |确定时间和空间的复杂程度和| E |?
我感谢任何建议,尤其是第二个问题。在| V |方面,我无法在网上任何地方找到UCS的复杂性和| E |。
这是我的实施:
v
答案 0 :(得分:1)
关于你的第一个问题:代码对我来说似乎很好。
关于你的第二个问题:
统一成本搜索不使用启发式功能(它是强力搜索)。如果所有边缘都有正成本,UCS最终将达到有限成本的目标。在这种情况下,如果存在到目标节点的有限路径,则UCS返回最佳路径。
- 其中 e 是每条边的最低费用, b 是分支因素, c 是费用。
因此,要发现最高成本 c 的所有节点,正确的算法必须生成深度为c/e
的所有节点。否则,可能会找到一个更好(更便宜)的解决方案。
因此,算法最差情况下的时间复杂度为(因为您在每个级别上按b
分支)
每个生成的节点都存储在 Open List 或 Close List 中,因此时间和空间复杂度实际上是相同的。这意味着空间复杂性也是。
UCS被视为内存限制,因为内存要求是指数级的。