矩阵乘法与邻接矩阵

            矩阵乘法与邻接矩阵

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

            相关文章
            相关标签/搜索
            2020王中王资料一肖中2018年香港开奖日期表2018香港历史开奖结果香港最快开奖现场直播 乌拉特中旗| 嘉黎县| 金寨县| 丘北县| 吉隆县| 五寨县| 日喀则市| 江油市| 临沂市| 会宁县| 饶河县| 涡阳县| 贵溪市| 浦县| 泊头市| 双流县| 土默特左旗| 山丹县| 桓台县| 滦平县| 旌德县| 海丰县| 大宁县| 平舆县| 周宁县| 南平市| 南雄市| 霞浦县| 和龙市| 灵丘县| 伊吾县| 高密市| 石景山区| 新乡县| 聂荣县| 东乌珠穆沁旗| 彝良县| 盐津县| 镇坪县| 来宾市| 祁门县| 桓仁| 江川县| 建宁县| 三河市| 北流市| 滦平县| 四川省| 阿克陶县| 阿拉善右旗| 汝南县| 永兴县| 德保县| 卢湾区| 池州市| 丰原市| 西城区| 古蔺县| 兴和县| 县级市| 观塘区| 义乌市| 中江县| 云龙县| 台中市| 张北县| 广灵县| 正镶白旗| 隆子县| 淅川县| 扬州市| 长子县| 天全县| 通化县| 道孚县| 海晏县| 阿克陶县| 胶州市| 团风县| 怀集县| 中山市| 中牟县| 柳林县| 镇雄县| 眉山市| 吉安县| 宝山区| 永昌县| 九台市| 星座| 剑川县| 文安县| 瑞金市| 江油市| 呈贡县| 西昌市| 通许县| 珲春市| 大丰市| 如东县| 历史| 民丰县| 平江县| 磐安县| 类乌齐县| 石城县| 保康县| 田东县| 邻水| 鹤庆县| 宁河县| 平凉市| 巴中市| 翁源县| 璧山县| 宁乡县| 贵港市| 女性| 苏尼特左旗| 大城县| 大渡口区| 华坪县| 新竹市| 安达市| 顺昌县| 宁安市| 浮山县| 西吉县| 延长县| 大悟县| 惠来县| 弋阳县| 法库县| 天祝| 天祝| 兴安县| 阜新市| 自治县| 梅河口市| 临城县| 修水县| 宁德市| 宁国市| 长岛县| 新余市| 太康县| 成安县| 江北区| 钦州市| 武山县| 建始县| 通榆县| 海南省| 灵丘县| 延津县| 天长市| 高安市| 大竹县| 图木舒克市| 陵川县| 延长县| 托里县| 聂拉木县| 林口县| 衢州市| 鹿泉市| 平远县| 山阳县| 浙江省| 澄迈县| 石河子市| 康马县| 旬邑县| 武宣县| 汤阴县| 无极县| 读书| 正蓝旗| 新闻| 吉木萨尔县| 东源县| 比如县| 怀化市| 区。| 东源县| 比如县| 临安市| 广州市| 福海县| 广宗县| 南开区| 杭锦旗| 隆林| 石台县| 吴川市| 南京市| 盘山县| 宝鸡市| 砀山县| 息烽县| 柏乡县| 英德市| 广西| 桂东县| 江川县| 新津县| 循化| 石景山区| 通山县| 伊金霍洛旗| 宁夏| 德钦县| 隆回县| 辽源市| 昭觉县| 达尔| 独山县| 磐石市| 泉州市| 永康市| 奈曼旗| 保康县| 香格里拉县| 青海省| 澄城县| 麻江县| 盘锦市| 西乡县| 六安市| 丽江市| 寿光市| 抚远县| 乌鲁木齐县| 潮州市| 台北市| 历史| 修武县| 东安县| 浮梁县| 故城县| 扎囊县| 虞城县| 彩票| 南皮县| 陆河县| 漳州市| 桂东县| 甘谷县| 体育| 西充县| 白朗县| 梁河县| 泽普县| 东乌| 淅川县| 当阳市| 抚顺县| 乌鲁木齐县| 偏关县| 大同市| 永登县| 锦屏县| 漳平市| 汉阴县| 孝感市| 博罗县| 双鸭山市| 广安市| 临夏县| 成都市| 深圳市| 长治县| 云霄县| 章丘市| 肇州县| 阜新| 晋城| 昆山市| 永善县| 长兴县| 武安市| 成武县| 朝阳区| 靖江市| 余干县| 盱眙县| 奉新县| 孟津县| 宁波市| 武乡县| 青海省| 三原县| 进贤县| 米林县| 磐石市| 湖南省| 山丹县| 诏安县| 博罗县| 九龙城区| 水城县| 乐至县| 廉江市| 汝州市| 平武县| 武汉市| 阿城市| 紫阳县| 东阳市| 西和县| 新建县| 长寿区| 西城区| 寻乌县| 台前县| 方城县| 伊川县| 万安县| 长葛市| 乐平市| 汤原县| 鄂伦春自治旗| 抚顺市| 财经| 武宁县| 谢通门县| 乌兰察布市| 和田市| 容城县| 宜春市| 康保县| 永州市| 乌兰县| 金湖县| 响水县| 铜陵市| 济南市| 东海县| 罗定市| 乳山市| 甘谷县| 宁陵县| 和林格尔县| 卢龙县| 英德市| 清涧县| 林甸县| 都匀市| 台东县| 天台县| 奉贤区| 遂昌县| 介休市| 滦南县| 沙田区| 崇左市| 招远市| 清徐县| 革吉县| 怀宁县| 芒康县| 资溪县| 小金县| 左云县| 苍南县| 平乐县| 天水市| 左云县| 运城市| 阳泉市| 临江市| 科尔| 鹤岗市| 汉阴县| 枞阳县| 乌拉特后旗| 克拉玛依市| 灵宝市| 通海县| 高雄县| 徐水县| 宿松县| 建始县| 郸城县| 黔西县| 当涂县| 牙克石市| 丰原市| 张家口市| 达州市| 新绛县| 灵台县| 广东省| 阿拉善盟| 成都市| 门源| 昌黎县| 枞阳县| 武宁县| 铜山县| 平阴县| 龙州县| 新田县| 婺源县| 长岭县| 盱眙县| 城步| 伊川县| 武邑县| 定西市| 瑞昌市| 北川| 阿荣旗| 南康市| 马关县| 河间市| 桂阳县| 衡水市| 海门市| 祁门县| 泗洪县| 南皮县| 红河县| 辽阳县| 兴仁县| 马鞍山市| 米脂县| 石台县| 兴文县| 静安区| 绵竹市| 九台市| 清水河县| 潞西市| 山西省| 托里县| 凤城市| 盱眙县| 鹤岗市| 香格里拉县| 徐州市| 阿拉善左旗| 古田县| 抚远县| 梁河县| 龙泉市| 惠水县| 万载县| 建水县| 富川| 收藏| 襄垣县| 淳安县| 修水县| 丹江口市| 增城市| 武鸣县| 长乐市| 浙江省| 郎溪县| 寿宁县| 莫力| 鄂伦春自治旗| 甘德县| 通州区| 嘉善县| 吉安市| 绵竹市| 伽师县| 霞浦县| 五常市| 九台市| 平乡县| 多伦县| 乌鲁木齐县| 图木舒克市| 博乐市| 沂南县| 博客| 磐安县| 莎车县| 井冈山市| 滦平县| 珠海市| 兴安县| 湟中县| 镇赉县| 进贤县| 廉江市| 阿坝县| 炉霍县| 三台县| 八宿县| 孟津县| 通州市| 买车| 紫金县| 通道| 凉城县| 蓝山县| 二手房| 浦东新区| 定陶县| 金阳县| 正蓝旗| 北宁市| 台中市| 玛纳斯县| 剑河县| 陆河县| 静安区| 武威市| 南陵县| 秦安县| 宜城市| 阿瓦提县| 漳浦县| 长阳| 密山市| 巩义市| 昌乐县| 会泽县| 岫岩| 桂林市| 安庆市| 迁西县| 岳池县| 九江县| 万全县| 塔城市| 云龙县| 隆尧县| 五指山市| 肥城市| 元谋县| 西城区| 余姚市| 韶关市| 香格里拉县| 二连浩特市| 阳新县| 中牟县| 曲沃县| 伽师县| 林口县| 玉树县| 平江县| 镇赉县| 九龙城区| 成武县| 普格县| 顺义区| 竹溪县| 喜德县| 杂多县| 奈曼旗| 长乐市| 南昌市| 集安市| 柘荣县| 双辽市| 油尖旺区| 焦作市| 仙居县| 海淀区| 大渡口区| 永济市| 荔浦县| 建宁县| 沿河| 珲春市| 洛南县| 曲阳县| 汪清县| 台安县| 灵寿县| 于田县| 鄂托克旗| 富锦市| 抚松县| 富蕴县| 普格县| 大埔县| 盐城市| 林芝县| 铜陵市| 蓬安县| 安泽县| 沂源县| 綦江县| 于田县| 唐海县| 明光市| 许昌县| 濮阳市| 南通市| 临西县| 米泉市| 永仁县| 日照市| 湟源县| 随州市| 灵石县| 筠连县| 涞源县| 连云港市| 纳雍县| 澄城县| 横山县| 泾源县| 密云县| 霍州市| 江孜县| 平塘县| 辰溪县| http://www.ntqhmh.fit http://wap.gbugzs.fit http://www.okyweh.fit http://www.xlerli.fit http://wap.bm1961xapz.fit http://www.unlosy.fit http://qhbwth.fit http://www.pqoxon.fit http://www.wozfox.fit http://m.oowhpw.fit http://www.iyzxjq.fit http://wap.tbyepw.fit http://m.nmswkn.fit http://wap.iduhkn.fit http://m.qskkdm.fit http://wap.ttfylo.fit http://m.ineliv.fit http://m.csgnzh.fit