• 矩阵乘法与邻接矩阵

    矩阵乘法与邻接矩阵

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

    相关文章
    相关标签/搜索
    四肖八码中特二四六天天好彩免费资料大全香港马会最快开奖现场开奖结果免费资料历史记录大全一肖一码期期准1 一在线查询网 文山县| 神木县| 西畴县| 金溪县| 都兰县| 万载县| 阳新县| 凤阳县| 二连浩特市| 西城区| 吉隆县| 沧州市| 德昌县| 农安县| 辉县市| 化州市| 洛宁县| 泰顺县| 福贡县| 新兴县| 东阿县| 定州市| 民乐县| 乐亭县| 江达县| 沈阳市| 进贤县| 咸阳市| 玛纳斯县| 赤峰市| 永泰县| 噶尔县| 马龙县| 类乌齐县| 海门市| 天津市| 射洪县| 奉贤区| 秀山| 黄浦区| 金堂县| 巍山| 报价| 丹棱县| 景洪市| 罗城| 常宁市| 晋江市| 湘阴县| 来安县| 淮南市| 威宁| 图木舒克市| 留坝县| 德安县| 永仁县| 南汇区| 兴国县| 沂水县| 宜宾县| 贵定县| 米易县| 华容县| 永泰县| 乌审旗| 普宁市| 嘉祥县| 湘潭县| 柳河县| 瓮安县| 连南| 江川县| 日土县| 盈江县| 务川| 双峰县| 平南县| 长顺县| 伊宁市| 云林县| 大港区| 五指山市| 增城市| 石家庄市| 胶南市| 麻江县| 松桃| 玛纳斯县| 无锡市| 临高县| 邢台县| 秦皇岛市| 丰宁| 桃江县| 万盛区| 建始县| 宜春市| 历史| 苏州市| 那坡县| 静海县| 蓝田县| 黎城县| 绥化市| 洛阳市| 黄陵县| 白河县| 武清区| 金山区| 来安县| 绥棱县| 康平县| 合阳县| 三门峡市| 同仁县| 汝阳县| 陆良县| 体育| 军事| 宾川县| 永安市| 竹溪县| 来宾市| 会东县| 凤山县| 白玉县| 黔西县| 顺昌县| 宜春市| 大同市| 旺苍县| 和顺县| 淮阳县| 横山县| 东丰县| 民县| 都昌县| 理塘县| 皋兰县| 新竹县| 永胜县| 大邑县| 象州县| 湖州市| 高尔夫| 福安市| 林周县| 崇义县| 临沧市| 关岭| 鄯善县| 永康市| 临朐县| 江北区| 廉江市| 三明市| 石景山区| 金川县| 铜鼓县| 宽甸| 淄博市| 朝阳区| 桂东县| 体育| 天气| 盘山县| 隆回县| 贵南县| 库尔勒市| 黄龙县| 眉山市| 怀化市| 商河县| 柳河县| 雷山县| 肇庆市| 石门县| 建平县| 大冶市| 井陉县| 于都县| 梅州市| 镇雄县| 台江县| 左云县| 东港市| 鄂尔多斯市| 大新县| 阳东县| 余干县| 英山县| 霍林郭勒市| 元阳县| 汤原县| 溆浦县| 新绛县| 平湖市| 潜山县| 芦溪县| 灵宝市| 东源县| 岳阳市| 双牌县| 桐庐县| 建昌县| 永平县| 巨野县| 城步| 泰来县| 大同市| 高唐县| 成都市| 司法| 闻喜县| 吉安县| 安化县| 淮阳县| 大悟县| 临朐县| 临邑县| 章丘市| 新民市| 永登县| 芦山县| 阳信县| 博客| 卓资县| 平果县| 乌鲁木齐市| 临邑县| 孝感市| 江津市| 衡南县| 怀化市| 忻城县| 古田县| 怀柔区| 兴义市| 千阳县| 酒泉市| 广水市| 文化| 白山市| 福贡县| 淮安市| 镇平县| 阿瓦提县| 曲阳县| 望奎县| 古交市| 台东市| 静宁县| 开远市| 连城县| 库尔勒市| 安顺市| 福州市| 阿图什市| 双峰县| 恭城| 焉耆| 金沙县| 枣强县| 建平县| 霞浦县| 新昌县| 安泽县| 迁安市| 龙山县| 新巴尔虎右旗| 温宿县| 万载县| 革吉县| 衡阳市| 手游| 乐平市| 芦山县| 定西市| 玉龙| 阜康市| 乌鲁木齐市| 嘉义市| 融水| 大冶市| 瑞安市| 灵寿县| 浦县| 邯郸市| 石门县| 双江| 定兴县| 田林县| 泗洪县| 鹤壁市| 兴山县| 玉林市| 冕宁县| 左贡县| 乳源| 通山县| 安福县| 新绛县| 奇台县| 偃师市| 天气| 湖州市| 乌兰县| 涡阳县| 武胜县| 西盟| 宿州市| 神农架林区| SHOW| 双流县| 邵阳市| 云梦县| 蕲春县| 江西省| 教育| 长垣县| 石景山区| 安乡县| 新竹县| 漳平市| 绵阳市| 连山| 桐庐县| 自贡市| http://3g.gz1980assistc.fun http://3g.bo2020churchs.fun http://3g.yqo5j2rl2v.fun http://3g.jvz0j9r7o.fun http://3g.yqo3j8rl6v.fun http://3g.bo2020eats.fun http://3g.yqo9j2rl6v.fun http://3g.bo2020prices.fun http://3g.gz1980uploadc.fun http://3g.yqo9j4rl5v.fun http://3g.bo2020sorts.fun http://3g.gz1980supplyc.fun http://3g.yqo7j8rl2v.fun http://3g.bo2020drugs.fun http://3g.gz1980arzc.fun http://3g.bo2020zails.fun http://3g.gz1980approachc.fun http://3g.yqo1j6rl4v.fun