Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 计算每个节点的总和';邻居';度?_Algorithm_Graph_Pseudocode - Fatal编程技术网

Algorithm 计算每个节点的总和';邻居';度?

Algorithm 计算每个节点的总和';邻居';度?,algorithm,graph,pseudocode,Algorithm,Graph,Pseudocode,对于无向图中的每个节点u,让twodegree[u]是u的相邻节点的度数之和。演示如何在线性时间内计算twodegree[.]值的整个数组,给定邻接列表格式的图形 这就是解决办法 for all u ∈ V : degree[u] = 0 for all (u; w) ∈ E: degree[u] = degree[u] + 1 for all u ∈ V : twodegree[u] = 0 for all (u; w) ∈ E: twodegree[u

对于无向图中的每个节点u,让twodegree[u]是u的相邻节点的度数之和。演示如何在线性时间内计算twodegree[.]值的整个数组,给定邻接列表格式的图形

这就是解决办法

for all u ∈  V :
  degree[u] = 0
  for all (u; w) ∈  E:
    degree[u] = degree[u] + 1
for all u ∈  V :
  twodegree[u] = 0
  for all (u; w) ∈  E:
    twodegree[u] = twodegree[u] + degree[w]

有人能解释一下度[u]在这种情况下是什么,以及twodegree[u]=twodegree[u]+degree[w]应该是u的邻居的度之和吗?

这里,
degree[u]
是节点的度
u
(即,相邻节点的数量)。您可以看到,这是由第一个循环计算的,它在图中的所有边上迭代,并为图中的每条边增加
degree[u]

然后,第二个循环在图中的每个节点上迭代,并计算其所有相邻节点的度数之和。它使用预先计算
度[u]
的事实,以便在O(m+n)时间内运行


希望这有帮助

这里,
degree[u]
是节点
u
的度数(即与之相邻的节点数)。您可以看到,这是由第一个循环计算的,它在图中的所有边上迭代,并为图中的每条边增加
degree[u]

然后,第二个循环在图中的每个节点上迭代,并计算其所有相邻节点的度数之和。它使用预先计算
度[u]
的事实,以便在O(m+n)时间内运行


希望这有帮助

除了@templatetypedef所说的,语句
twodegree[u]=twodegree[u]+degree[w]
简单地跟踪
u
的twodegree,同时不断迭代(或累积)添加其邻居(临时存储在
w
中)的度数

除了@templatetypedef所说的,语句
twodegree[u]=twodegree[u]+degree[w]
简单地跟踪
u
的twodegree,同时不断迭代(或累积)添加其邻居(临时存储在
w
中)的度数。

您能解释一下这是O(n+m)吗?有两个for循环,一个在另一个内部。如何是线性时间而不是O(nm)?@SharhadBashar通过将外循环的迭代次数乘以内循环的最大迭代次数,可以保守地将运行时限制在O(mn),但这个限制不会很紧。与其继续这样做,不如考虑内部循环在外部循环的所有迭代中运行的总次数。图中总共只有m条边,所以在所有迭代中,内循环只能运行O(m)次。这里所做的功是边的O(m)加上所有其他功的O(n),总共O(m+n)。你能解释一下这是怎么回事吗?有两个for循环,一个在另一个内部。如何是线性时间而不是O(nm)?@SharhadBashar通过将外循环的迭代次数乘以内循环的最大迭代次数,可以保守地将运行时限制在O(mn),但这个限制不会很紧。与其继续这样做,不如考虑内部循环在外部循环的所有迭代中运行的总次数。图中总共只有m条边,所以在所有迭代中,内循环只能运行O(m)次。这里所做的功是O(m)的边加上O(n)的所有其他功,总共O(m+n)。