矩阵乘法与邻接矩阵

        矩阵乘法与邻接矩阵

        矩乘结合律的证明 \(:\)
        \[\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年管家婆彩图 扎囊县| 广宗县| 栖霞市| 正定县| 宜春市| 大足县| 南涧| 盱眙县| 武强县| 固原市| 来宾市| 兴义市| 辰溪县| 鸡西市| 西平县| 大厂| 福贡县| 新民市| 将乐县| 漯河市| 棋牌| 华蓥市| 株洲县| 云浮市| 睢宁县| 苗栗县| 宣威市| 焦作市| 双江| 武强县| 乐平市| 邻水| 田东县| 巫溪县| 慈利县| 商城县| 从化市| 乐昌市| 罗甸县| 砚山县| 福州市| 应用必备| 青冈县| 新津县| 涿州市| 长岛县| 江孜县| 西乌| 仲巴县| 二连浩特市| 报价| 隆回县| 吉安县| 怀仁县| 宣威市| 肥西县| 英德市| 中卫市| 金坛市| 涪陵区| 乌恰县| 深泽县| 卓资县| 常州市| 衡阳市| 宁化县| 东乌| 中牟县| 平潭县| 新田县| 宁城县| 德州市| 慈利县| 英德市| 华蓥市| 湖南省| 汝州市| 长春市| 乌鲁木齐县| 白银市| 且末县| 甘洛县| 五指山市| 西峡县| 马鞍山市| 绥江县| 建德市| 新宾| 定结县| 金坛市| 珠海市| 自治县| 曲周县| 牡丹江市| 建昌县| 云林县| 平武县| 康马县| 纳雍县| 南宁市| 福州市| 高阳县| 澄迈县| 广丰县| 浦县| 丁青县| 漾濞| 大同市| 磴口县| 尚义县| 乌兰浩特市| 定安县| 女性| 河南省| 河曲县| 吉安市| 徐水县| 金寨县| 银川市| 和平县| 同仁县| 吉林市| 杨浦区| 朝阳市| 桑日县| 昌黎县| 石景山区| 峨眉山市| 盐亭县| 萍乡市| 温宿县| 吉安县| 营山县| 府谷县| 阿城市| 长垣县| 罗定市| 盐津县| 墨竹工卡县| 板桥市| 凯里市| 定安县| 永宁县| 嘉禾县| 芜湖市| 北宁市| 凭祥市| 固阳县| 南阳市| 昂仁县| 包头市| 通化县| 沅江市| 乌兰县| 阳高县| 宁河县| 库车县| 古蔺县| 恩平市| 东港市| 肃北| 洪雅县| 桐柏县| 沁水县| 青铜峡市| 象山县| 平乐县| 元朗区| 大同市| 宁化县| 焦作市| 安顺市| 扎囊县| 吉木萨尔县| 湘潭县| 合江县| 吉首市| 拜泉县| 辽宁省| 遵义县| 廊坊市| 文昌市| 南京市| 丹棱县| 股票| 西宁市| 涞源县| 凤台县| 宝丰县| 广昌县| 康平县| 武邑县| 英超| 松阳县| 祁连县| 开原市| 通许县| 钦州市| 日照市| 上思县| 神农架林区| 如东县| 星子县| 林口县| 临沧市| 来凤县| 茶陵县| 南皮县| 肇庆市| 梅河口市| 库尔勒市| 东安县| 苏州市| 甘德县| 阿尔山市| 通海县| 边坝县| 特克斯县| 丰台区| 江城| 宜兰市| 马边| 曲靖市| 余干县| 仙居县| 包头市| 页游| 化德县| 普安县| 文水县| 上犹县| 铜梁县| 砚山县| 林周县| 屯门区| 泾源县| 长武县| 湘潭市| 宁夏| 梁河县| 德保县| 东兰县| 福安市| 赫章县| 周口市| 八宿县| 平安县| 抚顺市| 莱阳市| 双峰县| 新田县| 安福县| 孝义市| 克拉玛依市| 金昌市| 孟津县| 区。| 吉安县| 离岛区| 平舆县| 浦县| 永嘉县| 南宁市| 雷波县| 河池市| 西安市| 巩留县| 临泽县| 洛南县| 甘洛县| 竹溪县| 萝北县| 革吉县| 饶河县| 搜索| 松原市| 新源县| 武城县| 荆门市| 遵义市| 长春市| 兖州市| 扶风县| 奉节县| 平乐县| 白玉县| 惠东县| 湖州市| 宾川县| 永兴县| 蚌埠市| 遂宁市| 勃利县| 玉田县| 大丰市| 江北区| 改则县| 新津县| 安化县| 吉木乃县| 宣武区| 灵武市| 甘孜县| 郸城县| 林西县| 巴中市| 嘉荫县| 丰都县| 永吉县| 安顺市| 阳城县| 伊春市| 延寿县| 调兵山市| 富锦市| 辽源市| 河西区| 蓝田县| 宣威市| 聊城市| 金昌市| 望城县| 和静县| 铜山县| 德阳市| 仁怀市| 嘉义市| 迭部县| http://3g.gz1980paragraphc.fun http://3g.yqo8j1rl2v.fun http://3g.gz1980pushc.fun http://3g.gz1980perfectc.fun http://3g.gz1980docuzentc.fun http://3g.gz1980cleanc.fun http://3g.yqo2j2rl8v.fun http://3g.bo2020edges.fun http://3g.gz1980authorc.fun http://3g.yqo0j8rl0v.fun http://3g.gz1980springc.fun http://3g.yqo8j3rl8v.fun http://3g.bo2020gives.fun http://3g.gz1980beachc.fun http://3g.bo2020sequences.fun http://3g.gz1980tradezarkc.fun http://3g.gz1980applyc.fun http://3g.bo2020roots.fun