码迷,mamicode.com
首页 > 其他好文 > 详细

常系数齐次线性递推

时间:2019-08-29 23:04:14      阅读:97      评论:0      收藏:0      [点我收藏+]

标签:spl   play   The   知识   一点   矩阵   推导   master   暴力枚举   

常系数齐次线性递推

名字的来由大概是系数是常数,次数相同的线性递推。

形式

形如
\[ a_n=\sum_{i=1}^ka_{n-i}*b_i \]

题目

现在给你\(a,b\)数组,求\(a_n\),满足\(n \ge k\)

Newbie(我)的做法

直接暴力枚举,复杂度\(\Theta(n*k)\)

Naive(HYJ)的做法

考虑每一次转移都是相同的,所以可以把\(b\)写到矩阵里面然后矩阵快速幂转移。

Master(_zzy)的做法

前置知识

特征多项式和特征方程(自行百度)

推导

现在我们要求的就是\(b^n\),一般的矩阵快速幂复杂度\(k^3logn\),所以我们需要奇技淫巧。

\(b^n=\phi(B)*P(B)+Q(B)\),又因为\(\phi(B)=0\),所以\(Q(B)=b^n\)

此时我们要求的就是\(Q(B)\),然后它是一个和\(\phi(B)\)拥有同样项数\(k\)的多项式,所以复杂度变成了\(k^2log^2n\)

还可以进一步优化,即\(Q(B)\)每一次长度会\(*2\),但是我们可以只去前\(k\)位,把后面的系数补上来,这样就做完了。

于是我们推出了一些形如
\[ a_n=\sum_{i=1}^ka_{n-i}*b_i \]
的式子的快一点点的求法!

BZOJ4161 Shlw loves matrixI

直接按照上文的方法做就行了。但是由于\(BZOJ\)机子太快了我\(TLE(80s)\)了。

如果是\(CJ\)的同学可以去\(MOJ\)提交(当然如果你像\(\texttt{hyj}\)一样快就没必要了)

常系数齐次线性递推

标签:spl   play   The   知识   一点   矩阵   推导   master   暴力枚举   

原文地址:https://www.cnblogs.com/mleautomaton/p/11432428.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!