【问题标题】:Calculating Outdegree and Indegree of Adjacency list计算邻接表的出度和入度
【发布时间】:2017-07-05 11:53:56
【问题描述】:

问题

计算邻接列表的出度和入度的时间复杂度。

我的方法/怀疑

让 Adj[] 是一个大小为 V 的数组,其中 V=No。有向图中的顶点数 用于表示邻接表。

我知道,

顶点u的出度(u属于V)其实就是Adj[u]的长度

顶点u的入度(u属于V)实际上是u在列表Adj中的计数。

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

其中 V=否。顶点数

  E=no. of edges

因为为了计算出度,我们扫描所有顶点并在每个顶点下扫描该顶点的所有边。

那为什么是 Thrta (V+E)

请纠正我哪里错了?

谢谢!

【问题讨论】:

标签: algorithm graph degrees


【解决方案1】:

好的,假设我们有 V 顶点和 E 边。
在双向和单向图中,对于每条边 Ei,我们得到两个顶点 V1,V2。我们可以很容易地得到边的方向,并更新某个顶点的出度和入度计数器。

示例:

顶点:1、2、3、4
边:1 -> 2, 2 -> 4, 3 -> 1, 2 -> 3
出度:0 0 0 0
度数:0 0 0 0

通过 1:
边 1 -> 2
出度:1 0 0 0
度数:0 1 0 0

通过 2:
边 2 -> 4
出度:1 1 0 0
度数:0 1 0 1

第 3 关:
边 3 -> 1
出度:1 1 1 0
度数:1 1 0 1

第 4 关:
边 2 -> 3
出度:1 2 1 0
度数:1 1 1 1

所以在这里,我们需要对每条边和每个顶点执行一次循环,从而导致复杂度 (V + E)。

【讨论】:

    【解决方案2】:

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

    arr[] 中的值将是每个顶点的出度。这可以在 Θ (|V| + |E|) 时间内完成,并有 Θ (|V|) 额外的存储空间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-31
      • 2011-05-27
      • 1970-01-01
      • 2019-10-22
      • 1970-01-01
      相关资源
      最近更新 更多