矩阵乘法,顾名思义矩阵与矩阵相乘,

两矩阵可相乘的前提:第一个矩阵的行与第二个矩阵的列相等

相乘原则:

a b     *     A B   =   a*A+b*C  a*c+b*D

c d        C D   =   c*A+d*C  c*A+d*C

上代码

 struct matrix
{
ll a[maxn][maxn];
};
matrix matrix_mul(matrix x,matrix y)
{
matrix temp;
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
{
temp.a[i][j]=;
for(int k=;k<=n;k++)
{
temp.a[i][j]+=(x.a[i][k]*y.a[k][j])%mod;
temp.a[i][j]%=mod;
}
}
return temp;
}

∵矩阵乘法满足结合律(不满足交换律)

∴可用快速幂

矩阵快速幂与一般快速幂极其相似,只是把两个数相乘改成了两个矩阵相乘(用个相乘函数即可),所以完全可以按照快速幂的写法来写;

matrix matrix_pow(matrix a,ll b)
{
matrix v;
for(int i=;i<=n;i++) v.a[i][i]=; //初始化,就和把数字初始化成 1 一样,矩阵这样初始化
while(b>)
{
if(b&) v=matrix_mul(v,a);
a=matrix_mul(a,a);
b=b>>;
}
return v;
}

※矩阵快速幂解决线性递推式

举个栗子(我有一盆栗子随便举) 斐波那契序列 (F[n]=F[n-1]+F[n-2])

很多童鞋知道矩阵快速幂可解决斐波那契序列,但并不知道原因

事实上矩阵快速幂可以解决绝大多数线性递推式(不敢说所有=-=,万一呢)

对于斐波那契,递推矩阵(自己起的=-=)为

1 1

0 1

具体推导初始矩阵过程如下(方法不唯一):(以斐波那契额为例)

我们要做的是使F[n-1]+F[n-2]乘某个矩阵得出第一项为F[n](个人理解的=-=)

则 F[n]     =  a  b   *   F[n-1]

F[n-1]      c  d        F[n-2]

∵F[n]=F[n-1]+F[n-2]

则可得 F[n-1]+F[n-2] = a  b   *  F[n-1]

    F[n-1]      c  d    F[n-2]

设F[n-1]为A,F[n-2]为B

则为 A+B  = a  b   *   A    =   a*A+b*B   (将右边矩阵乘开了)

B       c  d   *   B         c*A+d*B

则可以看到 a*A+b*B=A+B

      c*A+d*B=B

很容易看出a=1,b=1,c=0,d=1

所以递推矩阵为

1 1

0 1

普通斐波那契F[1]=1,F[2]=1;

那为什么可以用矩阵快速幂呢?

设上边的0,1为A,斐波那契初始矩阵为B,当N》=2的时候我们可以求斐波那契

比如斐波那契的3项就应该是

A*A*B即可(因为N大于等于2所以要把求得项数减去1然后再乘)

类似的我们可以求斐波那契的第N项

即A*A*A*......*A*B一共乘N-1项。

这个时候我们发现都是乘法耶~那我们就快速幂把,好~快速幂所以我们就完成了快速幂。

所以每一n-1幂所对应的F[n]就是答案,

但F[1]与F[2]为其他数呢,就不能只是这样做了

∵矩阵乘法满足交换律

∴现将递推矩阵进行n次幂运算

再使其乘 F[1] 矩阵,即可得出答案=-=

     F[2]

