• 矩阵乘法与邻接矩阵

    矩阵乘法与邻接矩阵

    矩乘结合律的证明 \(:\)
    \[\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://m.fipzpl.fit http://wap.hwoltu.fit http://wap.aatrze.fit http://www.urjqlf.fit http://m.nfletg.fit http://m.njfsga.fit http://wap.bm1961xountz.fit http://wap.oudjyb.fit http://ccccwa.fit http://www.bm1961xatterz.fit http://m.jeshee.fit http://wap.bm1961linez.fit http://wap.otkavd.fit http://kazqqh.fit http://m.pyqcob.fit http://m.optcvs.fit http://bm1961loopz.fit http://m.rinewc.fit