常系数齐次线性递推初探

常系数齐次线性递推式第n项的快速计算初探 XJB学后的XBJ胡扯

要做啥?

求\(f[n]=\sum_{i=1}^ka[i]f[n-i]\),\(a,f[1\to k]\)已经给出。

我会矩阵快速幂!

时间复杂度\(O(k^3\log n)\),其中\(n\le 10^9,k\le32000\),emmm。

会魔法!

设初始状态矩阵为\(S\),转移矩阵为\(A?\),不难发现一步转移长得像这个样子(四阶情形)
\[
\begin{bmatrix}
f[n]\f[n-1]\f[n-2]\f[n-3]
\end{bmatrix}
=\begin{bmatrix}
a[1]&a[2]&a[3]&a[4]\1&0&0&0\0&1&0&0\0&0&1&0\\end{bmatrix}
\begin{bmatrix}
f[n-1]\f[n-2]\f[n-3]\f[n-4]
\end{bmatrix}
\]
令\(n=n-k?\),构造序列\(c?\)满足\(A^n=\sum_{i=0}^{k-1}c[i]A^i?\),两边同时右乘\(S?\),
\[
A^nS=(\sum_{i=0}^{k-1}c[i]A^i)S=\sum_{i=0}^{k-1}c[i]A^iS
\]
我们的答案为\((A^nS)[0,0]\),注意\(A\)的特征,可以发现,
\[
(A^nS)[0,0]=\sum_{i=0}^{k-1} c[i](A^iS)[0,0]=\sum_{i=0}^{k-1}c[i]S[i,0]
\]
所以只要构造出\(c?\),我们就能\(O(k)?\)地完成答案的计算。所以\(c?\)的构造才是重点啊

令\(G(A)\)是一个以矩阵为参数的\(k\)次多项式,并且\(G(A)=0\),那么
\[
A^n=P(A)G(A)+Q(A)=P(A)G(A)+\sum_{i=0}^{k-1}c[i](A^i)=\sum_{i=0}^{k-1}c[i]A^i
\]
所以序列\(c\)就是\(A^n\bmod G(A)\)的系数。所以\(G(A)\)的构造才是重点啊

更强duliu的魔法

上接,若等式\((\lambda I-A)V=0?\)成立,称\(\lambda?\)为\(A?\)的特征值,\(V?\)为特征向量,有如下结论

  1. 若\(\det(A)\not=0\),则\(A\)有\(k\)组线性无关的特征向量
  2. \(\det(\lambda I-A)=0\)是等式种\(V\)存在的充要条件(\(p(\lambda)=\det(\lambda I-A)\)是\(A\)的特征多项式)

Cayley-Hamilton theorem

若\(\det(A)\not=0\),则\(\prod_{t}(\lambda[t]I-A)=0\),\(\lambda[t]\)是第\(t\)个特征值。

一个很假的证明

显然,上边这个多项式也是一个\(k\)阶方阵,而且\((\lambda[t]I-A)\)部分具有交换律,进而右乘任意特征向量为0。此时\(A\)有\(k\)个线性无关的特征向量,所以任一个\(k\)维向量能以\(k?\)个特征向量为基被分解,整体被右乘=分解后的被右乘求和=0。

换言之,该方阵右乘任一个向量为0,则这个方阵为0。

肉眼可见对于转移矩阵\(A?\)满足\(\det(A)=(-1)^{k-1}a[k]\not=0?\),所以\(G(x)=\prod_{t}(\lambda[t]I-A)?\)。

然而还是还是不会

结论多项式\(p(\lambda)\)与多项式\(\prod_{t}(\lambda[t]I-A)\)的系数一样。

所以求出\(p(\lambda)?\)的系数就好了,手玩可得
\[
p(\lambda)=\lambda^k-\sum_{i=1}^ka[i]\lambda^{k-i}
\]
算出来的\(p(\lambda)\)可没有系数\((-1)^k\)呀!

所以,得到\(p(\lambda)?\)的系数构造出\(G(A)?\)再得到\(A^n\bmod G(A)?\),然后获取答案就行了。

取模的那部分是快速幂套多项式取模,所以总的时间复杂度为\(O(k\log k\log n)?\)。

魔法的copy实现

暂时留坑 题目传送门

原文地址:https://www.cnblogs.com/nosta/p/10430212.html

时间: 2024-11-04 13:06:34

常系数齐次线性递推初探的相关文章

「常系数齐次线性递推」——矩阵快速幂的优化

