首页 > 其他分享 >矩阵快速幂小结

矩阵快速幂小结

时间:2022-10-18 14:33:15浏览次数:79  
标签:Node http int 快速 矩阵 poj org 小结

      矩阵快速幂大概是用来解决这样一类问题,当你知道了一个递推式比如a[n]=a[n-1]+a[n-2] 题目要求你求出a[n]。如果n大于1亿怎么办?

不可能用for。解决办法就是根据递推式构造一个矩阵A,最终会化简为a[n]=A^n类似的形式,再利用快速幂,快速的求出A^n,所以原先的

O(n)就变成了O(logn) 

例如POJ 3233 递推关系是 s[k]=s[k-1]+A^k; 

矩阵快速幂小结_php

所以s[K]=( | 1  0| ^n )*s[1]

                | 1  A|

     下面给出矩阵快速幂的模板

      矩阵连乘:

struct Node
{
int a[25][25];
};
int n,m,x,y,k,t;
Node multiply(Node a,Node b)
{
Node c;
memset(c.a,0,sizeof(c.a));
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(!a.a[i][j]) continue;

//减枝,有些题目写减枝才可以过,n有些大的时候。有的题目n有500,n^3就会炸了,这类题目,要观察矩阵的形式,可以把矩阵转
换的,用n^2就可以完成连乘,例如POJ 3150 后面的例题里有
for(int k=0;k<n;k++)
{
(c.a[i][k]+=(a.a[i][j]*b.a[j][k])%mod)%=mod;
}
}
}
return c;
}


矩阵快速幂:


Node quick(Node a,int x)
{
Node c;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
c.a[i][j]=(i==j?1:0);
for(x;x>0;x>>=1)
{
if(x&1)
c=multiply(c,a);
a=multiply(a,a);
}
return c;
}

练习题目:

​http://poj.org/problem?id=3233​

​http://poj.org/problem?id=3735​

​http://poj.org/problem?id=3150​

​http://acm.hdu.edu.cn/showproblem.php?pid=2604​

​http://acm.hdu.edu.cn/showproblem.php?pid=2157​

​http://acm.hdu.edu.cn/showproblem.php?pid=1575​

​http://poj.org/problem?id=3070​


标签:Node,http,int,快速,矩阵,poj,org,小结
From: https://blog.51cto.com/u_15834522/5766679

相关文章

  • 基于OpenCV实现图像间快速颜色迁移
    作者:AdrianRosebrock编译:ColorSpace导读本文主要介绍如何在两个图像之间实现颜色迁移的功能。给定任意两个图像,一个源图像,一个目标图像,然后可以将源图像的颜色空间迁移到......
  • 快速排序
    11//定义数列,左位,右位13空表返回空值15定义左下标右下标16定义中心轴17中心轴初始位置是在数列最左边19最右边值大于中心轴的值时21最右边的下标往左移一位25最右边的值放......
  • 快速解决谷歌浏览器自带翻译不好用的问题
    工具先说工具,我写了一个小工具,可以快速修改,不需要任何其他知识。其中"修改的Ip"为本次你要修改的Ip地址,如果之前你已经修改过了,这里会显示现在的IP,如果没有,这里是空的。如......
  • MATLAB如何对矩阵进行求和?sum(A,1) sum(A,2)
    sum(A,1)对列中的连续元素进行操作,并返回每列总和的行向量。sum(A,2)对行中的连续元素进行操作,并返回每行总和的列向量。......
  • Ubuntu快速换源教程
    目的:为了解决上网查资料过慢问题。可以通过换源来提高速度。(1)备份系统源cd/etc/aptsudomvsources.listsources.list.bak(2)开始修改sources文件有安装vim用户:......
  • 【LeetCode】1351. 统计有序矩阵中的负数(C++)
    1351.统计有序矩阵中的负数(C++)​​1题目描述​​​​2示例描述​​​​2.1示例1​​​​2.2示例2​​​​2.3示例3​​​​2.4示例4​​​​3解题提示​​​​4......
  • 算法修炼23招----第一招:快速幂
    目录​​......
  • Eclipse插件开发Java快速修复
    介绍在Eclipse中在有报错的地方,使用快捷键Ctrl+1就会弹出几种解决问题的方案,这时候只要选择一种就可能快速地修复该问题。这些常见的问题,有些可能是通用的,例如:没有导入包。......
  • 1045 快速排序(JAVA)
    著名的快速排序算法里有一个经典的划分过程:我们通常采用某种方法取一个元素作为主元,通过交换,把比主元小的元素放到它的左边,比主元大的元素放到它的右边。给定划分后的N个......
  • 如何快速学习
    这篇文章我写了很长时间。起因是一个同学在我的课程问答区的提问。这个问题激起了我很多思考。最后形成了这篇文章。文章可能会比较长,我也没有花太多心思找什么配图。但如......