我正在尝试使用图论来编写抽象算法。
给定无向和未加权的图G =(V,E),两个顶点:m,n∈V和特定边e∈E。我想检查边e是否是m和n之间所有最短路径的一部分。
我的算法:
从m进行BFS扫描,直到达到n \\ O(V + E)
将边e返回到G. \\ O(1)
时间复杂度分析: O(V + E)
内存分析:临时和退出的额外O(2)。
你怎么说?这是正确的,还是你有更好的想法,时间复杂度更低?
答案 0 :(得分:1)
不会是O(V + E)。广度优先搜索中最糟糕的情况是搜索了每个边缘,此时如果未找到该节点,则搜索失败。这使得本节的复杂度为O(| E |),因为这是主导计算,所有其他O(1),复杂度为O(| E |)。
答案 1 :(得分:0)
您的算法似乎是正确的,并且确实会发现e
是否参与了所有未加权的最短路径。
<强>证明:强>
e
位于所有最短路径中 - &gt;删除e
将取消所有这一切
路径 - &gt;新的最短路径将比旧路径更长 - &gt;算法产生正确的答案。e
没有参与某个最短路径(让它为p
) - &gt;删除e
后,路径p
仍然存在,因此从m
到n
的最短距离保持不变 - &gt;算法得出正确的答案。然而,您的记忆分析是错误的。
对于访问集,BFS需要O(V)
额外空间 - 因此额外空间为O(V)