【问题标题】:Time Complexity of breadth first search with adjacency matrix representation?具有邻接矩阵表示的广度优先搜索的时间复杂度?
【发布时间】:2013-12-24 22:30:32
【问题描述】:

在 bfs 中,我们必须查找每个节点,并且对于每个节点,我们必须查找行的所有元素。这不需要 O(V^2)(邻接矩阵中的元素数)时间,因此对于邻接矩阵总时间不应该是 O(V^2+E)。

【问题讨论】:

  • 没错。你有理由不相信吗?
  • @templatetypedef 这些:link,link
  • 维基百科链接假定一个邻接列表,而不是一个邻接矩阵。那个 SO 链接是错误的。你的分析是正确的。

标签: breadth-first-search adjacency-matrix


【解决方案1】:

使用邻接矩阵实现的 BFS 的复杂度为 O(|V|2)。这主要是因为每次我们想要找到与给定顶点“U”相邻的边是什么时,我们都必须遍历整个数组 AdjacencyMatrix[U],它的长度偏离 |V|。

将 BFS 想象为前沿。你取一个起始顶点 S,它在级别 - 0。所有相邻的顶点都在级别 - 1。然后,我们将级别 - 1 的所有顶点的所有相邻顶点标记为级别- 2. 因此,每个顶点将只属于一个边界(或级别)。当一个元素在边界中时,我们检查一次它的相邻顶点,这需要 O(|V|) 时间。 As,边界覆盖|V|算法过程中的元素,总时间将变为 O(|V| * |V|),即 O(|V|2)。

通过邻接列表和矩阵实现 BFS 的复杂性差异是因为在邻接矩阵中,为了判断哪些节点与给定顶点相邻,我们需要 O(|V|) 时间,而与边无关。然而,在邻接表中,我们可以立即使用它,它所花费的时间与相邻顶点本身成正比,它对所有顶点求和 |V|是|E|。所以,BFS by Adjacency List 给出 O(|V| + |E|)。

希望我的回答对您有所帮助,如果有,请告诉我...! ☺

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-08
    • 1970-01-01
    相关资源
    最近更新 更多