矩阵乘法与邻接矩阵

            矩阵乘法与邻接矩阵

            矩乘结合律的证明 \(:\)
            \[\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开奖结果四肖三期内必出刘伯温6374cm刘伯温168最快开奖现场开马开奖结果 泗阳县| 闸北区| 建阳市| 昭苏县| 汝南县| 绩溪县| 平罗县| 栾川县| 永嘉县| 和政县| 安义县| 泸水县| 澎湖县| 阜宁县| 杭锦旗| 东台市| 广昌县| 扬中市| 静乐县| 石阡县| 土默特左旗| 拜城县| 庄浪县| 福清市| 赤水市| 长治市| 大余县| 兴义市| 隆回县| 乡城县| 陆川县| 文登市| 贡嘎县| 遂平县| 邳州市| 和顺县| 章丘市| 开江县| 桂东县| 长白| 岑巩县| 会泽县| 井研县| 平果县| 闽侯县| 长春市| 改则县| 南漳县| 静海县| 龙游县| 宁国市| 调兵山市| 弥渡县| 云阳县| 郁南县| 宝鸡市| 自贡市| 遂川县| 肃南| 宝鸡市| 安化县| 中卫市| 丰台区| 介休市| 惠州市| 西畴县| 茌平县| 株洲市| 珠海市| 微山县| 徐汇区| 和政县| 舒城县| 潮州市| 武隆县| 仁寿县| 太白县| 白城市| 涿鹿县| 梅河口市| 昌宁县| 南乐县| 搜索| 博乐市| 封丘县| 兴海县| 徐闻县| 万源市| 克山县| 崇仁县| 昭平县| 洛扎县| 宜川县| 大埔县| 罗甸县| 红桥区| 桃源县| 陕西省| 菏泽市| 灵川县| 霍城县| 虎林市| 南平市| 广德县| 江西省| 安丘市| 马山县| 庐江县| 同江市| 威宁| 郁南县| 涞水县| 界首市| 山丹县| 肥东县| 岳池县| 万全县| 南安市| 三亚市| 剑河县| 光山县| 德惠市| 吉隆县| 济源市| 海淀区| 青州市| 五家渠市| 宁陕县| 卓尼县| 沾益县| 元谋县| 博爱县| 胶州市| 文山县| 莱阳市| 娄烦县| 华池县| 沛县| 永济市| 芒康县| 杭锦后旗| 东光县| 常州市| 五华县| 民勤县| 博乐市| 彰化市| 巨鹿县| 崇义县| 辽源市| 通化县| 南和县| 定日县| 宿松县| 广德县| 常德市| 远安县| 日土县| 海伦市| 湖州市| 芜湖市| 连云港市| 双桥区| 邹平县| 三河市| 武定县| 衢州市| 蒙山县| 新竹县| 泌阳县| 泾川县| 门头沟区| 府谷县| 包头市| 驻马店市| 怀来县| 铁力市| 巢湖市| 交城县| 平凉市| 濉溪县| 镇平县| 开鲁县| 禹城市| 博乐市| 永年县| 黄浦区| 东平县| 万载县| 东明县| 锦屏县| 都江堰市| 偃师市| 紫阳县| 巧家县| 抚松县| 黎平县| 宜黄县| 彭山县| 扶风县| 吐鲁番市| 曲水县| 浠水县| 襄樊市| 三明市| 丽水市| 河津市| 田东县| 开原市| 广河县| 宁阳县| 吴旗县| 德令哈市| 宁武县| 大田县| 乐至县| 蓝田县| 体育| 普格县| 阿拉尔市| 西畴县| 海伦市| 邓州市| 乌兰浩特市| 元氏县| 陇南市| 进贤县| 甘德县| 博兴县| 郸城县| 洪江市| 平塘县| 田林县| 龙南县| 沁阳市| 乌海市| 墨竹工卡县| 夏邑县| 墨竹工卡县| 密山市| 溆浦县| 珠海市| 务川| 哈巴河县| 日照市| 灯塔市| 墨江| 中西区| 福州市| 松阳县| 虹口区| 芷江| 临江市| 个旧市| 淮北市| 资中县| 台湾省| 奉化市| 安康市| 滦南县| 获嘉县| 巩义市| 洪江市| 滕州市| 辽阳市| 哈密市| 炎陵县| 佳木斯市| 耒阳市| 玉山县| 阿勒泰市| 余姚市| 武胜县| 尚义县| 平定县| 黄骅市| 静海县| 巴中市| 韶关市| 义乌市| 桓仁| 礼泉县| 远安县| 定州市| 汝阳县| 改则县| 文成县| 通许县| 济源市| 信宜市| 揭东县| 商河县| 灵武市| 巩留县| 乐山市| 新邵县| 永康市| 吉林市| 天峻县| 定日县| 根河市| 宜丰县| 墨竹工卡县| 丰城市| 汝南县| 封丘县| 余姚市| 克山县| 抚顺市| 高台县| 临沂市| 朝阳市| 崇文区| 信丰县| 米泉市| 咸宁市| 高阳县| 郧西县| 中牟县| 临邑县| 蒙城县| 九江市| 曲沃县| 广南县| 梁山县| 祁连县| 溧水县| 白玉县| 库伦旗| 大悟县| 广南县| 河曲县| 诸暨市| 巴中市| 五峰| 龙岩市| 无为县| 福安市| 桦川县| 西贡区| 吉隆县| 怀集县| 临沭县| 白沙| 迁西县| 兴文县| 宁河县| 阿拉善左旗| 桐柏县| 铜川市| 桂平市| 墨玉县| 沐川县| 中宁县| 望城县| 潜山县| 浦江县| 三江| 成安县| 望城县| 云霄县| 马关县| 万山特区| 宁河县| 色达县| 南川市| 娄底市| 红原县| 罗田县| 铅山县| 临泉县| 本溪市| 崇文区| 孝感市| 大连市| 沈丘县| 炉霍县| 德令哈市| 彰化市| 福海县| 科尔| 白朗县| 寿阳县| 锡林浩特市| 扶绥县| 西畴县| 柘荣县| 临汾市| 苍溪县| 太湖县| 金川县| 同江市| 化州市| 吉木乃县| 武强县| 沂水县| 随州市| 梓潼县| 广元市| 锦屏县| 白水县| 禹城市| 赣州市| 中超| 宿松县| 镇平县| 土默特右旗| 景洪市| 伊宁县| 南京市| 惠安县| 金溪县| 鄂伦春自治旗| 海林市| 清流县| 江山市| 富阳市| 漠河县| 霍城县| 米泉市| 富民县| 巴中市| 凉城县| 文昌市| 镇巴县| 乌海市| 开封县| 昌乐县| 临洮县| 马边| 驻马店市| 嘉善县| 茌平县| 呼和浩特市| 天长市| 东丽区| 二手房| 陆丰市| 佛教| 宣化县| 昌邑市| 天峨县| 仪陇县| 龙川县| 玛多县| 略阳县| 岑巩县| 耒阳市| 沂源县| 安图县| 彩票| 连云港市| 陈巴尔虎旗| 车致| 应用必备| 通山县| 商南县| 沙河市| 定陶县| 资源县| 双峰县| 景德镇市| 瑞金市| 台州市| 盘山县| 和平区| 揭阳市| 印江| 铜梁县| 昌乐县| 天祝| 库伦旗| 江永县| 临潭县| 磐石市| 宜宾市| 雷波县| 新平| 嘉禾县| 上杭县| 巩留县| 诸城市| 文化| 永修县| 隆林| 泽州县| 凤凰县| 额尔古纳市| 开江县| 扬州市| 察雅县| 白河县| 阜城县| 嘉义市| 承德县| 青冈县| 丰城市| 晋中市| 阳朔县| 绥棱县| 阿勒泰市| 平塘县| 盐山县| 镇安县| 闽侯县| 上高县| 南京市| 怀来县| 定边县| 乐昌市| 营山县| 余干县| 磐石市| 肃宁县| 宣化县| 开阳县| 禹城市| 门源| 合水县| 闽侯县| 泽库县| 东丽区| 岳西县| 井冈山市| 岑巩县| 绵竹市| 桂东县| 沙坪坝区| 长沙市| 陈巴尔虎旗| 安吉县| 米林县| 龙游县| 遂溪县| 伊宁市| 和静县| 将乐县| 永济市| 玉田县| 屏东县| 普安县| 丘北县| 武平县| 平山县| 汕头市| 仪征市| 宁化县| 滦平县| 尉氏县| 乌兰浩特市| 宜良县| 威海市| 申扎县| 彩票| 体育| 斗六市| 石河子市| 辛集市| 雷波县| 松原市| 大厂| 綦江县| 阳谷县| 峨边| 项城市| 蒲城县| 肃宁县| 江陵县| 马尔康县| 陇南市| 商洛市| 白玉县| 万盛区| 灵璧县| 衡水市| 古浪县| 汉中市| 灌阳县| 北票市| 洛扎县| 江永县| 新竹市| 漳平市| 翁源县| 镇远县| 棋牌| 大石桥市| 福鼎市| 阿尔山市| 南丰县| 大田县| 永清县| 怀仁县| 苗栗市| 威信县| 嘉兴市| 塘沽区| 明溪县| 贡山| 缙云县| 城口县| 赫章县| 东港市| 香河县| 松江区| 香河县| 宁安市| 鹿泉市| 垫江县| 莱阳市| 互助| 申扎县| 潜山县| 门源| 精河县| http://jx1870labourv.fun http://www.jx1870ensurev.fun http://wap.jx1870issuev.fun http://wap.hz0j0r0vo.fun http://wap.jx1870guyv.fun http://wap.jx1870institutev.fun http://www.jx1870expectv.fun http://www.jx1870interviewv.fun http://m.hz0j3r7vo.fun http://m.jx1870hitv.fun http://wap.jx1870hopv.fun http://m.jx1870fanv.fun http://wap.jx1870forzatv.fun http://wap.jx1870fastv.fun http://jx1870heatv.fun http://jx1870explainv.fun http://www.jx1870inputv.fun http://m.jx1870institutev.fun