矩陣快速冪優化遞推式

2021-08-08 01:18:55 字數 1384 閱讀 4549

文章原位址 

第一行第一列元素為第乙個矩陣的第一行的每個元素和第二個矩陣的第一列的每個元素乘積的和 以此類推 第i行第j列的元素就是第乙個矩陣的第i行的每個元素與第二個矩陣第j列的每個元素的乘積的和。

② 單位矩陣: n*n的矩陣 mat ( i , i )=1; 任何乙個矩陣乘以單位矩陣就是它本身 n*單位矩陣=n, 可以把單位矩陣等價為整數1。(單位矩陣用在矩陣快速冪中)

例如下圖就是乙個7*7的單位矩陣:

矩陣及其乘法的實現:

對於矩陣乘法與遞推式之間的關係:

如:在斐波那契數列之中

fi[i] = 1*fi[i-1]+1*fi[i-2] fi[i-1] = 1*f[i-1] + 0*f[i-2];

所以

矩陣快速冪:

因為矩陣乘法滿足結合律,原因如下

所以,我們可以用類似數字快速冪的演算法來解決矩陣快速冪。(前提:矩陣為n*n的矩陣,原因見矩陣乘法定義)

**[cpp]view plain

copy

matrix fast_pow(matrix a, 

intx)   

return

ans;  

}  

用矩陣快速冪求斐波那契數列的第n項的**:

[cpp]view plain

copy

#include

#include

#include

#include

using

namespace

std;  

const

intm = 1e9+7;  

struct

matrix   

matrix operator * (const

matrix y)   

void

operator = (

const

matrix b)   

};  

intsolve(

long

long

x)   

return

ans.a[0][0];  

}  int

main()   

矩陣乘法 快速冪優化遞推式

對於乙個一維的遞推式,如斐波那契數列 f 0 0,f 1 1,f n f n 1 f n 2 如果想求解第n個元素,一般就是用o n 複雜度來求解,但是這不是最優的 優化方法 矩陣乘法 快速冪 首先可以用乙個矩陣遞推下一維,對斐波那契來說,這個矩陣就是 1,1 1,0 那麼我們想求第n個數,只要把這...

矩陣快速冪優化遞推總結

rt,主要總結一下矩陣的求法。首先能用矩陣快速冪優化的遞推型別是f n 5f n 3 6f n 2 2f n 1 n 2 n 8之類的 也就是說遞推是線性遞推且f n i 前面的係數是常數,可以含有與n有關的多項式,也可以含有常數的這種遞推,下面總結一下矩陣的寫法 先考慮最簡單的常數,我們其實可以忽...

矩陣快速冪求遞推式

用矩陣將快速冪可以以logn級別的時間複雜度求出遞推式 典型題 求斐波那契數列第n項 n 2 31 1 顯然 一步一步遞推o n 演算法效率不夠 0 1 0 f n 3 f n 2 0 0 1 f n 2 f n 1 1 1 3 f n 1 f n 3 f n 2 3 f n 1 在方陣右上方 n ...