何时实际应为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) ?
答案 0 :(得分:1)
对于复杂度+,它在某种程度上等于max(请参见Dukeling @的评论)。 从某种意义上说你是对的。对于常规连接的图,您可以假定它将是O(E),因为您的边比顶点多。
但是,让我们拍摄一个没有边缘的图形。 BFS循环不会执行任何操作,但是作为设置的一部分,您需要初始化具有V元素(即O(V))的访问向量(也许您的实现可能需要一些其他信息)。
由于我们不知道得到哪种图,因此如果O(V + E),则表示复杂度的正确方法。
答案 1 :(得分:0)
您说的是真的,但是我们必须考虑这样一个事实,即BFS具有一个初始化阶段,在该阶段中,您将所有顶点的距离分配为+ inf,白色和父级NULL。
不能跳过此初始步骤,因为BFS仅访问可从源到达的顶点,但是它可能会收到一个断开的图形作为输入,因此您必须为每个顶点计算距离和父级信息。