• 矩阵乘法与邻接矩阵

    矩阵乘法与邻接矩阵

    矩乘结合律的证明 \(:\)
    \[\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特马开奖结果查询三肖中特期期准免费118图库 安龙县| 贺州市| 芦山县| 西乌珠穆沁旗| 额敏县| 泰安市| 汉川市| 阳信县| 吴江市| 萨迦县| 内乡县| 遵化市| 水富县| 尚义县| 哈尔滨市| 民权县| 栖霞市| 齐齐哈尔市| 徐闻县| 衡阳市| 达拉特旗| 麟游县| 正阳县| 怀远县| 镇沅| 肇东市| 惠水县| 佛学| 江城| 库车县| 勃利县| 东海县| 阜新市| 余江县| 绵阳市| 衡山县| 万载县| 洪洞县| 永平县| 井冈山市| 杂多县| 清流县| 蒲江县| 邻水| 祁东县| 宁明县| 资中县| 镶黄旗| 宁河县| 五原县| 青河县| 荔波县| 始兴县| 天祝| 英吉沙县| 毕节市| 大田县| 潢川县| 融水| 武隆县| 稻城县| 航空| 沙坪坝区| 敦煌市| 荃湾区| 林周县| 芦溪县| 莎车县| 凭祥市| 阿拉善右旗| 甘肃省| 桐梓县| 大同市| 遂川县| 登封市| 新干县| 牙克石市| 灵寿县| 霸州市| 东平县| 铅山县| 芜湖市| 大同市| 南宁市| 嘉荫县| 叙永县| 华阴市| 正镶白旗| 永吉县| 吉水县| 彭山县| 炉霍县| 年辖:市辖区| 延长县| 应用必备| 朔州市| 德钦县| 舟曲县| 孝感市| 邢台县| 鲁山县| 唐海县| 永康市| 威海市| 江津市| 纳雍县| 凤冈县| 崇州市| 同心县| 定安县| 安宁市| 大埔县| 韩城市| 东山县| 久治县| 三明市| 丽江市| 长海县| 邻水| 大埔县| 甘肃省| 交城县| 杭州市| 鹰潭市| 宁都县| 从江县| 新化县| 讷河市| 高陵县| 磐石市| 凭祥市| 教育| 山西省| 东明县| 雅江县| 西昌市| 盐源县| 田东县| 武汉市| 邵武市| 杭锦后旗| 乌苏市| 龙州县| 商都县| 江永县| 嘉鱼县| 磐安县| 永靖县| 抚顺市| 洱源县| 新安县| 蚌埠市| 靖安县| 株洲县| 宜昌市| 蓬莱市| 内丘县| 大理市| 福安市| 临潭县| 台前县| 曲阳县| 昭通市| 鄂托克前旗| 武乡县| 郧西县| 綦江县| 金秀| 循化| 高雄县| 泗洪县| 开鲁县| 本溪市| 东乡族自治县| 抚顺市| 富川| 胶南市| 民勤县| 乐昌市| 贺兰县| 青冈县| 临桂县| 佛坪县| 牙克石市| 合肥市| 上高县| 砀山县| 建昌县| 大埔区| 梓潼县| 云梦县| 古田县| 深州市| 岢岚县| 广宁县| 山西省| 鄢陵县| 固安县| 抚松县| 汝州市| 靖安县| 涟源市| 荣昌县| 万山特区| 宁南县| 福泉市| 丰都县| 分宜县| 吴忠市| 浙江省| 轮台县| 平潭县| 巴青县| 扬中市| 望奎县| 拉孜县| 临沂市| 沙雅县| 历史| 华阴市| 石门县| 郑州市| 江陵县| 延寿县| 黎平县| 济南市| 乐清市| 油尖旺区| 金寨县| 湄潭县| 顺义区| 建平县| 灵山县| 定日县| 乌什县| 冕宁县| 嵩明县| 崇左市| 广南县| 南部县| 襄城县| 安图县| 米脂县| 牙克石市| 华容县| 高碑店市| 怀宁县| 曲靖市| 城固县| 巴楚县| 霍州市| 闵行区| 辽宁省| 沿河| 博白县| 灵石县| 涪陵区| 兴城市| 平昌县| 灌云县| 昭平县| 兴仁县| 布尔津县| 乌审旗| 绩溪县| 宁德市| 韶山市| 遂平县| 张家港市| 文水县| 开远市| 涟源市| 诸城市| 巴林左旗| 固安县| 丹棱县| 晋中市| 龙南县| 孝昌县| 隆回县| 驻马店市| 江北区| 河池市| 利辛县| 阿拉善右旗| 通榆县| 隆尧县| 普宁市| 开原市| 东源县| 高邑县| 平度市| 普定县| 大厂| 和平区| 临江市| 新余市| 济阳县| 柘荣县| 金山区| 河北省| 柯坪县| 惠州市| 庆元县| 且末县| 荆门市| 龙胜| 土默特左旗| 柳州市| 天水市| 乐亭县| 绩溪县| 罗田县| 韶山市| 广东省| 通山县| 塔河县| 文化| 清原| 永定县| 伊宁县| 吉安县| 织金县| 道真| 集安市| 昭觉县| 绥阳县| 罗城| http://3g.gz1980huzorc.fun http://3g.bo2020loops.fun http://3g.yqo8j4rl2v.fun http://3g.yqo5j6rl7v.fun http://3g.bo2020hills.fun http://3g.gz1980frontc.fun http://3g.yqo7j0rl9v.fun http://3g.bo2020fits.fun http://3g.gz1980alertc.fun http://3g.bo2020stops.fun http://3g.gz1980platec.fun http://3g.yqo4j6rl2v.fun http://3g.bo2020carts.fun http://3g.yqo8j5rl7v.fun http://3g.bo2020exercises.fun http://3g.bo2020accepts.fun http://3g.gz1980appropriatec.fun http://3g.yqo8j9rl8v.fun