我知道这更像是一个复杂的理论问题,而不是一个编程问题,希望我在这里写错了,如果这是错误的地方,我道歉,但我希望你有人得到答案。它甚至可以通过复杂性理论来解决与程序相关的问题。
我正在研究线性重复序列,我读到为了获得序列的第n个值,它需要获得一些伴随矩阵的功能,我想知道是否有一个已知的算法以快速的方式获得这种矩阵的权力..
我不能给出编码示例,但我会尝试给你一些解释:
k阶的齐次线性重复序列:
s(n + k)= a(k-1)s(n + k-1)+ a(k-2)s(n + k-2)+ ... + a(0)
对于n = 0,1,..其中s(i)是序列的第i个值,而a(i)是代数域中的系数。
A是以上序列的伴随矩阵,如果是:
(0 0 0 0 ... 0 a(0))
(1 0 0 0 ... 0 a(1))
(0 1 0 0 ... 0 a(2))
(.. .. .. .. .. .. .. .. ..)
(0 0 0 0 ... 1 a(k-1))
此外,理论指出,对于序列的状态向量,我们有:
s(n)= s(0)A ^ n,n = 0,1,...
就是这样,谢谢你的帮助。
答案 0 :(得分:2)
快速查找矩阵幂的常用策略是对角化(执行特征向量分解):
A = P -1 D P
其中D是对角矩阵。然后,您可以通过计算
将A提升到幂nn = P -1 D n P
其中D n 计算速度快,因为它是一个对角矩阵,所以你只需要分别考虑每个元素的幂。
然而,并非所有矩阵都是对角线的 - 我不知道你的伴星矩阵是否存在。您可能会发现this Wikipedia article在任何情况下都很有帮助。
答案 1 :(得分:1)
您可以使用n
矩阵产品计算矩阵M
的{{1}}幂:
O(log n)
,请返回n=0
I
为偶数,请计算n
N=M
并返回n/2
N*N
为奇数,请计算n
N=M
并返回n-1