矩陣快速冪

2021-07-22 21:10:52 字數 710 閱讀 2655

矩陣的快速冪是用來高效地計算矩陣的高次方的。將樸素的o(n)的時間複雜度,降到log(n).

最簡單的例子來講,一般我們正常計算實數x的n次冪時,都是從1開始,進行n次的x相乘。

但做下簡單的改進就能減少連乘的次數,方法如下:

把n個矩陣進行兩兩分組,比如:a*a*a*a*a*a => (a*a)*(a*a)*(a*a)

這樣變的好處是,你只需要計算一次a*a,然後將結果(a*a)連乘自己兩次就能得到a^6,即(a*a)^3=a^6.這樣就很容易的實現了時間複雜度的優化。

在上面的問題中,最重要的就是如何選擇間距值,上面的解答給我們展示了間距為2的示例,但我們還可以有很多其他的選擇。那麼如何選擇出時間複雜度最低的呢,我們應該充分的使用現有的計算結果

回頭看看矩陣的快速冪問題,我們是不是也能把它離散化呢?比如a^19 => (a^16)(a^2)(a^1),顯然採取這樣的方式計算時因子數將是log(n)級別的(原來的因子數是n),不僅這樣,因子間也是存在某種聯絡的,比如a^4能通過(a^2)(a^2)得到,a^8又能通過(a^4)(a^4)得到,這點也充分利用了現有的結果作為有利條件。

下面舉個例子進行說明:

現在要求a^156,而156(10)=10011100(2)

也就有a^156=>(a^4)(a^8)(a^16)*(a^128)

while(n)

快速冪(矩陣快速冪)

求 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 ...

快速冪 矩陣快速冪

快速冪 我們求a ba b ab最直接的方法就是把a乘b次這樣的話複雜度就是o n o n o n 但是在比賽時面對1e9的資料時還是會輕鬆超時的,此時就需要一種更快的乘法來幫助我們 我們把b拆成二進位制的形式得到a ba b ab a 10.01 a a1 0.01此時對b分解得到的序列10.01...