目录

转移矩阵求解套路

常见转移矩阵1-斐波那契矩阵

承接套路

常见转移矩阵2-类斐波那契数列

常见转移矩阵3-幂常数

 前缀和

具体DP问题


---------------------------------------------------------------------------------------------------------------------------------

网上大部分讲解都是停留在快速幂的模板和求解斐波那契数列上,但矩阵快速幂的应用远不及此,且难点在于转移矩阵的构造,而且会结合具体DP问题来构造转移矩阵。

答案的求解包括三个矩阵 答案矩阵 = 转移矩阵 * 初始矩阵

转移矩阵求解套路

重点在于转移矩阵的求得,套路是,找到转移方程,由特殊到一般,考虑承接

常见转移矩阵1-斐波那契矩阵

找到转移方程

转移矩阵 深度学习_斐波那契数列

可知,要想求解f[n],必须知道f[n-1],f[n-2]

考虑特殊情况f[n]

得初始矩阵

转移矩阵 深度学习_斐波那契_02

答案矩阵(f(n)处于(1,1)位置,故是转移矩阵的第一行乘上初始矩阵的第一列)

转移矩阵 深度学习_转移矩阵 深度学习_03

转移矩阵

转移矩阵 深度学习_转移矩阵 深度学习_04

得到特殊矩阵

转移矩阵 深度学习_斐波那契数列_05

考虑承接

考虑到我们即使我们本次求得了f(n),但是我们不得不为下一次f(n+1)的求解做准备,因此我们需要承接上次求解的f(n-1),如何求解,很容易,f(n-1)在(2,1)位置,只需要转移方程第二行乘上初始方程等于f(n-1)即可,

     

转移矩阵 深度学习_转移矩阵 深度学习_06

特殊到一般

对转移方程进行快速幂,把初始方程变成普通dp时最初状态,在斐波那契中的dp解法中,我们只需要先知道dp[0]=0,dp[1]=1即可。转移方程的幂数是n-1

转移矩阵 深度学习_斐波那契数列_07

当然,也完全可以这样,

转移矩阵 深度学习_快速幂_08

承接套路

值得注意的是,这种承接方式在大多数题目中都适用,也就是将二行往后的每行i,(i,i-1)位置填上1,其余位置填上0即可。

 

转移矩阵 深度学习_快速幂_09

常见转移矩阵2-类斐波那契数列

主要是一些含有常数系数的

 

转移矩阵 深度学习_斐波那契数列_10

第一行换系数,第二行往后考虑承接即可

 

转移矩阵 深度学习_斐波那契_11

常见转移矩阵3-幂常数

 

转移矩阵 深度学习_斐波那契_12

按照第一类时的套路,求fn,无非就是要知道fn-1,与n^2

转移矩阵 深度学习_快速幂_13

可是我们发现,要求出(n+1)^2,靠n^2是远远不够的

(n+1)^2=n^2+1+2*n  ,我们还应该知道n,和常数1

转移矩阵 深度学习_斐波那契数列_14

 n+1)^2被推了出来,还要考虑本次能供fn+1使用,因此还应该加上n+1,与常数1

转移矩阵 深度学习_斐波那契数列_15

 然后特殊化一般,利用快速幂求解即可。

其余更高次幂常数,利用二项式定理

n^3 = (n-1+1)^3 = (n-1)^3 + 3*(n-1)^2 +   3*(n-1)  + 1

n^4  =(n-1+1)^4 = (n-1)^4  + 4*(n-1)^3  + 6*(n-1)^2 + 4*(n-1)  + 1

.......以此类推

n^3为例 

转移矩阵 深度学习_斐波那契数列_16

 前缀和

T[0]=T[1]=T[2]=1;

T[N]=T[N-1]+T[N-2]+T[N-3]

求解  T[A]+T[A+1]+...+T[B]

也就是要构造前缀和sb,sa-1

可以先求出sn

sn=tn+sn-1

这里的tn的构造方式就是一个类菲波那切数列的构造方式

转移矩阵 深度学习_斐波那契数列_17

考虑承接即可

转移矩阵 深度学习_快速幂_18