我有邻接矩阵让它被称为A size n * n
A(k,j)=A(j,k)=1
k,j
如果{1}}连接在一起。
现在看来,如果我采取
Dist=double(A)*double(A)>0 %getting all two hops connectivity
Dist=double(Dist)*double(A)>0 %getting all three hops connectivity
Dist=double(Dist)*double(A)>0 %getting all four hops connectivity
这是对的吗?
我用一些简单的图表尝试了它,看起来很合法
我可以使用这个事实创建距离矩阵吗?
距离矩阵将显示从j到k的最小跳数
P.S:
如果合法,我会很高兴理解为什么它是正确的,现在确实在谷歌找到了信息
答案 0 :(得分:4)
是的,这是完全正确的:邻接矩阵的条目为您提供顶点之间的连接。邻接矩阵的权力是连接步行。邻接矩阵的ij
th 次幂的k
th 条目会告诉您行走次数 k
从顶点i
到顶点j
。
通过归纳可以很容易地证明这一点。
请注意,邻接矩阵的幂数会计算i→j
步行的数量,而不是路径(步行可以重复顶点,而路径则不能)。因此,要创建距离矩阵,您需要迭代地为邻接矩阵提供动力,并且只要ij
th 元素非零,您就必须指定距离k
在距离矩阵中。
这是一个尝试:
% Adjacency matrix
A = rand(5)>0.5
D = NaN(A);
B = A;
k = 1;
while any(isnan(D(:)))
% Check for new walks, and assign distance
D(B>0 & isnan(D)) = k;
% Iteration
k = k+1;
B = B*A;
end
% Now D contains the distance matrix
请注意,如果您要搜索图表中的最短路径,也可以使用Dijkstra's algorithm。
最后请注意,这与sparse matrices完全兼容。由于邻接矩阵通常是稀疏矩阵的良好候选者,因此在性能方面可能非常有用。
最佳,