我需要计算一个值,该值由以下低效的伪Python代码给出:
def foo(a,b):
tmp = 0
for i in graph.nodes():
for j in graph.nodes():
tmp += c
if (i and j are neighbors):
tmp += a - c
elif (i and j are next-neighbors):
tmp += b - c
return tmp
换句话说,给定所有节点对,foo = a *(E = 边数)+ b *(EE = 不相邻但有共同邻居的节点对数)+ c *(N(N-1)/ 2-EE-E)。
我尝试了一些广度优先搜索,但没成功。
编辑:更多信息
- 图不是静态的。我不断添加和删除边缘,因此不能仅计算一次。我必须不断更新“下一个邻居列表”。
- 我将图存储为邻接矩阵。