您如何估计此算法的时间复杂度?

时间:2013-06-21 06:16:29

标签: algorithm time-complexity asymptotic-complexity

设N =顶点数     M =边数 有向图G.我们以邻接列表的形式存储边缘。 为清楚起见,我们假设,Oi是顶点i的outdegree,Ii是顶点i的in-degree。

算法如下:

for each vertex i
  for each vertex j in i's adj.list
    //do some work
    for each vertex k in j's adj.list
      //do some work

“做一些工作”基本上是在恒定时间内完成的(O(1))。我无法在N,M中得出运行时间的一般表达式。有人可以解释如何做到这一点吗?

暂且不说: 为了防止“我不会做你的功课”评论,我正在练习来自CLRS的文本问题(这是22.1-5)。我这样做是为了学习如何估计图算法的时间复杂度。

1 个答案:

答案 0 :(得分:1)

我假设算法中提到的每个邻接列表都是一个传出边列表。如果引用传入和传出边缘,则总工作量将乘以常数因子4,而不影响O()水平。

for语句称为F1,F2,F3,我们有F1循环N次。 F2循环总共O1+O2+... = M次,其中Oi是问题中提到的传出边缘度。 F3每F2通道最多循环N次,最坏情况下的下限不小。这导致算法的O(M·N)时间(即,F1和F2的O(M),每F3的O(N))。

相关问题