44 lines
1.4 KiB
Matlab
44 lines
1.4 KiB
Matlab
% 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)); |