• 矩阵乘法与邻接矩阵

    矩阵乘法与邻接矩阵

    矩乘结合律的证明 \(:\)
    \[\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):矩阵乘法在信息学中的应用--余华程

    相关文章
    相关标签/搜索
    管家婆精选八码中特蓝月亮 兴义市| 繁峙县| 全州县| 顺义区| 新建县| 临城县| 柞水县| 栖霞市| 烟台市| 宜黄县| 彭阳县| 白银市| 永定县| 平乡县| 白河县| 泗阳县| 兰考县| 东兴市| 永平县| 阿巴嘎旗| 抚顺县| 宣城市| 阳信县| 永城市| 东港市| 铁岭县| 泗洪县| 襄汾县| 共和县| 新泰市| 宣化县| 孟州市| 呼图壁县| 北票市| 沾化县| 慈利县| 石渠县| 新闻| 新田县| 佛冈县| 新邵县| 和林格尔县| 乐陵市| 锡林郭勒盟| 扬中市| 册亨县| 滕州市| 兴宁市| 股票| 留坝县| 通化市| 鄂尔多斯市| 宜章县| 弋阳县| 德清县| 衡水市| 敦煌市| 长乐市| 施秉县| 金坛市| 万州区| 铁岭县| 雅江县| 手机| 西青区| 东乌珠穆沁旗| 炎陵县| 驻马店市| 鱼台县| 旌德县| 乌兰浩特市| 和硕县| 阿瓦提县| 宁乡县| 霍州市| 宁远县| 榆树市| 黎川县| 宜昌市| 郴州市| 汉源县| 沁源县| 承德市| 古交市| 镇赉县| 阿鲁科尔沁旗| 青田县| 平阳县| 焉耆| 内江市| 乌拉特前旗| 洛浦县| 汕尾市| 淳化县| 抚顺市| 洛宁县| 临邑县| 象山县| 江阴市| 乌拉特中旗| 额尔古纳市| 英山县| 垣曲县| 和林格尔县| 张家川| 伊春市| 右玉县| 汝州市| 蓬安县| 林周县| 达日县| 巴楚县| 霍林郭勒市| 禹城市| 京山县| 葫芦岛市| 天镇县| 贵定县| 山东省| 公主岭市| 揭阳市| 静海县| 泰州市| 北碚区| 台中市| 枣阳市| 汉寿县| 大邑县| 博白县| 浦城县| 唐海县| 景泰县| 隆化县| 深州市| 南充市| 苏尼特右旗| 定边县| 北宁市| 永丰县| 壤塘县| 萨嘎县| 长武县| 顺义区| 河曲县| 元氏县| 东辽县| 台安县| 新营市| 商都县| 淳化县| 海晏县| 百色市| 平山县| 萍乡市| 云龙县| 绥中县| 余姚市| 龙泉市| 霞浦县| 安溪县| 金门县| 舟山市| 东宁县| 曲阳县| 千阳县| 宾阳县| 五常市| 信宜市| 泰州市| 万宁市| 台南市| 抚松县| 石门县| 郴州市| 社会| 盐山县| 顺平县| 中西区| 哈巴河县| 三穗县| 连州市| 苏尼特右旗| 海淀区| 白玉县| 秀山| 正蓝旗| 海阳市| 新邵县| 民勤县| 成安县| 彰化市| 墨脱县| 大荔县| 香格里拉县| 共和县| 衡阳市| 城市| 夏津县| 铁力市| 林芝县| 休宁县| 股票| 莲花县| 英山县| 陕西省| 柏乡县| 西藏| 自贡市| 贵定县| 长泰县| 冀州市| 宣汉县| 临清市| 平定县| 邢台市| 上高县| 夏河县| 洪湖市| 资阳市| 黄龙县| 乐亭县| 扎鲁特旗| 东阳市| 当涂县| 定襄县| 阿尔山市| 闻喜县| 本溪| 襄城县| 齐齐哈尔市| 昌邑市| 固阳县| 九龙县| 高碑店市| 安徽省| 普陀区| 富顺县| 东安县| 揭阳市| 商河县| 永泰县| 新乐市| 昌都县| 岳阳县| 宁武县| 双柏县| 张家港市| 伊通| 南澳县| 渭源县| 博爱县| 云南省| 迭部县| 都安| 门源| 犍为县| 锦屏县| 蓬安县| 长顺县| 上高县| 嘉义县| 镇远县| 徐州市| 临高县| 建平县| 儋州市| 五寨县| 新安县| 柳江县| 聂拉木县| 彩票| 额济纳旗| 汝州市| 韶山市| 洪湖市| 金门县| 长治县| 桂平市| 东兰县| 新昌县| 巴南区| 六枝特区| 华安县| 方城县| 道孚县| 孟连| 九龙城区| 阳城县| 天祝| 西林县| 渝中区| 张家界市| 英德市| 五大连池市| 彭山县| 太康县| 建湖县| 九龙县| 满城县| 象山县| 金堂县| 亚东县| 绥滨县| 乡宁县| 隆化县| 蒙城县| 澳门| 汪清县| 科技| 开江县| 上犹县| 右玉县| 汕头市| 罗甸县| 那曲县| 河北省| 万荣县| 大名县| 正定县| 环江| 新龙县| 临沭县| 乌兰浩特市| 乌兰察布市| 石景山区| 泽普县| 巩义市| 辽宁省| http://3g.bo2020requires.fun http://3g.bo2020soils.fun http://3g.gz1980encouragec.fun http://3g.gz1980portionc.fun http://3g.gz1980suckc.fun http://3g.gz1980dotc.fun http://3g.yqo5j5rl0v.fun http://3g.bo2020schezes.fun http://3g.bo2020features.fun http://3g.gz1980rainc.fun http://3g.yqo7j8rl0v.fun http://3g.bo2020parts.fun http://3g.gz1980zissc.fun http://3g.yqo5j3rl0v.fun http://3g.bo2020fruits.fun http://3g.gz1980separatec.fun http://3g.gz1980lastc.fun http://3g.yqo2j8rl8v.fun