线性代数 Linear Algebra

矩阵乘法 Matrix Multiplication

可以用来解决值域大的问题。

矩阵乘法可以用来加速线性递推式。

由于可以使用矩阵快速幂,矩阵乘法可以将线性递推 O(n) 的时间复杂度优化至 O(logn)。所以对于此类题型,最重要的就是找到固定线性递推式,列出转移矩阵。

注意:矩阵无乘法交换律。乘的时候要注意顺序。

Examples:

P1962 斐波那契数列

和某个入门题很像,但值域扩大到了 [1,263) ,当然不能暴力求解,考虑把 fnfn1 当成向量写在一起:[fnfn1],然后找出使下列等式成立的转移矩阵 A

[fnfn1]=A[fn1fn2]

容易得出:A =[11 10]。那么,乘上 n2A 后就是这样的:

[fnfn1]=An2[f2f1]

P1349 广义斐波那契数列

与上一题相同,类比得到:

[anan1]=An2[a2a1]

A=[pq10]

P1939 矩阵加速

这题的递推式有些奇怪,但不影响我们推,所以考虑开一个四维向量,如下:

[fxfx1fx2fx3]=Ax4[f4f3f2f1]

再将 fx 代换成 fx1+fx3,解出:

A=[1010100001000010]

P2044 随机数生成器

线性递推式:Xn+1=aXn+c

[Xnc]=A[Xn1c]

A=[a101]

注意到这题模数非常大,达到了 1018 的大小,所以应该使用龟速乘。

双倍经验:CF678D Iterated Linear Function

小声bb:@QianXiquq这题似乎跟贪心没有关系。

转置矩阵 Matrix Transpose

一个矩阵的转置矩阵就是把矩阵的行列互换,形象的表示一个 mn 列矩阵 A 的转置矩阵,记为 AT

A=[a11a12a1na21a22a2nam1am2amn]

AT=[a11a21am1a12a22am2a1na2namn]

转置矩阵的性质:行列式的值不变。

转置矩阵可以用于向量点积的计算:

两个向量的点乘就是一个向量乘另一个向量的转置矩阵。

xi xj=xiT xj

高斯消元 Gaussian Elimination

相信每个人都见过和下列线性方程组类似的方程组:

{3x+5y+2z=4x+y=45x+5y9z=45

为了好看,我们把消失的未知数系数补 0,无系数的写成 1,然后写成下面的样子:

{3x+5y+2z=41x+1y+0z=45x+5y9z=45

那么,我们可以把系数写在一个 3×3 矩阵中,剩下两样写成向量:

[352110559][xyz]=[4445]

那么这个等式就足以表示这个方程组了。

还记得单位矩阵吗?就是那个除了对角线为 1 以外全为 0 的矩阵。由计算或观察得到,一个对应阶数的单位矩阵乘上一个向量等于向量自身:

[1001][a1an]=[a1an]

那么,根据以上结果,我们可以将答案矩阵放在系数矩阵的右边,成为一个增广矩阵,然后,对这个矩阵模拟加减消元法,使除对角线以外的数字为 0,再判断是否出现了 0xi=00xi0 的情况,就可以解出方程组了。

行列式 Determinant

在数学中,让我们计算的行列式一般只有 2 阶和 3 阶的,而数学中计算行列式的“对角线法则”也不适用于 3 阶以上的行列式,那么要怎么计算高阶行列式呢?参照使用增广矩阵与高斯消元解多元一次方程的过程。仅保留此 n 阶行列式的对角线,其他数均消为 0 ,行列式的值就是对角线的乘积。

本文作者:Cuset_VoidAldehyde

本文链接:https://www.cnblogs.com/CusetVoidAldehyde/p/18117817

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Cuset_VoidAldehyde  阅读(35)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起