当前位置: 首页 > 面试题库 >

广度优先搜索时间复杂度分析

樊浩初
2023-03-14
问题内容

遍历顶点的每个相邻边的时间复杂度称为O(N),其中N是相邻边的数量。因此,对于V个顶点,时间复杂度变为O(V*N)=
O(E),其中E是图形中边的总数。由于是从Queue中删除顶点或向Queue中添加顶点O(1),因此为什么将顶点添加到BFS的整体时间复杂度中O(V+E)


问题答案:

我希望这对任何难以理解“广度优先搜索”(又称为BFS)的计算时间复杂性的人都有帮助。

Queue graphTraversal.add(firstVertex);

// This while loop will run V times, where V is total number of vertices in graph.
while(graphTraversal.isEmpty == false)

    currentVertex = graphTraversal.getVertex();

    // This while loop will run Eaj times, where Eaj is number of adjacent edges to current vertex.
    while(currentVertex.hasAdjacentVertices)
        graphTraversal.add(adjacentVertex);

    graphTraversal.remove(currentVertex);

时间复杂度如下:

V * (O(1) + O(Eaj) + O(1))
V + V * Eaj + V
2V + E(total number of edges in graph)
V + E

我试图简化代码和复杂度计算,但是如果您有任何问题,请告诉我。



 类似资料:
  • 遍历顶点的每个相邻边的时间复杂度是,例如,,其中是相邻边的数量。因此,对于顶点数,时间复杂度变为=,其中是图中的边总数。既然从队列中移除和添加顶点是,为什么它会作为添加到BFS的总体时间复杂度中?

  • 二叉树上广度优先搜索的空间复杂度是多少?因为它一次只存储一个级别,我不认为它会是O(n)。

  • 主要内容:深度优先搜索(简称“深搜”或DFS),广度优先搜索,总结前边介绍了有关图的 4 种存储方式,本节介绍如何对存储的图中的顶点进行遍历。常用的遍历方式有两种: 深度优先搜索和 广度优先搜索。 深度优先搜索(简称“深搜”或DFS) 图 1 无向图 深度优先搜索的过程类似于树的先序遍历,首先从例子中体会深度优先搜索。例如图 1 是一个无向图,采用深度优先算法遍历这个图的过程为: 首先任意找一个未被遍历过的顶点,例如从 V1 开始,由于 V1 率先访问过了,所以

  • 我必须为一个算法开发伪代码,该算法计算给定顶点V和边E的图G=(V,E)中连通分量的数量。 我知道我可以使用深度优先搜索或广度优先搜索来计算连接组件的数量。 但是,我想用最高效的算法来解决这个问题,但是我不确定每个算法的复杂度。 下面是一个用伪代码形式写DFS的尝试。 下面尝试以伪代码形式编写 BFS。 我的讲师说BFS与DFS具有相同的复杂性。 然而,当我搜索深度优先搜索的复杂度时,它是O(V^

  • 我已经查看了其他各种StackOverflow答案,它们都与我的讲师在幻灯片中写的不同。 深度优先搜索的时间复杂度为O(b^m),其中b是搜索树的最大分支因子,m是状态空间的最大深度。如果m比d大得多,这很糟糕,但如果搜索树“浓密”,则可能比广度优先搜索快得多。 他接着说。。 空间复杂度为O(bm),即动作序列长度的空间线性!只需要存储从根到叶节点的单个路径,以及路径上每个节点的剩余未扩展兄弟节点

  • 在继续使用其他图算法之前,让我们分析广度优先搜索算法的运行时性能。首先要观察的是,对于图中的每个顶点 $$|V|$$ 最多执行一次 while 循环。因为一个顶点必须是白色,才能被检查和添加到队列。这给出了用于 while 循环的 $$O(V)$$。嵌套在 while 内部的 for 循环对于图中的每个边执行最多一次,$$|E|$$。原因是每个顶点最多被出列一次,并且仅当节点 u 出队时,我们才检

  • 我正在研究BFS算法,我有一个关于如何将相邻节点插入队列的问题。 例如,假设我们正在处理一个无向图,我们希望执行BFS来输出图的内容,那么我们如何知道在从队列中取出一个初始节点后,相邻节点以什么顺序插入到队列中呢?还有,有没有办法修改邻居节点插入队列的方式? 任何帮助都将不胜感激,谢谢。

  • 下面是我用广度优先搜索逐级打印二叉树的Java解决方案(它有效!!) 同样的空间复杂性也适用于我的树变异吗?我还没有生成一个测试用例,其中BFS队列将保存树中的所有节点。即使二叉树退化为链表,如下面我从BST获得的图片中所示,对树的正常操作需要O(n)时间和O(n)空间,BFS队列也最多容纳1个元素。 谁能给我一个测试用例,在这个测试用例中,BFS队列将所有节点都保存在树中,证明空间复杂度为O(n