如何从邻接矩阵matlab中得到距离矩阵

时间:2015-08-23 06:53:35

标签: algorithm matlab networking matrix logic

我有邻接矩阵让它被称为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:

如果合法,我会很高兴理解为什么它是正确的,现在确实在谷歌找到了信息

1 个答案:

答案 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完全兼容。由于邻接矩阵通常是稀疏矩阵的良好候选者,因此在性能方面可能非常有用。

最佳,

相关问题