矩陣快速冪中矩陣的構造技巧
對於出現線性遞推的題目,當直接暴力計算的複雜度太高時,我們可以考慮用矩陣快速冪進行加速。
因為雖然矩陣乘法的複雜度為O(n^3),但是通過二進位制分解,整體的複雜度變成了 log(n^3) = 3logn = O(logn),複雜度是對數級別的,非常小。
但是矩陣快速冪的難點就是在如何構造矩陣來完成計算。
因為矩陣快速冪是用來加速線性遞推的,所以最核心的部分就是線性遞推公式。
最經典的就是斐波那契數列的遞推: f(n) = f(n-1) + f(n-2);
其對應的矩陣就是 f(n+1) 1 1 f(n)
f(n) = 0 1 * f(n-1)
可以發現,左面是個常數矩陣,而右面的列向量中每一項就是遞推公式中的依賴項。
當遞推公式中出現常數時,我們只需在右面的列向量中加入個常數1,即可。
剩下的就是我們如何去構造左面的常數矩陣。其實給出了右面的列向量,我們在根據題中的遞推公式,在左面的常數矩陣中填入對應的常數即可。
這樣,這個問題就圓滿的解答了。
相關推薦
矩陣快速冪中矩陣的構造技巧
對於出現線性遞推的題目,當直接暴力計算的複雜度太高時,我們可以考慮用矩陣快速冪進行加速。 因為雖然矩陣乘法的複雜度為O(n^3),但是通過二進位制分解,整體的複雜度變成了 log(n^3) = 3logn = O(logn),複雜度是對數級別的,非常小。 但是矩陣快速冪的難
POJ-3735-Training little cats-構造矩陣+矩陣快速冪+稀疏矩陣乘法優化
http://poj.org/problem?id=3735 題意: n只貓,三種命令: 1、第i只貓吃掉所有花生; 2、第i只貓得到一個花生; 3、交換第i,j只貓的花生; 先由k個 這些命令組成一個操作序列 然後重複操作序列m次, n,k<=100,m<=1
How many ways?? 矩陣快速冪 鄰接矩陣意義
logs blog define const 滿了 def con input 結果 春天到了, HDU校園裏開滿了花, 姹紫嫣紅, 非常美麗. 蔥頭是個愛花的人, 看著校花校草競相開放, 漫步校園, 心情也變得舒暢. 為了多看看這迷人的校園, 蔥頭決定, 每次上課都走不同
UVa 11149 Power of Matrix (矩陣快速冪,倍增法或構造矩陣)
分解 ack 題意 技術 cstring set sizeof lib cto 題意:求A + A^2 + A^3 + ... + A^m。 析:主要是兩種方式,第一種是倍增法,把A + A^2 + A^3 + ... + A^m,拆成兩部分,一部分是(E + A^(m/2
矩陣快速冪---矩陣構造
矩陣構造方法 Fibonacci數列:F(0)=1 , F(1)=1 , F(n)=F(n-1)+F(n-2) 我們以前快速求Fibonacci數列第n項的方法是 構造常係數矩陣 (一) Fibonacci數列f[n]=f[n-1]+f[n-2],f[1]=f[2
矩陣快速冪(構造)
構造矩陣 #include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #include <cmath> #incl
構造矩陣+矩陣快速冪
Recursive sequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 29 Accepted Submission(s
矩陣快速冪的構造
參考部落格:https://blog.csdn.net/Akatsuki__Itachi/article/details/80443939 a[i]=a[i-1]+b[i-1]+1,b[i]=2*a[i-1]-5 ;a[1]=1,b[1]=1,問a[x]=?,b
poj 3735 Training little cats 構造矩陣+稀疏矩陣加速連乘+矩陣快速冪
題面描述: Training little cats Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 13366 Accepted: 3293 Description Facer's p
POJ 3233 Matrix Power Series 解題報告(子矩陣構造+矩陣快速冪)
Matrix Power Series Time Limit: 3000MS Memory Limit: 131072K Total Submissions: 14105 Accepted: 6078 Description Given a n × n m
hdu 5950 Recursive sequence(矩陣快速冪,構造)
N較大,直接遞推會超時,可以用矩陣快速冪 也是的函式,且 所以在構造的矩陣中維護到 #include <iostream> #include <cstdio> #include <algorithm> #include &
矩陣快速冪在常係數線性遞推關係中的應用
先引入一下,知乎上有一個問題 關於斐波拉契數列的一個低階問題 。題主詢問了關於求解斐波拉契數列第n項對10007取模的結果。而這個n,可以達到106甚至109 。 解法已經在排名第一的回答中給出了,主要思路就是快速冪和矩陣乘法的結合律,亦即矩陣快速冪。具體方法
hdu4686 Arc of Dream ——構造矩陣+快速冪
矩陣構造: 一個矩陣全是常量,另一個是a[i]的,求a[i+1]的! 構造矩陣如下: Ai*bi AX*BX AX*BY AY*BX AY*BY 0 a(i-1)*b(i-1) Ai 0 A
HDU 5950 Recursive sequence(矩陣構造+矩陣快速冪)
題目地址 題意:就說告訴你f(1) = a,f(2) = b,f(n) = f(n−1)+2∗f(n−2)+n^4,求出f(n)的值。 思路:這類題目就是用矩陣快速冪來寫的,這類題目難的就是構造矩陣,我們可以發現一些規律(如下) f(n) = f(n
石頭遊戲 構造+矩陣快速冪
石頭 cpp 進行 上進 struct 需要 有一個 esp etc 石頭遊戲 權限題。 描述 石頭遊戲在一個 n 行 m 列 (1≤n,m≤8) 的網格上進行,每個格子對應一種操作序列,操作序列至多有10種,分別用0~9這10個數字指明。 操作序列是一個長度不超過6且循環
快速冪算法(矩陣快速冪還不是很會。。日後會更新)
代碼 -s get 運算 logs == data 。。 outb PS:轉載,自己寫的不如人家,怕誤導。轉載地址:http://www.cnblogs.com/CXCXCXC/p/4641812.html 首先,快速冪的目的就是做到快速求冪,假設我們要求a^b,按照樸素算
poj 3070 Fibonacci(矩陣快速冪求Fibonacci數列)
代碼 include cnblogs inf stream exp class set names 題目鏈接: http://poj.org/problem?id=3070 題意: 我們知道斐波那契數列0 1 1 2 3 5 8 13…… 數列中的第i位為第i-1位
poj 3735 Training little cats (矩陣快速冪)
log ack make .cn code little logs 矩陣快速冪 style 題目鏈接: http://poj.org/problem?id=3735 題意: 有n只貓咪,開始時每只貓咪有花生0顆,現有一組操作,由下面三個中的k個操作組成:
poj3233 Matrix Power Series 矩陣快速冪
分享 std 答案 span print .org log .cn ring 題目鏈接: http://poj.org/problem?id=3233 題意: 給你A矩陣,A矩陣是n*n的一個矩陣,現在要你求S = A + A^2 + A^3 + … + A^k.那麽s一定
[luoguP1962] 斐波那契數列(矩陣快速冪)
truct ons 技術 pan opera http 快速冪 printf ble 傳送門 解析詳見julao博客連接 http://worldframe.top/2017/05/10/清單-數學方法-——-矩陣/ —&