Generating a random graph with given average(mean) degree of nodes

5 次查看(过去 30 天)
I want to generate a random graph (undirected without self-loop) with input average(mean) degree of nodes.
For example, with given (avg degree = 3 & n = 10), I want to have a randomly generated graph with 10 by 10 adjacency matrix and avg degree of 3.
Can anyone assit me on this please?

回答(1 个)

Paras Gupta
Paras Gupta 2023-9-14
Hi,
I understand that you want to generate the adjacency matrix for a random undirected graph with an average degree given as input. Please refer to the code below to achieve the same.
adj = generateRandomGraph(10, 3)
adj = 10×10
0 0 1 0 0 0 0 0 1 1 0 0 1 1 1 0 0 1 0 0 1 1 0 1 0 0 0 1 0 1 0 1 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 1 0 1 1 0 0 1 1 0 1 0 1 0 0 0 0 0 0 1 0 0 1 0 1 0 1 0 1 0 0 0
G = graph(adj);
numNodes = numnodes(G)
numNodes = 10
avgDegree = mean(degree(G))
avgDegree = 3
function adjacencyMatrix = generateRandomGraph(n, avgDegree)
% Create an empty adjacency matrix
adjacencyMatrix = zeros(n, n);
% Calculate the maximum number of edges allowed
maxEdges = n * (n - 1) / 2;
% Calculate the desired number of edges
numEdges = round(n * avgDegree / 2);
% Check if the desired number of edges is valid
if numEdges > maxEdges
error('Invalid average degree. Too high for the number of nodes.');
end
% Generate random edges until reaching the desired number
while numEdges > 0
% Generate two random nodes
node1 = randi(n);
node2 = randi(n);
% Check if the edge already exists or if it's a self-loop
if adjacencyMatrix(node1, node2) == 0 && node1 ~= node2
% Add the edge
adjacencyMatrix(node1, node2) = 1;
adjacencyMatrix(node2, node1) = 1;
% Decrease the number of remaining edges
numEdges = numEdges - 1;
end
end
end
Please refer to the following documentations for more information on the functions used in the code above:
Hope this helps.

类别

Help CenterFile Exchange 中查找有关 Graph and Network Algorithms 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by