矩阵快速幂
2015-06-18 23:31
344 查看
矩阵乘法是一种高效的算法可以把一些一维递推优化到log( n ),还可以求路径方案等,所以更是是一种应用性极强的算法。矩阵,是线性代数中的基本概念之一。一个m×n的矩阵就是m×n个数排成m行n列的一个数阵。由于它把许多数据紧凑的集中到了一起,所以有时候可以简便地表示一些复杂的模型。矩阵乘法看起来很奇怪,但实际上非常有用,应用也十分广泛。
基本定义
它是这样定义的,只有当矩阵A的列数与矩阵B的行数相等时A×B才有意义。一个m×n的矩阵a(m,n)左乘一个n×p的矩阵b(n,p),会得到一个m×p的矩阵c(m,p),满足
矩阵乘法满足结合率,但不满足交换率
一般的矩乘要结合快速幂才有效果``
http://poj.org/problem?id=3070
View Code
感觉学长的代码和我的代码并没什么区别, 然而,,,,。 真是无语啦!。 不管怎样,弱渣仍需修练!
《6》这里还有几个特别巧妙地题。
http://www.cnblogs.com/kuangbin/category/405835.html(巨巨到底是巨巨!)
基本定义
它是这样定义的,只有当矩阵A的列数与矩阵B的行数相等时A×B才有意义。一个m×n的矩阵a(m,n)左乘一个n×p的矩阵b(n,p),会得到一个m×p的矩阵c(m,p),满足
矩阵乘法满足结合率,但不满足交换率
一般的矩乘要结合快速幂才有效果``
http://poj.org/problem?id=3070
#include<stdio.h> #include<string.h> #define mod 10000007 typedef long long ll; struct Mat { ll mat[5][5]; }; Mat operator * (Mat a, Mat b) { Mat c; memset(c.mat, 0, sizeof(c.mat)); for(int k=0; k<3; k++) for(int i=0; i<3; i++) for(int j=0; j<3; j++) c.mat[i][j] = (c.mat[i][j]+a.mat[i][k]*b.mat[k][j])%mod; return c; } int main() { int n, k; Mat a, res; while(~scanf("%d%d", &n,&k)) { ll f1 = -1, f2 = -1, f, sum=0; for(int i=0; i<n; i++) { scanf("%lld", &f); sum += f; if(f > f1) f2 = f1, f1 = f; else if(f > f2) f2 = f; }//f1,f2为初始值 sum = sum-f1-f2; a.mat[0][0]=1; a.mat[0][1] = a.mat[0][2]=0; a.mat[1][0] = a.mat[1][1] = a.mat[1][2] = 1; a.mat[2][0] = a.mat[2][1] = 1; a.mat[2][2] = 0; for(int i=0; i<3; i++) for(int j=0; j<3; j++) res.mat[i][j] = (i==j); //初始为单位矩阵 for(; k>0; k>>=1) //快速幂 { if(k & 1) res = res*a; a = a*a; } sum += (f1+f2)*res.mat[0][0]+f1*res.mat[1][0]+f2*res.mat[2][0]; printf("%lld\n", sum%mod); } return 0; }
View Code
感觉学长的代码和我的代码并没什么区别, 然而,,,,。 真是无语啦!。 不管怎样,弱渣仍需修练!
《6》这里还有几个特别巧妙地题。
http://www.cnblogs.com/kuangbin/category/405835.html(巨巨到底是巨巨!)
相关文章推荐
- setInterval—JS学习笔记2015-6-18(第60天)
- HDU 4771
- Android中图片优化之webp使用
- Android中图片优化之webp使用
- Android中图片优化之webp使用
- Hadoop(6)----hadoop1.x 与 hadoop2.x之间的区别
- 傳送與接收 JSON
- 紫阳的日常——序章 不为人知的另一面
- C++中的资源管理<转载>
- Android后台进程与前台线程间的区别使用
- Android后台进程与前台线程间的区别使用
- 基于socket.io的实时消息推送
- mysql 连接慢解决方法
- MapReduce的自制Writable分组输出及组内排序
- 局域网内mysql连接慢的解决办法
- 在python中用BaseHTTPRequestHandler模块儿时获取客户端的ip和端口
- 如何通过VB6.0编程的方式获取百度贴吧帐号的BDUSS
- day3随堂笔记
- H5版俄罗斯方块(2)---游戏的基本框架和实现
- 解决远程连接mysql很慢的方法(mysql_connect 打开连接慢)