Hi ,
I want to check whether the network that I have obtained is a small world network or not. For that I have to find out the clustering coefficient and shortest path length of a random network with the same number of nodes and links in my network. Is it possible to find out?

 채택된 답변

Christine Tobler
Christine Tobler 2021년 5월 10일

1 개 추천

You can use
s = randi(n, e, 1);
t = randi(n, e, 1);
G = graph(s, t, [], n);
which will give you a graph with n nodes and e edges. Note that G may have multiple edges connecting the same two nodes, and may also have self-loops (edges connecting a node to itself). If you don't want repeating edges, use the following instead:
G = graph(true(n)); % Self-loops are possible
%G = graph(true(n), 'omitselfloops'); % Alternative without self-loops
p = randperm(numedges(G), e);
G = graph(G.Edges(p, :));

댓글 수: 5

Rayan Glus
Rayan Glus 2021년 5월 28일
Thanks Christine!
Is what you wrote the same as Erdos - Renyi random graph model? I'm sorry for the stupid question.
Hi Rayan, great question!
The second code I included matches the G(n, M) model of Erdos-Renyi (usually would be done omitting self-loops). The first code doesn't match any of the Erdos-Renyi models, since it can generate multiple edges between the same two nodes.
You can generate the G(n, p) model of Erdos-Renyi by the following code (notice I renamed variable p above, since this is now needed for the probability of each edge being in the graph).
G = graph(true(n), 'omitselfloops');
edgesToKeep = rand(numedges(G), 1) < p;
G = graph(G.Edges(edgesToKeep, :));
Note for both variants, this could probably be computed in a faster way by avoiding the creation of G and instead coming up with some code that does the mapping from an edge ID in the complete graph with n nodes into the source and target node of that edge. But this is much more compact and simple code.
Rayan Glus
Rayan Glus 2021년 5월 29일
Thank you so much for the nice clarification, Christine.
Your code was able to generate a graph of 6000 nodes with p=0.6, and then plot it in just couple of seconds.
Norbert Cyran
Norbert Cyran 2021년 12월 19일
Why are you generating true matrix for nodes and random values for edges??
Christine Tobler
Christine Tobler 2021년 12월 20일
Hi Norbert,
The true(n) matrix is an adjacency matrix that contains all possible edges in the graph (omitting self-loops or not depending if that option is used or not). Then, I'm choosing a random subset of those edges using the randperm function.

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Deepthi B
Deepthi B 2021년 5월 13일

0 개 추천

Thank You

카테고리

도움말 센터File Exchange에서 Graph and Network Algorithms에 대해 자세히 알아보기

질문:

2021년 5월 10일

댓글:

2021년 12월 20일

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by