想必大家對魔鬼序列:斐波那契數列都不陌生吧
f(n+2)=f(n+1)+f(n)
用程式設計實現的時候,有四種常見的方法:(當然乙個比乙個更為優化)
1.天真演算法,求哪個就迴圈去求哪個唄,這樣f(0),f(1)...前面的這些會重複好多遍計算,當然慢了。
2.由底至上的方法,用陣列儲存起來,按照順序乙個個往上計算,這樣就可以避免重複了。
3.利用通式,跟由底至上的時間效率差不多。
4.矩陣乘方。
由通式可得,斐波那契數列是個二階遞推數列,
因此,存乙個二維矩陣a,使得
(fn+2,fn+1)=(fn+1,fn)*a;
有規律可得,a=(1 1
1 0),呵呵這是個二維矩陣。
(fn+2,fn+1)=(fn+1,fn)*a=(fn,fn-1)*a^2...=(f1,f0)*a^(n+1)
即:(fn+1 fn =( 1 1 ^n;這個寫的有些抽象了
fn fn-1) 1 0)
在實際中,再採用快速冪的方法求,這樣一來時間效率就優化為o(㏒n);
矩陣優化遞推數列
求斐波那契數列第n項,輸出答案模10 9 7的值 n 2 63 對於學過線代的大佬請跳至solution 我們先介紹一下矩陣,我們表現形式就是二維陣列。而矩陣相對於二維陣列不同的是具有乘法運算。對於n m的矩陣a和m p的矩陣b,表示a b的矩陣c是n p的,其中矩陣c的第i行j列的元素滿足 舉個栗...
簡單遞推公式轉換矩陣求解
對於許多遞推題目,由於資料範圍太大直接迴圈寫會爆掉,這時首先想到的就是矩陣優化,把遞推式轉換成01矩陣通過快速冪優化。比如最簡單的斐波納挈,如果n非常大,迴圈遞推肯定是不合適的,那麼可以考慮下面的公式 f n f n 1 f n 1 f n 2 a 這裡的a是乙個01矩陣,此時的a 2 2的矩陣,可...
矩陣快速冪優化遞推式
文章原位址 第一行第一列元素為第乙個矩陣的第一行的每個元素和第二個矩陣的第一列的每個元素乘積的和 以此類推 第i行第j列的元素就是第乙個矩陣的第i行的每個元素與第二個矩陣第j列的每個元素的乘積的和。單位矩陣 n n的矩陣 mat i i 1 任何乙個矩陣乘以單位矩陣就是它本身 n 單位矩陣 n,可以...