【发布时间】:2013-08-06 03:59:18
【问题描述】:
给定一个有向图的邻接表表示,需要多长时间 计算每个顶点的出度?计算需要多长时间 度数?
谢谢
【问题讨论】:
标签: algorithm graph adjacency-list
给定一个有向图的邻接表表示,需要多长时间 计算每个顶点的出度?计算需要多长时间 度数?
谢谢
【问题讨论】:
标签: algorithm graph adjacency-list
有向图的邻接表表示:
每个顶点的出度
顶点u的出度等于Adj[u]的长度。
Adj中所有邻接表的长度之和为|E|。
因此计算每个顶点的出度的时间是Θ(V + E)
每个顶点的入度
顶点 u 的入度等于它在 Adj 的所有列表中出现的次数。
如果我们搜索每个顶点的所有列表,计算每个顶点入度的时间是 Θ(VE)
或者,我们可以分配一个大小为 |V| 的数组 T并将其条目初始化为零。
我们只需要扫描 Adj 中的列表一次,当我们在列表中看到 'u' 时增加 T[u]。
T 中的值将是每个顶点的入度。
这可以在 Θ(V + E) 时间内通过 Θ(V) 额外的存储空间完成。
【讨论】:
两者都是O(m + n),其中m 是边数,n 是顶点数。
启动一组计数器,一个用于每个顶点,一个用于入度,一个用于出度。
扫描边缘。对于每条边的出顶点,将该顶点的出度计数器加一。对于每条边的入顶点,将该顶点的入度计数器加一。这是O(m) 操作。
输出每个顶点的出度和入度计数器,即O(n)。
这就是你得到O(m + n)的方式。
【讨论】:
out-degree 对应每个vertex:theta(E)
in-degree 对应每个vertex:O(E)
E是图的边数
【讨论】:
因为它是一个有向图,并且只给出了邻接表。
计算出度数所需的时间为 theta (M+N),其中 M 是顶点数,N 是指边数。
而对于入度数的计数,对于任何节点,您必须计算该节点在所有其他(其余顶点)邻接列表中出现的次数。所以,它需要 theta(MN)。
但是,如果您维护一个大小为 M 的数组,那么您可以在 theta(M+N) 中计算入度数,并额外存储 theta(M) 空间
【讨论】:
对于具有 m 个顶点和 n 个边的图,计算入度和出度需要 theta(m + n)。它是 theta(m+n) 而不是 O(m + n) 的原因,因为无论图形是什么,它都必须经过每个顶点 m 和每个边 n。
【讨论】:
给定一个有向图的邻接表表示 Adj,顶点 u 的出度等于 Adj[u] 的长度, Adj 中所有邻接表的长度之和为|E|。因此计算每个顶点的出度的时间是Θ(|V| + |E|)。
顶点 u 的入度等于它在 Adj 中所有列表中出现的次数。如果我们在所有列表中搜索每个 顶点,计算每个顶点的入度的时间是Θ(|V|.|E|)。
(或者,我们可以分配一个大小为 |V| 的数组 T 并将其条目初始化为零。然后我们只需要扫描 调整一次,当我们在列表中看到 u 时增加 T[u]。 T 中的值将是每个顶点的入度。这可以是 在 Θ(|V| + |E|) 时间内完成,额外的存储空间为 Θ(|V|)。)
【讨论】: