版权声明:转载必须注明原文链接,并且每50字(半角,向上取整)就要注明一次,侵权必究 https://blog.csdn.net/myjs999/article/details/86433706
已知数列
{a0,a1,⋯,an−1},求其最短线性递推式。即求数列
{r0,r1,⋯,rm−1}满足
∀i∈[m,n),ai=∑j=1mrj−1ai−j。
考虑不停地修改答案递推式。设
Rp表示得到的第
p个递推式,最开始的递推式为空,即
R0={}。记
di为
ai与由当前递推式算出的
ai的差。如果
di=0那么说明递推式到
i都是对的,否则记
fp表示
Rp的错误位置。考虑如何修改当前的
R。设新的递推式为
Rp+1,事实上,我们把
Rp加上
R′即可,其中
R′是
i−fp−1−1个
0拼上
M拼上
Rp−1的
−M倍,其中
M=dfp−1di。每次最多修改
n项,最多修改
n次,复杂度为
O(n2)。