【发布时间】:2013-12-24 22:30:32
【问题描述】:
在 bfs 中,我们必须查找每个节点,并且对于每个节点,我们必须查找行的所有元素。这不需要 O(V^2)(邻接矩阵中的元素数)时间,因此对于邻接矩阵总时间不应该是 O(V^2+E)。
【问题讨论】:
标签: breadth-first-search adjacency-matrix
在 bfs 中,我们必须查找每个节点,并且对于每个节点,我们必须查找行的所有元素。这不需要 O(V^2)(邻接矩阵中的元素数)时间,因此对于邻接矩阵总时间不应该是 O(V^2+E)。
【问题讨论】:
标签: breadth-first-search adjacency-matrix
使用邻接矩阵实现的 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|)。
希望我的回答对您有所帮助,如果有,请告诉我...! ☺
【讨论】: