用矩陣將快速冪可以以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-1 * n-1 矩陣的主對角線上 填1 最下面一行 從右到左填 遞推式的係數
用矩陣實現遞推式
由矩陣的基本性質知 a^n *p =a^(n-1) *a*p
所以求遞推式第n項 可以通過* 轉移矩陣 n次實現
那麼問題來了 a^n 如何快速求?
可以用二分法遞迴求,也可以用二進位制累乘法
下面介紹二進位制快速冪:
2^11=2^1 * 2^2 * 2^8
也就是按照11的二進位制1011 加權算
**如下:
while(p)// a^n 最終結果就是矩陣 ans
對於 轉移矩陣 * 遞推首項 可以把遞推首項 設定為方陣 第一列有值,其餘列為0
這樣只用方陣乘法就夠了
matrix multi(matrix a,matrix b);9matrix a,b;
10int a0[15
],k,m;
11void
init()
1221
matrix multi(matrix a,matrix b)
2231
return
ans;32}
33int
main()
3451 ans=multi(ans,a);
52 cout<9][0]<54return0;
55 }
view code
矩陣快速冪優化遞推式
文章原位址 第一行第一列元素為第乙個矩陣的第一行的每個元素和第二個矩陣的第一列的每個元素乘積的和 以此類推 第i行第j列的元素就是第乙個矩陣的第i行的每個元素與第二個矩陣第j列的每個元素的乘積的和。單位矩陣 n n的矩陣 mat i i 1 任何乙個矩陣乘以單位矩陣就是它本身 n 單位矩陣 n,可以...
矩陣乘法 快速冪優化遞推式
對於乙個一維的遞推式,如斐波那契數列 f 0 0,f 1 1,f n f n 1 f n 2 如果想求解第n個元素,一般就是用o n 複雜度來求解,但是這不是最優的 優化方法 矩陣乘法 快速冪 首先可以用乙個矩陣遞推下一維,對斐波那契來說,這個矩陣就是 1,1 1,0 那麼我們想求第n個數,只要把這...
矩陣快速求冪
今天看 劍指offer 看到乙個遞推關係 f n f n 1 f n 2 書中提出了一種簡單的演算法,也就是矩陣乘法 如果是n次方,那麼時間複雜度應該是o n 那麼有沒有一種更快的演算法呢?快速冪演算法能讓時間複雜度降至o logn 怎麼來做快速冪演算法呢?我們首先先想乙個簡單的,乙個數字a,求他的...