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