關於矩陣加速數列遞推:
給定乙個遞推數列 \(f[i] = a_1*f[i-1] + a_2*f[i-2] … a_k*f[i-k]\) ,我們普通計算的話肯定是逐個計算,複雜度較大。
我們可以用矩陣表示:
\[ \left[
\begin
f[i] \\
f[i-1] \\
… \\
f[i-k]
\end
\right]
\]為了遞推出 \(f[n]\) ,我們需要找到乙個係數矩陣 \(a\) 使得:
\[ \left[
\begin
f[i] \\
f[i-1] \\
… \\
f[i-k]
\end
\right]
=a\times
\left[
\begin
f[i-1] \\
f[i-2] \\
… \\
f[i-k-1]
\end
\right]
\]就可以這樣計算:
\[ \left[
\begin
f[n+k] \\
f[n+k-1] \\
… \\
f[n]
\end
\right]
=a^\times
\left[
\begin
f[k] \\
f[k-1] \\
… \\
f[1]
\end
\right]
\]通過矩陣快速冪來計算 \(a^n\) 可以減小複雜度,問題是如何找到乙個 \(a\) 矩陣
容易發現,\(a\)矩陣可以這樣構造:
\[ \left[
\begin
a_1 & a_2 & … & a_k-1 & a_k \\
1 & 0 & … & 0 & 0 \\
0 & 1 & … & 0 & 0 \\
… & … & … & … & … \\
0 & 0 & … & 1 & 0
\end
\right]
\]即第一行為係數,從 \(a_\) 開始的一條斜線為 \(1\), 其餘為 \(0\),這樣構造可以保證 \(f[i]\) 被計算出來了,而其餘的元素都繼承了上乙個矩陣的值。
至此,我們可以愉快地用矩陣加速遞推數列了。
矩陣性質 矩陣加速遞推
本文介紹線性代數中乙個非常重要的內容 矩陣 matrix 的乙個重要性質 矩陣加速遞推同時本文已經更新至 矩陣 matrix 系統介紹篇 斐波那契數列 fibonacci sequence 大家應該都非常的熟悉了。在斐波那契數列當中,f 1 f 2 1 f i f f i geq 3 如果有一道題目...
模板 矩陣加速(數列)(矩陣加速遞推)
a 1 a 2 a 3 1 a x a x 3 a x 1 x 3 求a數列的第n項對1000000007 10 9 7 取餘的值。輸入格式 第一行乙個整數t,表示詢問個數。以下t行,每行乙個正整數n。輸出格式 每行輸出乙個非負整數表示答案。矩陣加速裸題 和我的前一篇基本一模一樣 只不過改變了要乘的...
矩陣加速遞推 入門指南
首先是乙個例題,輸入n和m,問用1x2的方塊填滿4xn的格仔共有多少種方案數,答案對m取模。分析問題可以找出所有狀態,用乙個1x4的位表示一行的方塊情況,0表示暫時為空,1表示恰好填入方塊。雖然4個二進位制位共有16中可能,但是合法的方案數實際只有6中,0000 0011 0110 1001 110...