引入: 对于递推方程: $$F(x) = \sum_{i=1}^k a_iF(x-i)$$ 我们显然会得到一个关于$F$的多项式求逆或者矩阵递推式,大多数情况下我们都是用后者,但是当$k$很大的时候,$k^3log n$的时间复杂度我们是吃不消的,那么自然我们的前人就搞出了一些优化. 特征多项式及Cayley-Hamilton定理: 一.特征多项式的定义: 设$A$是$n$阶矩阵,若数$\lambda$和非零列向量$x$使关系式$$Ax=\lambda x\;\;\;\;\;(1)$$ 成立,那

常系数齐次线性递推

常系数齐次线性递推 给定递推式\(f_n =a_1f_{n-1} + a_2 f_{n-2}...+a_k f_{n-k}\). 给定\(f_0,f_1...f_k\),求\(f_n\). 先定义\(f_n\)的特征方程:\(C(x) = x^{k-1} - a_1 x^{k-2} - a_2 x^{k-3}...-a_{k-1}x - a_k\). 求齐次线性递推通项式 由基本代数定理,\(C(x) = 0\) 的解(称为特征根)有\(K\)个,设为\(\alpha_1\).\(\alpha_

LG4723 【模板】常系数齐次线性递推

P4723 [模板]常系数齐次线性递推 题目描述 求一个满足$k$阶齐次线性递推数列${a_i}$的第$n$项. 即:$a_n=\sum\limits_{i=1}^{k}f_i \times a_{n-i}$ 输入输出格式 输入格式: 第一行两个数$n$,$k$,如题面所述. 第二行$k$个数,表示$f_1 \ f_2 \ \cdots \ f_k$ 第三行$k$个数,表示$a_0 \ a_1 \ \cdots \ a_{k-1}$ 输出格式: 一个数,表示 $a_n \% 998244353$

常系数齐次线性微分方程

二阶 变系数 齐次 线性微分方程:y''+P(x)y'+Q(x)y=0  _齐次就是右边等于0,P(x),Q(x)不是常数. 二阶 常系数 齐次 线性微分方程  y''+py'+qy=0  _其中p,q是常数. 假如y1,y2是y''+py'+qy=0 的解,那么通解的形式就是 C1y1+C2y2 = y 由于假如y=erx  y'=rerx  y''=r2erx 代入y''+py'+qy= r2erx + prerx + qerx = erx(r2+pr+q) = 0 所以 r2+pr+q=0

[HDOJ2604]Queuing(递推,矩阵快速幂)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2604 递推式是百度的,主要是练习一下如何使用矩阵快速幂优化. 递推式:f(n)=f(n-1)+f(n-3)+f(n-4),其中f(0)=2, f(1)=4, f(2)=6, f(3)=9. 当n>4时候,需要通过这个关系来递推. 构造矩阵这种东西我以前一直认为是很玄学的,但是如果深入研究的话不难发现其实也有规律可循.这是一个齐次递推式,很好构造. 我们希望通过如下矩阵(1)得到矩阵(2) | f(n

[普通递推数列] 转自《信息学奥赛之数学一本通》

[普通递推数列] 问题描述 给出一个k阶齐次递推数列f[i]的通项公式 \[ f[i] = \prod_{j = 1}^k a_jf_{i-j} \] 以及初始值f[0], f[1], f[2], ··· , f[k - 1], 求f[n]. 输入格式 第一行两个整数n, k; 第二行k个整数,a[1] ~ a[k] 第三行k个整数,f[0] ~ f[k - 1] 输出格式 一行一个整数p, 是f[n] % 10000 的结果 example input 10 2 1 1 1 1 example

递推递归小结

已经被递推递归虐了几天了,(┙>∧<)┙へ┻┻ 但是显而易见的是没有任何进展...作为一块并不Q弹好吃的连1116都不会写的蒟蒻突然饿了,我还能说什么呢. 所以只能给对面的一群大神跪了%%%%%%%%%%%%%orz 递推递归主要就是找思路,找到思路就并没有什么区别了. 但是我找不到思路啊 ╮(╯_╰)╭ 所以就找题解,但是递推专项找到的最齐的只有Pascal的代码,所以就看着Pascal的代码码了几道,于是到现在依然是明白了了几道题但是找不到规律一脸懵逼(=?ω?=)神圣与邪恶有汉化更新了呢

hdu 1207 汉诺塔II (DP+递推)

汉诺塔II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 4529    Accepted Submission(s): 2231 Problem Description 经典的汉诺塔问题经常作为一个递归的经典例题存在.可能有人并不知道汉诺塔问题的典故.汉诺塔来源于印度传说的一个故事,上帝创造世界时作了三根金刚石柱子,在一根柱子上从下往

hdu 1267 递推

下沙的沙子有几粒? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 4326    Accepted Submission(s): 2268 Problem Description 2005年11月份,我们学校参加了ACM/ICPC 亚洲赛区成都站的比赛,在这里,我们获得了历史性的突破,尽管只是一枚铜牌,但获奖那一刻的激动,也许将永远铭刻