algorithm - O(|V | + |E|) 中邻接表的逆

标签 algorithm big-o adjacency-list inverse

设 G = (V, E) 为有向图,以邻接表格式给出。定义一个 有向图 G' = (V, E') 其中边 (u, v) ∈ E' 当且仅当 (v, u) ∈ E(即 G'反转 G 中每条边的方向)。描述一种获得邻接表表示的算法 的 G' 在 O(|V | + |E|) 时间内。

是否有一种简单的方法来反转邻接表?

如果是:

a-> b
b-> de
c-> c
d-> ab
e->

到:

a-> d
b-> ad
c-> c
d-> ab
e-> b

最佳答案

假设您按如下方式迭代图中所有顶点的邻接列表。

for each u in V:
    for each v in adjacency_list[u]:
        reverse_adjacency_list[v].append(u)

通过这种方法,您可以遍历所有 |V| 的邻接表顶点,这对算法的整体时间复杂度贡献了 O(|V|)。此外,当您遍历所有这些邻接表时,您实际上遍历了图中的所有边。换句话说,如果将遍历的所有邻接列表连接起来,则结果列表的长度将为 |E|。因此,另一个 O(|E|) 导致了整体的复杂性。

因此,使用这种非常标准的方法,时间复杂度将为 O(|V| + |E|),您无需设计任何特殊方法来实现这种复杂度。

关于algorithm - O(|V | + |E|) 中邻接表的逆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40378152/

相关文章:

c++ - 使用 STL 算法与 lambda 表达式的仿函数?

c# - 复杂的树数据结构

javascript - 分级数独难度级别

algorithm - 算法的时间复杂度

algorithm - 在每次迭代中删除元素的嵌入式循环的大 O 是什么?

php - 如何使用 PHP 和 MySQL 将父子(邻接)表转换为嵌套集?

c - 实现深度优先搜索时出错

algorithm - N个矩形并集的周长

python - 从Python中的矩阵创建邻接列表图

c++ - 队列反转的渐近分析