矩陣快速冪詳解

2022-04-30 04:42:08 字數 2878 閱讀 3712

利用二進位制的方式來進行實現

\(2^0 = 2^0\)

\(2^1 = 2^1\)

\(2^2 = 2^2\)

\(2^3 = 2^2 * 2\)

\(2^4 = 2^4\)

\(2^5 = 2^4 * 2\)

\(2^6 = 2^4 * 2^2\)

\(2^7 = 2^4 * 2^2 * 2\)

所以我們可以看出來的是

二進位制位上我們現在只有當某一位是1的時候才乘

舉個例子

\[2^ =2^ = 2^ * 2^ * 2^ = 2^8 * 2^4 * 2^2 * 2^1

\]\[2^ = 2 ^ = 2^ * 2^ = 2^8 * 2^2

\]所以原來\(o(b)\)複雜度一下降低到了\(o(logb)\)

sample code

inline int pow(int a,int b)

return r;//返回結果

}

定義矩陣乘法的運算方式是:

\[c _ = \quad\sum _ ^na _ *b _

\]舉個例子

\[\begin

& & \\

& &

\end

\begin

\\\\

\end =

\begin

+ + \\

+ +

\end

\]\[\therefore

\begin

1 & 2 & 3 \\

4 & 5 & 6

\end

\begin

7 \\

8 \\

9\end =

\begin

1 * 7 + 2 * 8 + 3 * 9 \\

4 * 7 + 5 * 8 + 6 * 9

\end

\]\[\therefore

\begin

1 & 2 & 3 \\

4 & 5 & 6

\end

\begin

7 \\

8 \\

9\end =

\begin

50 \\

122\end

\]sample code

int n;//矩陣大小

void up(int &x, int y) //簡單定義 +=

struct matrix

};

在計算遞推式的時候,我們可以把遞推式構建成矩陣乘法的樣子

比如形如下列遞推式的遞推式:

\[f(n) = a * f(n - 1) + b * f(n - 2)

\]我們可以考慮構造成:

\[\begin

a & b \\

1 & 0

\end

\begin

f(n - 1) \\

f(n - 2)

\end =

\begin

f(n) \\

f(n - 1)

\end\]

然後就有:

\[\begin

a & b \\

1 & 0

\end

\begin

f(n - 1) \\

f(n - 2)

\end =

\begin

f(n) \\

f(n - 1)

\end

\]\[\because

\begin

a & b \\

1 & 0

\end

\begin

f(n - 2) \\

f(n - 3)

\end =

\begin

f(n - 1) \\

f(n - 2)

\end

\]\[\therefore

\begin

a & b \\

1 & 0

\end^2

\begin

f(n - 2) \\

f(n - 3)

\end =

\begin

f(n) \\

f(n - 1)

\end\]

\[\begin

a & b \\

1 & 0

\end^3

\begin

f(n - 3) \\

f(n - 4)

\end =

\begin

f(n) \\

f(n - 1)

\end\]

\[\begin

a & b \\

1 & 0

\end^

\begin

f(1) \\

f(0)

\end =

\begin

f(n) \\

f(n - 1)

\end\]

然後構造起來的道理是這樣,但是真正的矩陣是什麼樣子的還得自己知道怎麼推然後再去做

假如給你乙個形如\(f(n) = a * f(n - 1) + b * f(n - 2) + c * f(n - 3)\)你要是不會推還是會gg

然後因為有的時候\(dp\)的遞推式也可以用矩陣來加速,所以用處很大

前一部分的模板

sample code

void up(int &x, int y) //簡單定義+=

struct matrix

};matrix qpow(matrix x, int timer)//矩陣快速冪

矩陣快速冪詳解

在講矩陣快速冪之前,先引入整數快速冪的概念。整數快速冪 為了引出矩陣快速冪,以及說明快速冪演算法的好處,我們可以先求整數的冪。如果現在要算x 8 則x x x x x x x x x按照尋常思路,乙個乙個往上邊乘,則乘法運算進行7次。用 x x x x x x x x 這種求法,先進行乘法得x 2,...

快速冪(矩陣快速冪)

求 3 0 3 1 3 n mod 1000000007 input 輸入乙個數n 0 n 10 9 output 輸出 計算結果 sample input 3sample output 40 分析 利用等比數列的求和公式得所求和是 3 n 1 1 2,如果暴力求3 n 1 會超時,這裡引入快速冪來...

快速冪 矩陣快速冪

快速冪 正常情況下求乙個數的冪時間複雜度為o n 而快速冪能把時間複雜度降到o logn 舉個例子 求5的13次方 思想首先把13化為二進位制 1101,即13 1101 8 1 4 1 2 0 1 1 即5 13 58 1 54 1 52 0 5 1 15 5 8 1 5 4 1 5 2 0 5 ...