Loading

关于广义矩阵乘法常见误区的一点纠正

在动态 \(DP\) 中,我们常常需要使用广义矩阵乘法。
即 对于可以相乘(以下皆省略关于此方面的讨论)的矩阵 \(A, B\) ,记 \(C=A\times B\) , 则满足 \(c_{ij}=\bigoplus_k a_{ik}\otimes b_{kj}\)

我们想要使用广义矩乘,大部分时候希望其满足结合律,即 \((A\times B)\times C=A\times (B\times C)\)

结论是,当 \(\oplus\) 满足交换律,\(\otimes\) 满足结合律,\(\otimes\) 对于 \(\oplus\) 满足分配律时,广义矩乘满足结合律。

\(\otimes\) 对于 \(\oplus\) 满足分配律指的是满足 $(a\oplus b)\otimes c=(a\otimes c)\oplus (b\otimes c)\wedge c\otimes (a\oplus b)=(c\otimes a)\oplus (c\otimes b) $ ,即同时满足右分配律和左分配律。(感谢 @jijidawang 纠正)

下面来证明这个结论:

\[\begin{align*} ((AB)C)_{ij}&=\bigoplus_k (AB)_{ik}\otimes c_{kj}\\ &=\bigoplus_k (\bigoplus_s a_{is}\otimes b_{sk}) \otimes c_{kj}\\ &=\bigoplus_k \bigoplus_s (a_{is}\otimes b_{sk}) \otimes c_{kj}\text{分配率}\\ &=\bigoplus_k \bigoplus_s a_{is}\otimes b_{sk} \otimes c_{kj}\text{结合率}\\ \end{align*} \]

\[\begin{align*} (A(BC))_{ij}&=\bigoplus_s a_{is}\otimes (BC)_{sj}\\ &=\bigoplus_s a_{is}\otimes (\bigoplus_k b_{sk}\otimes c_{kj})\\ &=\bigoplus_s \bigoplus_k a_{is}\otimes (b_{sk}\otimes c_{kj})\text{分配率}\\ &=\bigoplus_s \bigoplus_k a_{is}\otimes b_{sk}\otimes c_{kj}\text{结合率}\\ \end{align*} \]

容易发现只是交换了枚举顺序,所以当 \(\oplus\) 满足交换律时,上述形式的广义矩乘满足结合律。

常见的,下述形式的广义矩乘皆满足结合律:

\[\begin{align*} c_{ij}&=\max(a_{ik}+b_{kj})\\ c_{ij}&=\min(a_{ik}+b_{kj})\\ \end{align*} \]

大部分的博客讲的要么是只给出了上述特殊形式,要么对于二元运算的性质分析是错的(大部分都默认了其具有某些性质),所以作此文以纠正。

如果有问题还请联系作者并友好交流。

posted @ 2025-08-24 16:11  qkhm  阅读(138)  评论(0)    收藏  举报