用矩阵乘法优化的线性齐次递推公式求值
对斐波那契数列,
(fn,fn−1)⋅(1110)=(fn+1,fn)
这样的话我们可以在常数时间内求出这个通项的下一项。而如果要求第n项,就相当于对这个矩阵进行幂运算。
有没有想到些什么?没错,见幂就开始快速幂。复杂度logn,比线性求不知道高到哪里去了。
那么能不能进一步推广?当然可以。
如果
f(n)=a1f(n−1)+a2f(n−2)+...+akf(n−k)
那么显然,
(fn,fn−1,...,fn−k+1,fn−k)⋅⎛⎝⎜⎜⎜⎜⎜⎜a1a2...ak−1ak10...0001...00...............00...0000...10⎞⎠⎟⎟⎟⎟⎟⎟=
(fn+1,fn,...,fn−k+2,fn−k+1)