计算邻接列表的Outdegree和Indegree

时间:2017-07-05 11:53:56

标签: algorithm graph degrees

问题

  

计算计算Outdegree和Indegree of Adjacency列表的时间复杂度。

我的方法/疑问

设Adj []为大小为V的数组,其中V =否。有向图中的顶点 用于表示邻接列表。

我知道,

  

顶点u的outdegree(你属于V)实际上是Adj [u]的长度

  

顶点u(u属于V)的实际上是调整列表中的u的计数。

在这两种情况下,我认为时间复杂度应该是theta(V * E)

其中V =否。顶点

  E=no. of edges

因为为了计算outdegree,我们扫描所有顶点并在每个顶点下扫描那些顶点的所有边。

那为什么是Thrta(V + E)

请纠正我错在哪里?

谢谢!

2 个答案:

答案 0 :(得分:0)

好吧,假设我们有V个顶点和E个边缘 在双向和单向图中,对于每个边E i ,我们得到两个顶点V 1 ,V 2 。我们可以很容易地获得边缘的方向并更新某个顶点的outdegree和indegree计数器。

实施例:

顶点:1,2,3,4 边缘:1 - > 2,2 - > 4,3-> 1,2 - > 3
Outdegree:0 0 0 0
Indegree:0 0 0 0

通过1:
边缘1 - > 2
Outdegree:1 0 0 0
Indegree:0 1 0 0

通过2:
边缘2 - > 4
Outdegree:1 1 0 0
Indegree:0 1 0 1

通过3:
边缘3 - > 1
Outdegree:1 1 1 0
不一致:1 1 0 1

通过4:
边缘2 - > 3
Outdegree:1 2 1 0
不一致:1 1 1 1

所以在这里,我们需要在每个边和每个顶点上运行一次循环,因此导致复杂性(V + E)。

答案 1 :(得分:0)

我们可以分配一个大小为| V |的数组arr []并将其条目初始化为零。然后我们只需要在Adj中扫描一次列表,当我们在列表中看到你时,递增arr [u]。

arr []中的值将是每个顶点的出度。这可以在Θ(| V | + | E |)时间内用Θ(| V |)附加存储来完成。