关于矩阵

矩阵

之前一直不太理解矩阵快速幂如何构造,实际上就是如果 \(i\) 能更新 \(j\) ,就把 \(a_{i,j}\) 加一即可。

tricks

积累一个刚刚学到的 \(trick\)

已知一个矩阵 \(A\) ,现在要求 \(A + A^2 + A^3 + ...... + A^k\)

如果直接求显然会大力 \(Tle\) 。。。
因此观察性质,不难发现这个式子满足等比数列的形式,由于矩阵乘法满足结合律,因此也满足以下式子 :
\(k\) 为奇数,原式 \(=(A + A^2 + ...... + A^{\frac{k}{2}}) + A^{\frac{k}{2}} * (A + A^2 + ...... + A^{\frac{k}{2}}) + A^k\)
\(k\) 为偶数,原式 \(=(A + A^2 + ...... + A^{\frac{k}{2}}) + A^{\frac{k}{2}} * (A + A^2 + ...... + A^{\frac{k}{2}})\)

不难发现,这样就可以在 \(O(n^3 \log k)\) 的优秀的时间复杂度内得到所求矩阵,具体实现如下 :

code
for(int i=20; ~i; --i){
	if(!flag) { flag|=(k>>i)&1; continue; }
	if((k>>i)&1) a=a+a*ul, ul=ul*ul*ans, a=a+ul;
	else a=a+a*ul, ul=ul*ul;
}

考试中出现的一个 \(trick\)

若递推式中如果出现常数,可以将常数单独作为一维放入矩阵中,使常数向其它项转移,而其他项不向常数项转移。。。(貌似是废话。。。


对于矩阵快速幂,如果将运算中的乘法改成加法,加法改成去 \(max\),矩阵仍满足结合律,可以矩阵快速幂求解。

即:

\[A_{i,j}= max(B_{i,k}+C_{k,j}) \]

并不是很理解。。。
不过巨佬 \(Dky\) 说是对的。。。
话说我觉得矩阵本身就很玄学。。。

利用这种方法可以求解诸如最长路||最大值的问题。

posted @ 2021-09-29 22:06  Cyber_Tree  阅读(54)  评论(0编辑  收藏  举报