【发布时间】:2023-03-04 23:02:01
【问题描述】:
如果图使用邻接表表示,以下代码的运行时间增长顺序是什么,其中V是顶点数,E是总边数?
// G.V() returns number of vertices, G is the graph.
for (int v = 0; v < G.V(); v++) {
for (w : G.adj(v)) {
System.out.println(v + "-" + w);
}
}
为什么上面代码的时间复杂度是Theta(V+E),其中V是顶点数,E是边数?
我相信如果我们让打印成为成本函数,那么它应该是 Theta(每个 v 的度数总和) = Theta(2E) = Theta(E) 因为我们进入内循环 deg(v) 次顶点诉。
【问题讨论】:
-
你检查每个顶点和每条边;您的图表可能不包含任何边,但您仍然会遍历所有顶点,这就是为什么这两个数量都会出现在复杂度中。
标签: algorithm performance graph time-complexity complexity-theory