原博客地址
这儿是学习并做笔记
N = 1000; m0 = 3;m = 3; %初始结点3,度3 节点数N
adjacent_matrix = sparse(m0,m0);%初始化邻接矩阵
for i = 1:m0
for j = 1:m0
if j~=i%去掉自身形成的环
adjacent_matrix(i,j) = 1;%建立初始临界矩阵
end
end
end
adjacent_matrix = sparse(adjacent_matrix);
%之所以多了一个0,是因为基本思想是以线段的长度类比于degree,线段越长,被选中的概率就越大
node_degree = zeros(1,m0+1);
node_degree(2:m0+1) = sum(adjacent_matrix);
for iter = 4:N
iter
total_degree = 2*m*(iter - 4)+6;
%还是上面提到过的,以线段长度类比于degree,所以得用cumsum,也就解释了为什么得多一个0,因为作为线段的边界(开始)
cum_degree = cumsum(node_degree);
choose = zeros(1,m);
%选出第一个和新点相连接的定点
r1 = rand(1)*total_degree; %计算与已存在点相连的概率
for i = 1:iter-1
if(r1>=cum_degree(i))&(r1<cum_degree(i+1))%选取度大的点
choose(1) = i;
break
end
end
%选出第二个和新点相连接的顶点
r2 = rand(1)*total_degree;
for i = 1:iter-1
if(r2>=cum_degree(i))&(r2<cum_degree(i+1))
choose(2) = i;
break
end
end
while choose(2) == choose(1)
r2 = rand(1)*total_degree;
for i = 1:iter-1
if(r2>=cum_degree(i))&(r2<cum_degree(i+1))
choose(2) = i;
break
end
end
end
%选出第三个和新点相连接的顶点
r3 = rand(1)*total_degree;
for i = 1:iter-1
if(r3>=cum_degree(i))&(r3<cum_degree(i+1))
choose(3) = i;
break
end
end
%若选择一样,则重新选择,直到不同为止
while (choose(3) == choose(1)|choose(3) == choose(2))
r3 = rand(1)*total_degree;
for i = 1:iter-1
if(r3>=cum_degree(i))&(r3<cum_degree(i+1))
choose(3) = i;
break
end
end
end
%把新点加入网络后,对邻接矩阵进行相应的改变!
for k = 1:m
adjacent_matrix(iter,choose(k))=1;
adjacent_matrix(choose(k),iter)=1;
end
node_degree = zeros(1,iter+1);
node_degree(2:iter+1) = sum(adjacent_matrix);
end
save data adjacent_matrix