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

Posted

技术标签:

【中文标题】在两个顶点之间的无向图中查找特定边【英文标题】: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 之间所有最短路径的一部分。

我的算法:

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

    从 m 开始 BFS 扫描直到到达 n \\ O(V+E)

    如果 d[n] = ∞, ret 如果 d[n] == temp, ret 如果 d[n] > temp, ret

    将边 e 返回到 G.\\O(1)

    返回 ret

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

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

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

【参考方案2】:

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

证明:

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

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

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

【讨论】:

以上是关于在两个顶点之间的无向图中查找特定边的主要内容,如果未能解决你的问题,请参考以下文章

图图的存储图的遍历

图查找排序

数据结构--图

20162307 2017-2018-1 《程序设计与数据结构》第11周学习总结

有重边与无重边的无向图的割边求法

第十一周总结