<menu id="ekugk"></menu>
  • <input id="ekugk"></input><object id="ekugk"></object>
  • <input id="ekugk"><u id="ekugk"></u></input>
    <menu id="ekugk"></menu>
  • <input id="ekugk"></input>
  • <menu id="ekugk"><tt id="ekugk"></tt></menu>
    <object id="ekugk"><acronym id="ekugk"></acronym></object>
    <object id="ekugk"></object>
    <table id="ekugk"><small id="ekugk"></small></table>
  • <input id="ekugk"><u id="ekugk"></u></input>
    <menu id="ekugk"></menu>
  • 矩阵乘法与邻接矩阵

    矩阵乘法与邻接矩阵

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

    相关文章
    相关标签/搜索
    2Cm49cOm招猫49论坛 茌平县| 长海县| 玉林市| 淮阳县| 赤峰市| 昭觉县| 施甸县| 渭源县| 津南区| 佛坪县| 桐乡市| 霍林郭勒市| 河南省| 扎鲁特旗| 双辽市| 江北区| 昌吉市| 唐海县| 沧州市| 乐亭县| 衡水市| 四子王旗| 连南| 普宁市| 阳朔县| 巴彦县| 红河县| 吴江市| 沙洋县| 定兴县| 宁明县| 陆河县| 贵州省| 曲麻莱县| 射洪县| 波密县| 贵南县| 渑池县| 梁山县| 柳林县| 石阡县| 衢州市| 白朗县| 泗阳县| 曲靖市| 和顺县| 商水县| 米易县| 牡丹江市| 桃园县| 巨鹿县| 玛曲县| 马关县| 江津市| 天台县| 绥棱县| 梁河县| 邹城市| 合水县| 青阳县| 湟源县| 望奎县| 南通市| 荔波县| 玛沁县| 凤庆县| 南川市| 吉安县| 怀来县| 三台县| 万安县| 德安县| 社会| 新沂市| 安宁市| 界首市| 德庆县| 盐池县| 和平区| 汤原县| 松江区| 游戏| 濮阳县| 许昌县| 大同县| 麻江县| 汤阴县| 武穴市| 枣强县| 汝州市| 芦山县| 交口县| 定襄县| 陵川县| 延庆县| 苗栗市| 通道| 大新县| 南靖县| 九江县| 教育| 广丰县| 民乐县| 昌乐县| 闻喜县| 安丘市| 车致| 和林格尔县| 广宗县| 集安市| 威远县| 龙胜| 府谷县| 比如县| 黑水县| 衡南县| 宿州市| 杂多县| 将乐县| 长阳| 图木舒克市| 蓝山县| 色达县| 久治县| 五常市| 青冈县| 鹤庆县| 司法| 博白县| 安徽省| 右玉县| 喜德县| 通州市| 都兰县| 鄱阳县| 丹凤县| 三都| 体育| 广河县| 敖汉旗| 泰和县| 太康县| 宁乡县| 洛宁县| 武夷山市| 铁力市| 江达县| 百色市| 江源县| 塔城市| 武隆县| 林口县| 大同县| 昌图县| 大足县| 丘北县| 萝北县| 湄潭县| 亚东县| 汶川县| 扶绥县| 永定县| 岫岩| 通榆县| 永和县| 德昌县| 丽水市| 道孚县| 平乡县| 连江县| 南阳市| 两当县| 奇台县| 西丰县| 库伦旗| 神池县| 青铜峡市| 铜梁县| 襄城县| 涿鹿县| 文山县| 鸡泽县| 澄迈县| 克什克腾旗| 蒙自县| 搜索| 乌拉特后旗| 竹山县| 万源市| 平昌县| 斗六市| 温宿县| 梁平县| 赤壁市| 邳州市| 湘西| 荥阳市| 通辽市| 汝州市| 定边县| 荔浦县| 筠连县| 元阳县| 民乐县| 荣昌县| 牟定县| 盐山县| 通渭县| 遵义市| 周口市| 双鸭山市| 乐至县| 珲春市| 成都市| 景泰县| 桂平市| 新平| 兰考县| 浪卡子县| 凤山市| 张家川| 横峰县| 崇仁县| 石景山区| 达日县| 高唐县| 花莲县| 陆丰市| 山东| 大安市| 新河县| 朝阳市| 新化县| 平塘县| 平乡县| 星座| 丰原市| 甘洛县| 安康市| 旺苍县| 福清市| 凤翔县| 许昌市| 常州市| 澄江县| 无极县| 大竹县| 额尔古纳市| 宁陕县| 城市| 尉犁县| 化隆| 碌曲县| 商南县| 腾冲县| 永城市| 郎溪县| 蒲城县| 祁东县| 中西区| 高州市| 察哈| 鄂托克前旗| 武隆县| 文山县| 加查县| 炉霍县| 会东县| 长顺县| 澎湖县| 银川市| 城口县| 杨浦区| 且末县| 余干县| 突泉县| 井研县| 体育| 南平市| 昭平县| 离岛区| 龙江县| 荔波县| 肃南| 镇雄县| 裕民县| 慈溪市| 五峰| 屏边| 晴隆县| 四子王旗| 金塔县| 昌邑市| 开鲁县| 永州市| 镇沅| 安乡县| 霍州市| 建阳市| 三原县| 垫江县| 阜城县| 奉新县| 许昌市| 镇平县| 合川市| 东源县| 上饶县| 克东县| 搜索| 望谟县| 大新县| 平阴县| 固原市| 常山县| 孟津县| 抚宁县| 邹城市| 兰州市| 达拉特旗| 阳信县| 仁布县| 哈密市| 大理市| 九龙坡区| 百色市| 石狮市| 阿克苏市| http://3g.yqo2j5rl0v.fun http://3g.gz1980rowc.fun http://3g.yqo1j3rl5v.fun http://3g.bo2020ends.fun http://3g.yqo7j2rl7v.fun http://3g.bo2020installs.fun http://3g.bo2020books.fun http://3g.gz1980juzpc.fun http://3g.yqo3j9rl7v.fun http://3g.bo2020certificates.fun http://3g.gz1980wallc.fun http://3g.gz1980advancec.fun http://3g.yqo0j1rl0v.fun http://3g.bo2020baths.fun http://3g.yqo5j2rl9v.fun http://3g.bo2020cases.fun http://3g.yqo7j9rl3v.fun http://3g.bo2020exists.fun