• 矩阵乘法与邻接矩阵

    矩阵乘法与邻接矩阵

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

    相关文章
    相关标签/搜索
    四肖中特期期準王中王资料大全枓大全app下载-王中王资料大全枓大全开奖手机版 鄯善县| 闽清县| 晴隆县| 永登县| 神农架林区| 张掖市| 云林县| 渭源县| 当雄县| 清新县| 襄樊市| 普宁市| 平潭县| 通辽市| 宁夏| 长武县| 体育| 阿拉尔市| 伊通| 仁化县| 垫江县| 许昌市| 衡阳县| 灌阳县| 鸡东县| 新疆| 无锡市| 乐亭县| 宣恩县| 安龙县| 天峨县| 富宁县| 德钦县| 克拉玛依市| 五原县| 板桥市| 镇原县| 三亚市| 宝丰县| 乌兰浩特市| 临漳县| 阳春市| 威宁| 曲靖市| 鲜城| 阜新| 钟祥市| 衡山县| 宁南县| 望谟县| 延津县| 临安市| 无极县| 乐昌市| 永春县| 大英县| 山丹县| 介休市| 广安市| 灵武市| 唐海县| 广河县| 和政县| 简阳市| 沈丘县| 仪征市| 大名县| 秦安县| 隆安县| 奉化市| 米林县| 友谊县| 江门市| 富蕴县| 石景山区| 博野县| 新沂市| 舒城县| 鹰潭市| 哈尔滨市| 乌鲁木齐县| 霞浦县| 饶河县| 香港| 共和县| 江北区| 五大连池市| 久治县| 繁峙县| 新干县| 邵武市| 南召县| 昂仁县| 四平市| 南京市| 朝阳市| 苏尼特左旗| 东至县| 紫云| 太仓市| 阿瓦提县| 宁化县| 昌图县| 墨脱县| 莱阳市| 桂阳县| 历史| 简阳市| 牟定县| 红原县| 德格县| 武隆县| 米易县| 呼玛县| 永寿县| 卢氏县| 武邑县| 台北县| 桐乡市| 连平县| 石棉县| 湛江市| 五家渠市| 柞水县| 米林县| 酒泉市| 奇台县| 类乌齐县| 宁海县| 论坛| 新宁县| 新巴尔虎左旗| 微博| 彩票| 织金县| 同德县| 五原县| 昌乐县| 湘阴县| 临桂县| 屏南县| 株洲市| 电白县| 长岛县| 延庆县| 台湾省| 鹤庆县| 广饶县| 乌鲁木齐市| 灌阳县| 曲沃县| 新昌县| 禹州市| 长宁县| 化隆| 贡嘎县| 景宁| 高要市| 马尔康县| 牡丹江市| 江城| 文成县| 裕民县| 建阳市| 陇川县| 兰溪市| 平山县| 邹城市| 兰坪| 南江县| 易门县| 汉源县| 云南省| 祁东县| 开化县| 潞城市| 凤凰县| 普洱| 静安区| 彰化市| 罗源县| 长宁县| 如东县| 马山县| 南充市| 会东县| 霍州市| 杭锦后旗| 浦东新区| 西贡区| 喀喇| 绍兴市| 正宁县| 鄂托克前旗| 介休市| 达孜县| 云霄县| 遵义县| 阿图什市| 稷山县| 中牟县| 龙川县| 三穗县| 洛浦县| 同仁县| 玛曲县| 钟山县| 松原市| 福海县| 龙岩市| 海南省| 太仆寺旗| 惠来县| 宜兰市| 开封市| 凭祥市| 新营市| 海安县| 南昌县| 娄底市| 南城县| 清苑县| 历史| 雅江县| 广元市| 辽宁省| 西昌市| 巴彦淖尔市| 正安县| 竹北市| 建德市| 泰和县| 札达县| 晋州市| 左云县| 五家渠市| 黎平县| 永靖县| 渝中区| 长沙县| 清丰县| 临沂市| 邯郸县| 雷波县| 时尚| 张家川| 宝山区| 雅江县| 察雅县| 聂荣县| 兰坪| 大理市| 康定县| 南部县| 五莲县| 榆树市| 云林县| 古蔺县| 徐水县| 衡阳县| 高尔夫| 新干县| 姚安县| 乐都县| 旅游| 拉孜县| 弥勒县| 阿合奇县| 新竹市| 久治县| 犍为县| 无棣县| 玛沁县| 龙岩市| 新宾| 潞城市| 夹江县| 榆林市| 昌黎县| 涡阳县| 汨罗市| 临邑县| 铜山县| 木里| 林州市| 黄山市| 顺义区| 凤山县| 永吉县| 鹤山市| 泾阳县| 抚顺县| 宁陵县| 雷波县| 司法| 新竹市| 门源| 共和县| 柳河县| 秦皇岛市| 定州市| 阜新| 惠来县| 界首市| 深水埗区| 枝江市| 敦化市| 靖宇县| 庆城县| 六安市| 谢通门县| 沽源县| 汝阳县| 九龙城区| 绥芬河市| 进贤县| 龙游县| 镶黄旗| 乌恰县| 潮州市| 治县。| 东乌珠穆沁旗| 永济市| 华宁县| 昌平区| 江源县| 兴安县| 甘孜| http://3g.bo2020hides.fun http://3g.yqo2j9rl4v.fun http://3g.gz1980dryc.fun http://3g.yqo6j9rl5v.fun http://3g.bo2020singles.fun http://3g.bo2020interviews.fun http://3g.bo2020keys.fun http://3g.gz1980exceptc.fun http://3g.yqo4j4rl0v.fun http://3g.bo2020forces.fun http://3g.gz1980ironc.fun http://3g.yqo2j3rl3v.fun http://3g.gz1980taskc.fun http://3g.yqo7j1rl5v.fun http://3g.bo2020expands.fun http://3g.gz1980coursec.fun http://3g.jvz0j1r3o.fun http://3g.gz1980tizec.fun