【问题标题】:Complexity of getting all neighbors of all nodes in adjacency list/matrix获取邻接列表/矩阵中所有节点的所有邻居的复杂性
【发布时间】:2017-07-25 11:45:08
【问题描述】:

如果我想在图中获取一个节点的所有邻居,如果将图存储在邻接矩阵中,时间复杂度为 O(|V|),如果存储在邻接矩阵中,时间复杂度为 O(|V|)邻接表。现在我在想,如果我不想获得一个节点的邻居而是所有节点,这将如何改变。 (注:邻接表包含一个数组和链表,每个数组入口存储一个链表,每个数组入口代表一个节点,链表中的每个节点代表一个相邻节点。)

我的过程如下:

在邻接矩阵中,我需要查看每个条目。因此我的时间复杂度是 O(|V|^2)。 在邻接列表中,我需要查看每个数组条目并浏览它们各自的链表。我在想,这应该在 O(|E|) 中完成,因为我基本上只查看所有边缘。

我的想法对吗?

【问题讨论】:

    标签: arrays algorithm time-complexity graph-theory


    【解决方案1】:

    时间复杂度为 O(n + m),其中 n = 图中的顶点数 & m = 图中的边数。 您只需要应用 BFS 或 DFS 算法即可。

    【讨论】:

    • 这是邻接 list 的情况,但 OP 在分析邻接 matrix 的复杂性时是正确的。
    • 在邻接矩阵的情况下时间复杂度变为O(v^2)。
    • 没错。 OP询问了这两个问题,并且您的答案中缺少邻接矩阵分析。为了提供完整的答案,您还可以解释为什么邻接列表是 O(n+m) 而不是简单的 O(m)
    猜你喜欢
    • 1970-01-01
    • 2013-01-18
    • 2016-04-06
    • 1970-01-01
    • 2018-08-19
    • 1970-01-01
    • 1970-01-01
    • 2015-05-31
    • 1970-01-01
    相关资源
    最近更新 更多