【发布时间】:2019-01-29 21:32:47
【问题描述】:
什么时候它实际上应该是 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) ?
【问题讨论】:
-
您应该在cs.stackexchange.com 上提出这个问题。这确实是我认为更适合该社区的问题类型。
-
无论如何,直观地说,它是 O(V+E),因为你不知道,先验,你的图有多少边(即你的图是稀疏的还是满的),但是你知道您将访问所有边和顶点。
-
@nbro 我的理解是,只有连接到初始顶点的顶点才被排队,或者如果涉及到这个问题,那么就出队了,对于任何连接图,e=v-1(最小case) ,那么 O(v+E) 不应该收敛到 O(e) 吗?稀疏图没有连接,仍然只考虑从源顶点连接的图。所以仍然应该是 O(E) 对吧?
-
稀疏图不一定是断开的。你是什么意思“O(V + E)不应该收敛到O(E)”?无论如何,O(E) 是不正确的,因为您的所有图中可能只有 1 条边,但您仍然必须访问所有顶点(即从每个单独的顶点重新启动 BFS)。
-
@nbro 这不是广度优先遍历吗? ,我认为 BFS 仅适用于连通图,而 BFT 适用于不连通图,我所见过的所有算法也都强调同一点。你可能会争辩说,顶点的初始设置需要 O(v) 时间,但从我的角度来看,你不能在遍历所有边并且只标记连接的顶点时这样做吗?明显大于|E|+1
标签: algorithm time-complexity graph-theory breadth-first-search