生成ER随机网络G(n,p)并计算其度分布

ER随机网络

生成ER随机网络有两种算法

第一种: 给出节点数和待添加边数,随机选取一对没有连边的不同的节点连边,直至达到待添加边数。

第二种: 给出节点数和连边概率,选取一对没有连边的不同的节点,生成随机数并和连边概率比较来决定是否连边,当所有节点对被选择一次后,则结束程序。

ER随机网络性质:

边数分布均值: pN(N-1)/2

度分布均值: p(N-1)

聚类系数: p

平均路径长度: 约等于lnN/ln(p(N-1))

直径: 小于等于平均路径长度

代码实现

这里实现第二种算法。

function [ a ] = gener( n,p )
%UNTITLED 此处显示有关此函数的摘要
%   此处显示详细说明
a = zeros(n,n);
for i =1:n
    for j =1:n
        if i ~=j
            b = rand;
            if b < p
                a(i,j) = 1;
                a(j,i) = 1;
            end
        end
    end
end
z = graph(a);
subplot(1,2,1);
plot(z);
title(['ER随机图 n=',num2str(n),',p=',num2str(p)]);
b = sum(a);
b = sort(b);
[d,f] = unique(b);
g = length(d);
m = size(a,1);
e = zeros(1,g);
for i = 1:(g-1)
    e(i) = f(i+1) - f(i);
end
if m == f(g)
    e(g) = 1;
else
    e(g) = m - f(g) + 1;
end
e = e/m
subplot(1,2,2);
bar(d,e);
title('度分布');
end

例子展示