zoukankan      html  css  js  c++  java
  • 邻接矩阵的相乘的意义

    假设一个$N$个结点的无向图
    我们用 $G[u][v]=G[v][u]=1$ 表示 $ u$ 到 $ v$ 有连边, 否则 $ G[u][v]=G[v][u]=0 $
    如果用这个邻接矩阵自乘会得到什么呢
    模拟矩乘的运算有 $ G^{2}[u][v]=sum limits_{i=1}^{n} G[u][i] * G[i][v]$ 也就是说 $ G^{2}[u][v]$ 是表示图上 $ u$ 到 $ v$ 恰好经过两条边的路径的条数的矩阵

    我们可以把原始邻接矩阵 G[u][v] 看作为
    表示图上 $ u$ 到 $ v$ 恰好经过一条边的路径条数的矩阵 那么 $ G^{2}[u][v]=sum limits_{i=1}^{n} G[u][i] * G[i][v]$ 显然就是运用了乘法原理与加法原理
    再考虑 $ G^{3}[u][v]$ 呢
    由 $ G^{3}$ 的计算过程 $ G^{3}[u][v]=sum_{i=1}^{n} sum limits_{j=1}^{n} G[u][i] * G[i][j] * G[j][v]$ 同理可知其表示为图上 $ u$ 到 $ v$ 恰好经过三条边的路径条数的矩阵 或者我们也可以将其看作 $ G^{3}=G^{2} * G$ 理解,其本质是相同的
    由上述不难发现该性质对于一般的正整数k都是成立的
    即 $ G^{k}[u][v]$ 是表示图上 $ u$ 到 $ v$ 恰好经过 $K$ 条边的路径条数的矩阵
    也就是说
    如果需要在某个图上求 $ u$ 到 $ v$ 恰好经过$ K$ 条边的路径的条数 我们完全可以使用矩阵快速帛来优化这个计算过程
    当然,这个性质对于有向图以及有重边的图同样适用 对于有重边的图,把初始矩阵 $ G[u][v]$ 改成记录 $ u, v$ 之前边的条数即可

    Example

        

    a=[
        [0,1,1,1],
        [1,0,0,1],
        [1,0,0,1],
        [1,1,1,0],
    ]
    A = torch.tensor(a)
    torch.mm(A,A)
    tensor([[3, 1, 1, 2],
            [1, 2, 2, 1],
            [1, 2, 2, 1],
            [2, 1, 1, 3]])
    
    torch.mm(torch.mm(A,A),A)
    tensor([[4, 5, 5, 5],
            [5, 2, 2, 5],
            [5, 2, 2, 5],
            [5, 5, 5, 4]])

    因上求缘,果上努力~~~~ 作者:希望每天涨粉,转载请注明原文链接:https://www.cnblogs.com/BlairGrowing/p/15492526.html

  • 相关阅读:
    Using the @synchronized Directive
    What Are Threads?
    ios 线程同步
    CAAnimation 动画支撑系统
    UIView 动画 依赖与 CALayer的证据
    动画的定义
    Core Animation1-简介
    繁的是表象,简的是本质
    完全自定义动画
    线程安全与可重入
  • 原文地址:https://www.cnblogs.com/BlairGrowing/p/15492526.html
Copyright © 2011-2022 走看看