快来踩爆这个蒟蒻吧|

Little_corn

园龄:1年1个月粉丝:10关注:17

2024-04-25 13:06阅读: 63评论: 0推荐: 0

矩阵

矩阵的定义:

矩阵(matrix)其实就是一个二维数组,第 ij 列的元素即为 ai,j

矩阵的运算:

加减:

它们均为逐个元素进行。只有同型矩阵之间可以对应相加减。

转置:

矩阵的转置,就是在矩阵的右上角写上转置「T」记号,表示将矩阵的行与列互换。

对称矩阵转置前后保持不变。

乘法:

矩阵的乘法是向量内积的推广。

矩阵相乘只有在第一个矩阵的列数和第二个矩阵的行数相同时才有意义。

AP×M 的矩阵,BM×Q 的矩阵,设矩阵 C 为矩阵 AB 的乘积,

其中矩阵 C 中的第 i 行第 j 列元素可以表示为:

Ci,j=k=1MAi,kBk,j

其实就相当于一个线性方程组。

注意:矩阵乘法满足结合律,但不满足交换率

幂:

矩阵的幂 Ak 即为 kA 相乘。

因为矩阵乘法满足结合律所以我们可以使用快速幂来优化。

时间复杂度:O(n3logk)

代码:

struct matrix{
int t[N][N], row, col;
matrix(int _r, int _c, bool I){
row = _r, col = _c;
memset(t, 0, sizeof t);
if(I) for(int i = 0; i < row; i++) t[i][i] = 1;
}
};
matrix operator * (matrix a, matrix b){
matrix c(a.row, b.col, 0);
for(int i = 0; i < a.row; i++){
for(int j = 0; j < b.col; j++){
for(int k = 0; k < a.col; k++){
c.t[i][j] = (c.t[i][j] + a.t[i][k] * b.t[k][j] % mod) % mod;
}
}
}
return c;
}
matrix qpow(matrix x, int y){
matrix ret(x.row, x.col, 1);
for(; y; y >>= 1, x = x * x) if(y & 1) ret = ret * x;
return ret;
}

本文作者:Little_corn

本文链接:https://www.cnblogs.com/little-corn/p/18157444

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

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