Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 为什么广度优先搜索的时间复杂度是O(V+;E)?_Algorithm_Time Complexity_Graph Theory_Breadth First Search - Fatal编程技术网

Algorithm 为什么广度优先搜索的时间复杂度是O(V+;E)?

Algorithm 为什么广度优先搜索的时间复杂度是O(V+;E)?,algorithm,time-complexity,graph-theory,breadth-first-search,Algorithm,Time Complexity,Graph Theory,Breadth First Search,什么时候应该是O(E),因为在图中E的范围是从V-1到V(V-1)/2? 为什么BFS的时间复杂度为O(E+v) 在CLRS中,O(V)来自每个顶点的排队和出列操作,因为V顶点存在,所以它是O(1)*V=O(V)。但问题是,当所有的V顶点都在使用时,这是在完全连通图中,但在连通图中,E=V-1在最小情况下,那么它不应该是O(E)而不是O(V+E) For complexity+在某种程度上等同于max(参见杜克林的评论)。 在某种程度上你是对的。对于正则连通图,可以假设它是O(E),因为它的边比

什么时候应该是O(E),因为在图中E的范围是从V-1到V(V-1)/2? 为什么BFS的时间复杂度为O(E+v)


在CLRS中,O(V)来自每个顶点的排队和出列操作,因为V顶点存在,所以它是O(1)*V=O(V)。但问题是,当所有的V顶点都在使用时,这是在完全连通图中,但在连通图中,E=V-1在最小情况下,那么它不应该是O(E)而不是O(V+E)

For complexity+在某种程度上等同于max(参见杜克林的评论)。 在某种程度上你是对的。对于正则连通图,可以假设它是O(E),因为它的边比顶点多

但是,让我们做一个没有边的图。 BFS循环不会做任何事情,但是作为设置的一部分,您需要初始化已访问的向量(可能是您的实现可能需要的更多信息),该向量包含V元素,所以O(V)


因为我们不知道我们得到什么样的图形,如果O(v+e),

你说的是真的,那么正确的表达方式是正确的,但是我们必须考虑到BFS有一个初始化阶段,你分配给所有的顶点距离+INF,颜色白色和父亲NULL。
不能跳过此初始步骤,因为BFS只访问可从源访问的顶点,但它可以接收一个断开连接的图形作为输入,并且您必须为每个顶点计算有关距离和父节点的信息。

您应该在上一节中问此问题。这确实是我认为更适合该社区的问题类型。无论如何,直觉上,这是O(V+E),因为你事先并不知道你的图将有多少条边(即,如果你的图是稀疏的或完整的),但你知道你将访问所有的边和顶点。@nbro我理解的是,只有连接到初始顶点的顶点才排队,或者如果涉及到这个问题,那么就退出排队,对于任何连通图,e=v-1(最小情况),那么O(v+e)是否应该收敛到O(e)?稀疏图是不连通的,仍然只考虑从源顶点连通的图。所以它仍然应该是O(E)对吗?稀疏图不一定是断开的。“O(V+E)不应该收敛到O(E)”是什么意思?无论如何,O(E)是不正确的,因为在所有图中可能只有一条边,但仍然必须访问所有顶点(即从每个单独的顶点重新启动BFS)。@nbro不是宽度优先遍历吗,我认为BFS只适用于连通图,BFT适用于非连通图,我所看到的所有算法也强调了同一点。你可能会说,顶点的初始设置需要O(v)时间,但从我的观点来看,你不能在遍历所有边时,只标记连接的顶点吗?它们明显大于| E |+1,我不会说
+
“实际上意味着”
max
,而是它们是等价的,因为
max(x,y)@Sorin我的理解是,我们可以一步一步地抛弃最初的着色,在遍历边和标记发现的节点时着色,通过这种方式,我们只对连接到原始节点的子图中的顶点V'着色,因此V'将再次围绕E,从而使时间复杂度为O(E),不是吗?为什么在没有连接的情况下对所有顶点进行初始着色?@jeshwanthchowdary这并不是严格意义上的初始着色,尽管您可能会以某种方式初始化向量,以确保不会意外地对某些顶点进行错误着色。至少,您需要为着色分配内存。即使在一个操作中没有分配每个bool,而是在相当大的块中分配,但总体上操作是线性的(常数非常低)。