矩阵乘法&矩阵快速幂&矩阵快速幂解决线性递推式的更多相关文章

  1. 线性齐次递推式快速求第n项 学习笔记

    定义 若数列 \(\{a_i\}\) 满足 \(a_n=\sum_{i=1}^kf_i \times a_{n-i}\) ,则该数列为 k 阶齐次线性递推数列 可以利用多项式的知识做到 \(O(k\l ...

  2. 【瞎讲】 Cayley-Hamilton 常系数齐次线性递推式第n项的快速计算 (m=1e5,n=1e18)

    [背诵瞎讲] Cayley-Hamilton 常系数齐次线性递推式第n项的快速计算 (m=1e5,n=1e18) 看CSP看到一题"线性递推式",不会做,去问了问zsy怎么做,他并 ...

  3. [题解][SHOI2013]超级跳马 动态规划/递推式/矩阵快速幂优化

    这道题... 让我见识了纪中的强大 这道题是来纪中第二天(7.2)做的,这么晚写题解是因为 我去学矩阵乘法啦啦啦啦啦对矩阵乘法一窍不通的童鞋戳链接啦 层层递推会TLE,正解矩阵快速幂 首先题意就是给你 ...

  4. HDU-6185-Covering(推递推式+矩阵快速幂)

    Covering Time Limit: 5000/2500 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  5. HDU - 2604 Queuing(递推式+矩阵快速幂)

    Queuing Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  6. HDU5950 Recursive sequence 非线性递推式 矩阵快速幂

    题目传送门 题目描述:给出一个数列的第一项和第二项,计算第n项. 递推式是 f(n)=f(n-1)+2*f(n-2)+n^4. 由于n很大,所以肯定是矩阵快速幂的题目,但是矩阵快速幂只能解决线性的问题 ...

  7. POJ 3734 Blocks(矩阵快速幂+矩阵递推式)

    题意:个n个方块涂色, 只能涂红黄蓝绿四种颜色,求最终红色和绿色都为偶数的方案数. 该题我们可以想到一个递推式 .   设a[i]表示到第i个方块为止红绿是偶数的方案数, b[i]为红绿恰有一个是偶数 ...

  8. hdu 5950 Recursive sequence 递推式 矩阵快速幂

    题目链接 题意 给定\(c_0,c_1,求c_n(c_0,c_1,n\lt 2^{31})\),递推公式为 \[c_i=c_{i-1}+2c_{i-2}+i^4\] 思路 参考 将递推式改写\[\be ...

  9. HDU 5863 cjj's string game ( 16年多校10 G 题、矩阵快速幂优化线性递推DP )

    题目链接 题意 : 有种不同的字符,每种字符有无限个,要求用这k种字符构造两个长度为n的字符串a和b,使得a串和b串的最长公共部分长度恰为m,问方案数 分析 : 直觉是DP 不过当时看到 n 很大.但 ...

随机推荐

  1. C#学习系列-this的使用

    如有错误,欢迎指正. 1.代表当前类,在当前类中可使用this访问当前类成员变量和方法(需要注意的是 静态方法中不能使用this),也可用于参数传递,传递当前对象的引用. 下面贴代码: class P ...

  2. android上引入七牛 上传图片或者文件 最终整理版本(可用)

    前言: 以下是引入七牛的步骤,以及在七牛中上传文件和获取文件private 私密地址. 生成上传凭证和获取下载凭证 具体如果使用过程有什么疑问可以加QQ(备注:七牛问题). 1:导入相关的包(注意是4 ...

  3. CGContextTranslateCTM: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.

    最近在测试的过程中, 发现了SpringBoar的一个问题: SpringBoard[53] <Error>: CGContextTranslateCTM: invalid context ...

  4. 【技巧】只利用 Visual Stdio 自带的工具这么找父类?

    很多人说只能 F12 看见子类 其实vs里面有一个叫“对象浏览器” 通过这个就可以直接定位父类,不需要利用reflector之类的工具来找父类 具体如下:

  5. dropzone的使用方法

    http://www.renfei.org/blog/dropzone-js-introduction.html dropzone.js 是一个开源的 JavaScript 库,提供 AJAX 异步上 ...

  6. hdu2066一个人的旅行(多源点多汇点的最短路径问题)

    /* 思路:多源点,多会点的最短路径! 将最小号-1的节点但最源点,将最大号+1的点当作汇点! 将问题转变成从一个源点到一个汇点的最短路径的问题! 开始忘记初始化vector了,哇了好多次....坑爹 ...

  7. 提高性能:用RequireJS优化Wijmo Web页面

    上周Wijmo 2014 V2版本刚刚发布(下载地址),  有网友下载后发现仅仅使用了40个Widgets的一小部分,还需要加载全部的jquery.wijmo-pro.all.3.20142.45.m ...

  8. Oracle常见错误

    1. Oracle无法动态注册 在SQL*PLUS下多次输入alter system register.监听器的状态始终显示为The listener supports no services. 可查 ...

  9. 初探JavaScript(三)——JS带我"碰壁"带我飞

    已经写了两篇关于小白的JavaScript之行,不可否认,每一种语言都有其精华与糟粕之处,来不及细细体味其精华奥妙,也没法对其评头论足,只能先了解,后深入.到目前为止已经看完<JavaScrip ...

  10. 学习使用 jQuery & CSS3 制作照片堆栈效果

    在这个小实验中,我们使用 jQuery & CSS3 创建了一个交互式的照片堆栈效果.提供了一些模拟现实的互动的可能性给用户.这个想法的思路是:有一些照片在桌面上可以拖放一样,堆放和删除,每个 ...