从邻接列表中的图形程度计算

sil*_*ker 5 algorithm graph asymptotic-complexity

我遇到了这个问题,其中需要从邻接列表表示中计算图的每个节点的入度.

for each u
   for each Adj[i] where i!=u
     if (i,u) ? E
         in-degree[u]+=1
Run Code Online (Sandbox Code Playgroud)

现在根据我的时间复杂性应该是O(|V||E|+|V|^2)但我提到的解决方案却将其描述为等于O(|V||E|).

请帮忙告诉我哪一个是正确的.

小智 8

而不是O(| V || E |),计算indegrees的复杂性是O(| E |).让我们考虑以下伪代码来计算每个节点的不确定性:

for each u
  indegree[u] = 0;

for each u
  for each v \in Adj[u]
    indegree[v]++;
Run Code Online (Sandbox Code Playgroud)

第一个循环具有线性复杂度O(| V |).对于第二部分:对于每个v,最内层循环最多执行| E | 时间,而最外层循环执行| V | 倍.因此第二部分似乎具有复杂度O(| V || E |).实际上,代码对每个边执行一次操作,因此更准确的复杂度是O(| E |).

  • 嗨,它应该是 O(|E|) 的推理似乎没问题。但正如你所说,外循环确实运行 |V| 次。那么,在进行复杂度计算时,我们是否没有考虑没有发生任何事情的循环?像 `for i in (0,n): do nothing` 的复杂度是 `n` 还是 `1`? (2认同)