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

时间:2016-11-02 10:53:24

标签: 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-> d
b-> ad
c-> c
d-> ab
e-> b

{{1}}

1 个答案:

答案 0 :(得分:3)

让我们假设您按照以下方式迭代图中所有顶点的邻接列表。

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 |),并且您不需要设计任何特殊方法来实现这种复杂性。

相关问题