矩陣快速冪 學習筆記

2022-07-25 06:39:07 字數 956 閱讀 8563

** 

據說,矩陣快速冪在遞推式優化上相當神奇,而且效率很高。。。

兩矩陣相乘,樸素演算法的複雜度是o(n^3)。如果求一次矩陣的m次冪,按樸素的寫法就是o(n^3*m)。既然是求冪,不免想到快速冪取模的演算法,這裡有快速冪取模的介紹,a^b %m 的複雜度可以降到o(logb)。如果矩陣相乘是不是也可以實現o(n^3 * logm)的時間複雜度呢?答案是肯定的。

先定義矩陣資料結構:  

struct mat ;
o(n^3)實現一次矩陣乘法

mat operator * (mat a, mat b) }}

return c;

}

下面介紹一種特殊的矩陣:單位矩陣

很明顯的可以推知,任何矩陣乘以單位矩陣,其值不改變。

有了前邊的介紹,就可以實現矩陣的快速連乘了。

mat operator ^ (mat a, int k) 

return c;

}

舉個例子:

求第n個fibonacci數模m的值。如果這個n非常大的話,普通的遞推時間複雜度為o(n),這樣的複雜度很有可能會掛掉。這裡可以用矩陣做優化,複雜度可以降到o(logn * 2^3)

如圖:

a = f(n - 1), b = f(n - 2),這樣使構造矩陣

的n次冪乘以初始矩陣

得到的結果就是

。因為是2*2的據稱,所以一次相乘的時間複雜度是o(2^3),總的複雜度是o(logn * 2^3 + 2*2*1)。

矩陣快速冪 學習筆記

首先,我們需要了解矩陣。矩陣說白了就是一堆數,排成長方形的形狀。然後就是矩陣的運算,加減都很簡單,這裡談一下乘法 所以矩陣相乘,一定是有其中乙個矩陣的行等於另乙個矩陣的列的。矩陣快速冪則和一般的快速冪的操作是一樣的,只是把乘法變成了矩陣乘而已,就像過載那樣。這裡還要說一下單位矩陣 對於n m n m...

矩陣快速冪學習筆記

其實會用快速冪已經有好長一陣子了,但是一直沒有寫一篇入門快速冪的筆記。據說,在遞推式優化上具有神奇的效果 效率很高 兩矩陣相乘,樸素演算法的複雜度是o n 3 如果求一次矩陣的m次冪,按樸素的寫法就是o n 3 m 既然是求冪,不免想到快速冪取模的演算法,這裡有快速冪取模的介紹,a b m 的複雜度...

學習筆記 矩陣快速冪

前置芝士 矩陣 矩陣乘法 這兩個芝士並不是很難 重點可能在應用方面 首先介紹我所理解的廣義的矩陣乘法 現在我們手上有兩個矩陣 a 和 b 我們期望得到乙個答案矩陣 ans 其中 ans i j ans i j a i k b i k 其中 代一種運算 如 min max 等等 都可以用矩陣快速冪把遞...