FormationControlSimulation/SOURCE/networks-toolbox/nodeBetweenness.m

44 lines
1.4 KiB
Matlab
Raw Normal View History

2019-06-17 14:31:50 +07:00
% This function returns the betweenness measure of all vertices.
% Betweenness centrality measure: number of shortest paths running through a vertex.
%
% Note 1: Valid for a general graph (multiple shortest paths possible).
% Note 2: Currently this function is quite slow, because of
% findAllShortestPaths.m. This is especially true for dense
% graphs.
%
% INPUTS: adjacency or distances matrix (nxn)
% OUTPUTS: betweeness vector for all vertices (1xn)
%
% Other routines used: numNodes.m, adj2adjL.m, simpleDijkstra.m, findAllShortestPaths.m
% GB: July 3, 2014
function betw = nodeBetweenness(adj)
n = numNodes(adj);
spaths=inf(n,n);
betw = zeros(1,n);
adjL = adj2adjL(adj);
for i=1:n
uB = simpleDijkstra(adj,i);
for j=1:n
if i==j; continue; end
[allPaths, ~] = findAllShortestPaths(adjL,i,j, uB(j), allPaths={},path=[]);
spaths(i,j) = length(allPaths);
% for all paths in allPaths, parse out the path:
for p=1:length(allPaths)
path = strsplit(allPaths{p},'-');
pathvec = [];
for x=2:length(path) % skip the first one
pathvec = [pathvec str2num(path{x})];
end
betw(pathvec(2:length(pathvec)-1)) = betw(pathvec(2:length(pathvec)-1)) + 1/spaths(i,j);
end
end % end of j=1:n
end % end of i=1:n
% this last step is just additional normalization, and is arbitrary
betw=betw/(2*nchoosek(n,2));