矩陣快速求冪

2022-08-28 00:06:13 字數 711 閱讀 8549

在只使用標準庫的情況下,c++沒有現成的處理矩陣的標準庫,所以矩陣的運算就比較麻煩,尤其是矩陣的乘法

加減法都可以對應位置做加減,乘法的運算相對比較複雜,冪運算又會帶來的大量的乘法運算,所以這裡記錄一種

矩陣快速求冪的方法。這種方法可以將運算降低至指數次,原理是這樣的:

1.矩陣a的m次方,先把m分解成二進位制數,然後二進位制的對應為轉換為十進位制,就可以將m分解為2的冪指數相加,例如:10 = 8 + 2; 22 =    16 + 4 + 2;

2.按照2的冪指數從小到大依次開方,然後二進位制數對應為1的位數相加,就可以得到答案了

接下來是**,這裡用存放鍊錶的鍊錶來表示矩陣:

#include #include 

using

namespace

std;

typedef vector

vec;

typedef vector

mat;

//矩陣做乘法

mat mul(mat &a, mat &b)}}

returnc;}

//矩陣快速求冪, n為指數

mat mpow(mat a, int

n)

while (n>0

)

returnb;}

intmain()

例項中的主函式利用了矩陣快速求冪求斐波那契數列,原理如圖:

矩陣快速求冪

今天看 劍指offer 看到乙個遞推關係 f n f n 1 f n 2 書中提出了一種簡單的演算法,也就是矩陣乘法 如果是n次方,那麼時間複雜度應該是o n 那麼有沒有一種更快的演算法呢?快速冪演算法能讓時間複雜度降至o logn 怎麼來做快速冪演算法呢?我們首先先想乙個簡單的,乙個數字a,求他的...

矩陣快速冪求fib

qn是個特別可愛的小哥哥,qy是個特別好的小姐姐,他們兩個是一對好朋友 cp 劃掉 又是一年嚶花爛漫時,小qn於是就邀請了qy去嚶花盛開的地方去玩。當qy和qn來到了田野裡時,qy驚奇的發現,嚶花花瓣以肉眼可見的速度從樹上長了出來。仔細看看的話,花瓣實際上是以一定規律長出來的,而且,每次張成新的花瓣...

矩陣運算及 快速冪求矩陣

矩陣運算 這裡主要是針對方陣 是很重要的乙個環節,先說加法吧 加法比較簡單,同行同列想加就可以運算的 mat operator mat a,mat b 其次就是乘法 原理也簡單 線性代數應該學過,a i k 和 b k j 和做乘積運算得到c i j mat operator mat a,mat b...