<small id="yahdu"></small>

    1. <mark id="yahdu"></mark>

      矩阵乘法与邻接矩阵

      矩阵乘法与邻接矩阵

      矩乘结合律的证明 \(:\)
      \[\begin{aligned}((\mathbf{A B}) \mathbf{C})[i, j] & \\ &=\sum_{l=1}^{c}\left(\sum_{k=1}^{b} \mathbf{A}[i, k] \mathbf{B}[k, l]\right) \mathbf{C}[l, j] \\ &=\sum_{k=1}^{b} \sum_{l=1}^{c} \mathbf{A}[i, k] \mathbf{B}[k, l] \mathbf{C}[l, j] \\ &=\sum_{k=1}^{b} \mathbf{A}[i, k]\left(\sum_{l=1}^{c} \mathbf{B}[k, l] \mathbf{C}[l, j]\right) \\ &=(\mathbf{A}(\mathbf{B} \mathbf{C}))[i, j] \end{aligned}\]

      矩阵乘法能进行快速幂运算的原因就是因为它具有结合律.

      引例 \(1:\) [TJOI2017]可乐

      相信很多人都能想出一个 \(\Theta(t\times m)\) 的做法.(虽然我没想出来,但这只是因为我菜)

      问题简化一下,如果我们没有在原地停留和自爆两个操作,那么就是问从起点出发,走 \(t\) 步的不同路径数.

      这个问题怎么做呢?

      不考虑 \(Dp\) .

      令该图的邻接矩阵是 \(G\) , 那么我们考虑 \(G^2\) 是个什么东西.(此处的幂运算是指矩阵的幂).

      我们单独考虑某一行和某一列的相关运算 \(:\) 令其为 \(G_{a,i}\)\(G_{i,b}\) , 令 \(G'\) 为相乘得到的矩阵,那么会有 \(:\)

      \[G'_{a,b} = \sum_{i=1}^m{G_{a,i}\times G_{i,b}}\]

      容易发现,当且仅当 \(G_{a,i}\)\(G_{i,b}\) 都不为零,即 \(i\) 点可连通 \(a,b\) 两点的时候上式的该项才为 \(1\) , 否则为零.

      那么所有的这些情况累加起来,就是从 \(a\)\(b\) 长度为 \(2\) 的路径条数.(即走 \(2\) 步从 \(a\) 走到 \(b\) 的方案数,长度是 \(2\) 是因为经过一个中间点.)

      由此,我们可以得到, \(G^2\) 得到的矩阵其实表示了任意两点间长度为 \(2\) 的路径条数.

      那么 \(G^3\) 是否就表示任意两点间长度为 \(3\) 的路径条数呢?

      \(G'=G^2\) , \(G''\)\(G^3\). 那么有:

      \[G''=G'\times G\]

      \[G''_{a,b}=\sum_{i=1}^n\sum_{j=1}^n{G_{a,i}\times G_{i,j}\times G_{j,b}}\]

      分析方法与上面相同,于是我们归纳结论如下:

      \(G\) 表示一张图的邻接矩阵表示,那么 \(G^i\) 表示任意两点间长度为 \(i\) 的路径条数.

      那么我们就解决了引例的简化问题.

      那么怎么处理引例中的自爆和原地不动呢?

      很简单,原地不动视为自环,自爆就额外建一个虚点,表示自爆,这里要注意的是,不需要从虚点连回原图,因为自爆之后就不能再走了.

      于是我们解决了引例.

      那么矩乘是否仅仅只有这一个用处呢?

      引例 \(2:\) USACO07NOV Cow Relays

      题目大意 \(:\) 求从 \(s\)\(t\) 经过 \(k\) 条边的最短路.

      这个问题乍一看很眼熟,似乎就是上一个问题在细节上做一下变换得到.

      但你仔细思考会发现,最短路这个看似平凡的条件竟然不能用加法和乘法解决.

      但其实这也合理,因为我们知道最短路的求法都是以类似于 \(Dp\) 的松弛操作为核心的,也就是说有一个核心运算 \(: min!\)

      那么是否可以用矩阵解决这个运算呢?

      考虑 \(Floyd\) 的过程,其核心代码是 \(f_{i,j}=min(f_{i,j},f_{i,k}+f_{k,j})\)

      这给了我们一定启发,因为 \(Floyd\) 的过程和矩乘的过程十分相似.( \(Floyd\) 的本质是滚掉一维的三维 \(Dp\))

      于是,我们大胆定义新的矩乘 \(:\)

      令矩阵 \(A\) 和 矩阵 \(B\) 相乘的结果为矩阵 \(C\) .

      则定义:

      \[C_{a,b}=\sum_{i=1}^m{min(A_{x,i},B_{i,y})}\]

      容易发现,这个矩乘同样具有结合律.(可以从 \(min\) 运算是和 \(+\) 运算具有同样性质的二元运算符考虑,证明与普通矩乘相同).

      那么这样,我们直接应用引例 \(1\) 中的结论即可解决该题.

      引例 \(3:\) 最小最大边问题

      找不到题目了,国集论文没给题目来源,找不到.

      最小最大边问题 \(:\) 给定一张有向图,求某两点间通过边数恰好为 \(k\) 的路径,使得最大边最小.

      同样的熟悉,同样的问题.

      考虑如果没有长度恰好为 \(k\) 的做法,那么就是把 \(Floyd\) 的核心代码换成 \(:\)
      \[f_{i,j}=max(f_{i,j},min(f_{i,k},f_{k,j}))\]

      能否采用与上面相同的方式重定义矩乘呢?答案是肯定的.

      令矩阵 \(A\) 和矩阵 \(B\) 相乘的结果为矩阵 \(C\).

      则定义 \(:\)

      \[C_{a,b}=\max_{i=1}^m\{min(A_{x,i},B_{i,y})\}\]

      直接套用上面的结论即可.

      参考文献 \(:\) 2008年国集论文(ACM Paper):矩阵乘法在信息学中的应用--余华程

      相关文章
      相关标签/搜索
      4887铁算盘四肖中特香港马会开码结果直播 开奖结果-香港最快开奖现场直播-王中王资料 一肖中特-2018年管家婆彩图 今天-王中王中特网资料大全 白小姐