[笔记] 矩阵
行列式#
其中 是指长度为 的全排列的集合, 就是一个全排列,如果 的逆序对对数为偶数,则 ,否则
- 矩阵转置,行列式不变;
- 矩阵行(列)交换,行列式取反;
- 矩阵行(列)相加或相减,行列式不变;
- 矩阵行(列)所有元素同时乘以数 ,行列式也乘 。
行列式求值#
- 如果不需要取模或者模数为质数,则直接高斯消元,否则辗转相除。
int det(){
int tg = 1, res = 1;
lfor(i, 1, n){
int k = i;
lfor(j, k + 1, n) if(a[j][i] > a[k][i]) k = j;
if(!a[k][i]) return 0;
if(i != k) swap(a[k], a[i]), tg = -tg;
lfor(j, i + 1, n){
while(a[j][i]){
int x = a[i][i] / a[j][i];
lfor(k, i, n) a[i][k] = (a[i][k] + 1LL * (p - x) * a[j][k]) % p;
swap(a[j], a[i]), tg = -tg;
}
}
res = 1LL * res * a[i][i] % p;
}
res *= tg; return (res + p) % p;
}
矩阵求逆#
在高斯消元的同时对单位矩阵做同样的操作。
bool Inv(){
lfor(i, 1, n){
int k = i;
lfor(j, i + 1, n) if(a.a[j][i]){ k = j; break; }
if(!a.a[k][i]) return 0;
if(k != i) a.Swap(k, i), inv.Swap(k, i);
inv.mul(i, qpow(a[i][i])), a.mul(i, qpow(a[i][i]));
lfor(j, 1, n) if(i != j)
inv.add(j, i, mod - a[j][i]), a.add(j, i, mod - a[j][i]);
}
return 1;
}
积和式#
- 意义下等于行列式。
矩阵的秩#
中能选出的最多的线性无关的行数。
如果某一行能被其它的行组合出来,则称他们线性相关。
LGV 引理#
关键词:路径交点
- 矩阵 权值为第 个起点到第 个终点的路径条数,则 即为第 个起点到第 个终点, 条路径无交点的方案数。
- 可能存在条件限制和变式。
矩阵乘法的常数优化#
- 对于较小的矩阵,在运算需要取模是,可以使用 long long,在 次乘法后进行 的取模。
矩阵乘法的应用#
- 加速递推;
- 加速 DP 转移;
- 有一些修改操作,用矩阵乘法可以很好地表达。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现