常係數齊次線性遞推

2022-04-29 19:51:08 字數 1233 閱讀 3160

給定遞推式\(f_n =a_1f_ + a_2 f_...+a_k f_\)。

給定\(f_0,f_1...f_k\),求\(f_n\)。

先定義\(f_n\)的特徵方程:\(c(x) = x^ - a_1 x^ - a_2 x^...-a_x - a_k\)。

由基本代數定理,\(c(x) = 0\) 的解(稱為特徵根)有\(k\)個,設為\(\alpha_1\)、\(\alpha_2...\alpha_k\)。

有\(f_n\)的母函式\(g(x) = \frac\)。

對於非重根\(\alpha\),它在通項公式\(t_n\)中的貢獻形如\(a \alpha^n\),其中\(a\)為待定係數。

對於重根\(\beta\),設其為\(r\)重根,它在通項公式中的貢獻形如\((\sum_^r h_i n^ )\beta^n\)。

根據上述把通項式\(t_n\)列出來,利用前\(k\)項待定係數即可得到通項公式。

定義向量\(a_i = (f_i,f_,f_...f_)\),定義轉移矩陣\(m\)。

初始我們知道\(a_0 = (f_0,f_1,f_2...f_)\),現在要求\(f_n\),即求\(a_n = (f_n,f_...f_)\)。

可以矩陣快速冪\(a_0*m^\),複雜度\(o(k^3logn)\)。

將轉移矩陣\(m\)帶入特徵多項式有:\(f(m) = m^k - \sum_^k a_i m^\)。

根據某定理,我們有\(f(m) = 0\),所以我們可以對\(m^n\)化簡,即\(m^n \equiv g(m)\ (mod\ f(m))\)。

即我們求出\(g(m)\),那麼\(a_0g(m)\)與\(a_0m^n\)等價。

\(a_n = a_0g(m) = a_0\sum_^ g_i m^i\),其中\(g_i\)即我們多項式取模後第\(i\)項的係數。

然後\(a_n = \sum_^ g_i a_0m^i\)。我們只需要求\(f_n\),即只需要知道向量\(a\)的第一項。

所以\(a = a_0m^i\)的第一項是什麼?不就是\(f_i\)嗎!而\(f_i,i\in [0,k-1]\)我們事先知道。

所以\(f_n = \sum_^ g_i f_i\)。

實現上,關鍵在於求\(g(x)\),顯然\(m^n\)我們不能一開始就把它存成乙個多項式,所以需要倍增。

倍增的同時需要多項式乘法與多項式取模,

暴力做的話總複雜度為\(o(k^2logn)\),使用多項式運算複雜度為\(o(klogklogn)\)。

常係數齊次線性遞推

見洛谷模板題。有個數列 給出前 k 項,即 a 0,a 1,dots,a 對於後面的所有 a n 有 a n sum f ia f 給出。小學生 直接幹。初中生 矩陣乘法。現在設 a 為轉移矩陣。列向量 vec v a a dots,a 0 滿足 a vec v a a dots,a 1 我們要求 ...

模板 常係數齊次線性遞推

題目傳送門 給出 k,a f 存在 forall n k wedge n in mathbb,exists a n sum f ka 給出 n 求出 a n n le 10 9,k le 32000 以下部分借鑑了 bjpers2 的題解 恭喜您!您獲得了 theta k 3 log n 的時間複雜...

線性常係數齊次遞推總結

本文為作者的一些理解,如有錯誤之處請指出。其實就是這樣乙個式子 a n alpha 1a alpha 2a alpha 3a alpha ka 因為它是線性的,沒有高次的項,而且次數都相等,沒有一些不是常數的奇怪函式夾在裡面 所以它叫這個名字 還有它的特徵方程是 x k alpha 1x alpha...