在两个顶点之间的无向图中查找特定边

时间:2014-06-11 10:45:33

标签: algorithm graph graph-theory

我正在尝试使用图论来编写抽象算法。

给定无向和未加权的图G =(V,E),两个顶点:m,n∈V和特定边e∈E。我想检查边e是否是m和n之间所有最短路径的一部分。

我的算法:

  1. 从m进行BFS扫描,直到达到n。 \\ O(V + E)
  2. int temp< - d [n] \\ O(1)
  3. boolean ret \\ O(1)
  4. 从G. \\ O(1)
  5. 中取出边缘e
  6. 从m进行BFS扫描,直到达到n \\ O(V + E)

    • 如果d [n] =∞,则返回< - true
    • 如果d [n] == temp,ret< - false
    • 如果d [n]> temp,ret< - true
  7. 将边e返回到G. \\ O(1)

  8. return ret
  9. 时间复杂度分析: O(V + E)

    内存分析:临时和退出的额外O(2)。

    你怎么说?这是正确的,还是你有更好的想法,时间复杂度更低?

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仍然存在,因此从mn的最短距离保持不变 - &gt;算法得出正确的答案。

然而,您的记忆分析是错误的。

对于访问集,BFS需要O(V)额外空间 - 因此额外空间为O(V)