【问题标题】:inverse of adjacency list in O(|V | + |E|)O(|V | + |E|) 中的邻接表的逆
【发布时间】:2016-11-02 10:53:23
【问题描述】:

令 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

【问题讨论】:

    标签: algorithm big-o adjacency-list inverse


    【解决方案1】:

    假设你迭代图中所有顶点的邻接列表如下。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-06-10
      • 1970-01-01
      • 2016-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多