【问题标题】:Time Complexity of Printing a Graph in Adjacency List Representation在邻接表表示中打印图的时间复杂度
【发布时间】: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


【解决方案1】:

如果我们让打印成为成本函数,那么

使用这样的假设,是的,会有Theta(E) println 调用。

但是一般执行时间不仅仅取决于打印,还取决于其他指令比如v++,都会有Theta(V+E)

【讨论】:

  • 你的成本函数是打印+递增吗?
  • 我刚刚提到了算法第 1 部分,作者建议成本模型应该来自第 184 页的内部循环。
  • @GoldCredential 我不确定您指的是哪本书(Sedgewick 和 Wayne?),以及它的哪个版本(请注意,第 184 页可能会引用其他内容,具体取决于一本书的版本) .您能否提供我可能涉及的相关片段?
  • 抱歉@ciamej,您能否在答案中包含成本函数?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-10
相关资源
最近更新 更多