【问题标题】:Finding a specific edge in an undirected graph between two vertices在两个顶点之间的无向图中查找特定边
【发布时间】:2014-06-11 10:45:33
【问题描述】:

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

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

我的算法:

  1. 从 m 开始执行 BFS 扫描,直到到达 n。 \\O(V+E)
  2. int temp
  3. 布尔 ret \\ O(1)
  4. 从 G 中取出边 e。\\O(1)
  5. 从 m 开始 BFS 扫描直到到达 n \\ O(V+E)

    • 如果 d[n] = ∞, ret
    • 如果 d[n] == temp, ret
    • 如果 d[n] > temp, ret
  6. 将边 e 返回到 G.\\O(1)

  7. 返回 ret

时间复杂度分析: O(V+E)

内存分析: temp 和 ret 额外的 O(2)。

你说什么?它是正确的,还是您有一个时间复杂度更低的更好主意?

【问题讨论】:

    标签: algorithm graph graph-theory


    【解决方案1】:

    不会是 O(V+E)。广度优先搜索中最坏的情况是每条边都已搜索完毕,此时如果尚未找到节点,则搜索失败。这使得这部分的复杂度为 O(|E|),因为这是主要的计算,所有其他的 O(1),复杂度为 O(|E|)。

    【讨论】:

      【解决方案2】:

      您的算法似乎是正确的,并且确实会发现 e 是否参与了所有未加权最短路径。

      证明:

      • 如果e 在所有最短路径中-> 删除e 将否定这一切 路径 -> 新的最短路径将比旧路径更长 -> 算法得出正确答案。
      • 如果e 没有参与某个最短路径(让它成为p)-> 通过删除e,路径p 仍然存在,因此从mn 的最短距离保持不变 -> 算法得出正确答案。

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

      BFS 需要 O(V) 额外空间,用于访问集 - 所以额外空间是 O(V)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-07-03
        • 2022-11-14
        • 2019-07-27
        • 2012-10-09
        • 2014-02-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多