如何从邻接矩阵matlab中获取距离矩阵
How to get distance matrix from Adjacency matrix matlab
我有邻接矩阵让它被称为A大小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:
如果它是合法的,我会很乐意理解为什么它是正确的,现在在 Google
中找到了信息
是的,这是完全正确的:邻接矩阵的条目为您提供了顶点之间的连接。邻接矩阵的幂是串联的游走。邻接矩阵的 ij
th 项的 k
th 次幂告诉您 数从顶点 i
到顶点 j
.
的长度 k
的行走
这可以很容易地通过归纳法证明。
请注意,邻接矩阵的幂计算的是 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 完全兼容。由于邻接矩阵通常是稀疏矩阵的良好候选者,因此它在性能方面可能非常有益。
最佳,
我有邻接矩阵让它被称为A大小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:
如果它是合法的,我会很乐意理解为什么它是正确的,现在在 Google
中找到了信息是的,这是完全正确的:邻接矩阵的条目为您提供了顶点之间的连接。邻接矩阵的幂是串联的游走。邻接矩阵的 ij
th 项的 k
th 次幂告诉您 数从顶点 i
到顶点 j
.
k
的行走
这可以很容易地通过归纳法证明。
请注意,邻接矩阵的幂计算的是 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 完全兼容。由于邻接矩阵通常是稀疏矩阵的良好候选者,因此它在性能方面可能非常有益。
最佳,