【问题标题】:How to get distance matrix from Adjacency matrix matlab如何从邻接矩阵matlab中获取距离矩阵
【发布时间】:2015-08-23 06:53:35
【问题描述】:

我有邻接矩阵,我们称之为 A size n*n

如果 k,j 在 1 跳中连接,则 A(k,j)=A(j,k)=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 的最小跳数

PS:

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

【问题讨论】:

    标签: algorithm matlab networking matrix logic


    【解决方案1】:

    是的,这是完全正确的:邻接矩阵的条目为您提供了顶点之间的连接。邻接矩阵的幂是连接游走。邻接矩阵的 kth 幂的 ijth 条目告诉您长度为 k行走次数顶点i 到顶点j

    这可以很容易地通过归纳来证明。

    请注意,邻接矩阵的幂计算i→j 行走的数量,而不是路径(行走可以重复顶点,而路径不能)。因此,要创建距离矩阵,您需要迭代地为邻接矩阵提供动力,并且一旦 ijth 元素非零,您必须在距离矩阵中分配距离 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 完全兼容。由于邻接矩阵通常是稀疏矩阵的良好候选者,因此在性能方面可能非常有益。

    最好的,

    【讨论】:

    • 谢谢解释,不知道步行的次数,我没有使用你的代码,所以不能说它是否可靠但谢谢 m8!!
    猜你喜欢
    • 1970-01-01
    • 2013-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多