矩陣快速冪學習筆記

2022-04-14 13:56:49 字數 959 閱讀 2734

其實會用快速冪已經有好長一陣子了,但是一直沒有寫一篇入門快速冪的筆記。

據說,在遞推式優化上具有神奇的效果(效率很高)

兩矩陣相乘,樸素演算法的複雜度是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)

}for(; k; k >>= 1)

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 )

接下來貼一道題目:zoj 2853 evolution.

矩陣快速冪 學習筆記

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

學習筆記 矩陣快速冪

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

矩陣快速冪 學習筆記

據說,矩陣快速冪在遞推式優化上相當神奇,而且效率很高。兩矩陣相乘,樸素演算法的複雜度是o n 3 如果求一次矩陣的m次冪,按樸素的寫法就是o n 3 m 既然是求冪,不免想到快速冪取模的演算法,這裡有快速冪取模的介紹,a b m 的複雜度可以降到o logb 如果矩陣相乘是不是也可以實現o n 3 ...