对于无向图中的每个节点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的邻居程度的总和吗?
答案 0 :(得分:2)
此处,degree[u]
是节点u
的度数(即与其相邻的节点数)。你可以看到这是由第一个循环计算出来的,它循环遍历图中的所有边,并为图中的每个边增加degree[u]
。
然后,第二个循环遍历图中的每个节点,并计算其所有邻居的度数之和。它使用degree[u]
预先计算的事实,以便在O(m + n)时间内运行。
希望这有帮助!
答案 1 :(得分:0)
除了@templatetypedef所说的以外,语句twodegree[u] = twodegree[u] + degree[w]
只是跟踪u
的二次度,同时它迭代地(或累加地)增加其邻居(临时存储)的度数。在w
中