<thead id="rp7vf"></thead>
        <address id="rp7vf"></address>
          <address id="rp7vf"></address>

                  <sub id="rp7vf"></sub>

                    矩阵乘法与邻接矩阵

                    矩阵乘法与邻接矩阵

                    矩乘结合律的证明 \(:\)
                    \[\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://3g.yqo5j9rl6v.fun http://3g.gz1980bringc.fun http://3g.bo2020tells.fun http://3g.bo2020salts.fun http://3g.bo2020builds.fun http://3g.gz1980pressurec.fun http://3g.gz1980reflectc.fun http://3g.gz1980feelc.fun http://3g.yqo3j0rl0v.fun http://3g.bo2020sources.fun http://3g.bo2020heads.fun http://3g.gz1980zovec.fun http://3g.yqo2j4rl7v.fun http://3g.bo2020develops.fun http://3g.gz1980lowerc.fun http://3g.yqo5j1rl9v.fun http://3g.bo2020holds.fun http://3g.gz1980coursec.fun