当前位置: 首页 > news >正文

矩阵及其应用

Basic

什么是矩阵

这真的是一个很复杂的问题…简单的说,矩阵是一个排列呈矩形的数集,比如说:

(13​24​)

矩阵的基本运算

在OI中,我们常用的是矩阵乘法,因此对于矩阵的加法、转置和数乘这里不做讲解。
对于一个 M×N 的矩阵 A 和一个 N×P 的矩阵 B,设矩阵 C 为 A 和 B 的乘积。
则 C 的第 i 行 第 j 列上的元素可表示为:

Ci,j​=k=1∑N​Ai,k​×Bk,j​

也就是说,C 矩阵中第 i 行第 j 列的数是由 A 矩阵第 i 行的数与 B 矩阵第 j 列的数分别相乘再相加得到的。

矩乘的性质

  • 矩乘只对形如 M×N 和 N×P 的两个矩阵有意义,且其结果一定是一个 M×P 的矩阵。
  • 矩乘满足结合律,读者可根据定义式自行证明。
  • 矩乘不满足交换律,根据定义式,这是显然的。

矩乘的代码实现

for(int i=1; i<=n; i++) {for(int j=1; j<=k; j++) {for(int h=1;h<=m;h++){c[i][j]+=a[i][h]*b[h][j];}}
}

就这么简单。

单位矩阵

单位矩阵是满足除了第 i 行第 j 列的数是 1 外,其他的数都是 0 的矩阵。
根据矩乘定义式,极易发现单位矩阵乘任何矩阵都得所乘矩阵。

矩阵快速幂

由于矩乘满足结合律,因此我们可以用快速幂计算。
代码如下:

struct Martrix{int a[4][4];Martrix(){memset(a,0,sizeof(a));}Martrix operator *(const Martrix B){Martrix res;for(int i=1;i<=3;i++){for(int j=1;j<=3;j++){for(int k=1;k<=3;k++){res.a[i][j]=(res.a[i][j]+a[i][k]*B.a[k][j])%mod;}} }return res;}void build(){for(int i=1;i<=3;i++){a[i][i]=1;}}
};
Martrix qpow(Martrix A,int n){Martrix res;res.build();while(n){if(n&1){res=res*A;}A=A*A;n>>=1;}return res;
}

没什么可说的。

矩阵的应用

矩阵优化递推

例:斐波那契数列

Fn​ 表示斐波那契数列中的第 n 项,给定 n≤1018,求 Fn​mod109+7 的值

考虑构造矩阵:

(Fn​​Fn+1​​)

注意到:

(Fn​​Fn+1​​)=(Fn−1​​Fn​​)(01​11​)

也就是说,我们可以维护矩阵 (F1​​F2​​) ,然后一直乘 (01​11​)即可。
代码:

const int mod=1e9+7;
struct Martrix{int a[3][3];Martrix(){a[1][1]=a[1][2]=a[2][1]=a[2][2]=0;}Martrix operator *(const Martrix& B){Martrix res;for(int i=1;i<=2;i++){for(int j=1;j<=2;j++){for(int k=1;k<=2;k++){res.a[i][j]=(res.a[i][j]+a[i][k]*B.a[k][j])%mod;}}}return res;}void build(){a[1][1]=a[2][2]=1;}
};
Martrix qpow(Martrix a,int n){Martrix res;res.build();while(n){if(n&1){res=res*a;}a=a*a;n>>=1;}return res;
}
void solve(){int n;cin>>n;if(n<=2){cout<<1<<endl;return;}Martrix F,A;F.a[1][1]=1,F.a[1][2]=1;A.a[1][1]=A.a[1][2]=A.a[2][1]=1;F=F*qpow(A,n-2);cout<<F.a[1][1]<<endl;
} //缩进挂了,懒得修了

其他内容正在施工中…

http://www.dtcms.com/a/499245.html

相关文章:

  • **发散创新:探索零信任网络下的安全编程实践**随着信息技术的飞速发展,网络安全问题日益凸显。传统的网络安全防护方式已难以
  • 网络营销方案毕业设计安卓手机性能优化软件
  • 建设企业网站价格建设银行北京市财满街分行网站
  • (Kotlin高级特性一)kotlin的扩展函数和属性在字节码层面是如何实现的
  • Spring Boot 3零基础教程,WEB 开发 静态资源默认配置 笔记27
  • 【论文精度-2】求解车辆路径问题的神经组合优化算法:综合展望(Yubin Xiao,2025)
  • 赣州哪里做网站域名注册备案
  • windows双系统下 ubutnu 20.04 启动项出问题无法进入ubuntu 20.04的解决方法
  • MQTT 协议全面学习笔记
  • 加权分位数直方图:提升机器学习效能的关键技术
  • 做分析图网站无锡seo优化
  • SQL CHECK约束详解
  • 【java接口实现】一个简单接口实现模板
  • 嵌入式Linux:线程同步(条件变量)
  • 从“小而美”到“大而强”:音视频直播SDK的技术进化逻辑
  • 2五、buildroot支持Qt5
  • 我做的网站怎么打开很慢电信网络运营商
  • 敦化网站开发淘宝网网页版登录平台
  • Umi-OCR制作双层PDF
  • TD 通达OAOAV12.9版本的密码重置
  • 【办公类-115-02】20251018信息员每周通讯上传之文字稿整理(PDF转docx没有成功)
  • MySQL表设计详解
  • AI 编程 Trae ,有重大更新!用 Trae 做了个图书借阅网站!
  • 手机可以搭建网站么深圳软件开发工作室
  • 网站模板建设教程都江堰网站建设
  • 字符串相关OJ题解析(图文并茂+过程演示)
  • 分治算法-归并排序专题:从性能优化到索引数组的突破
  • iis怎么做IP网站有没有专门做数据分析的网站
  • 如何用 Docker Compose 管理多个容器
  • 《C++ STL 基础入门》教案