我正在尝试从论文中重现算法 5:http: //vlado.fmf.uni-lj.si/pub/networks/doc/ms/rndgen.pdf
我的代码如下:
import random
import numpy as np
from random import randrange
from random import randint
from networkx import empty_graph
def fast_generate_scale_free(n, d):
#input: number of vertices: n, int
#minimum degree d, int
#output: scale-free multigraph
G=empty_graph(n)
M=np.zeros(2 *n *d)
if d >=1:
for v in range(0,n):
for i in range(0, d):
v= M[int(2*(v*d+i))]
#draw r uniformly at random
r=randint(0, 2*(v*d+i))
M[int(2*(v*d+i)+1)]=M[r]
for i in range(0, (n*d)):
a=M[int(2*i)]
b=M[int(2*i+1)]
G.add_edge(a,b)
return G
本质上,对于 n 和 d 的任何选择,我都会得到 (0,0) 的输出,我怀疑这是由我对 M 数组的初始化引起的。
我会很感激任何帮助,这纯粹是为了我自己的理解。