求解O(log n)时间内的非齐次线性递归关系

时间:2014-10-02 02:53:57

标签: algorithm relation recurrence

我看到了关于用矩阵幂解决O(log n)时间内的重现的问题:Solving a Fibonacci like recurrence in log n time

这个问题中的递归关系是同质的。

是否存在非齐次线性递归关系的矩阵?

我的复发是:

a(n)= a(n-1)+ a(n-2)+ 1,其中a(0)= 1且(1)= 1

"加上一个"使线性递归关系成为非均匀关系。

如果没有这种线性递归关系的矩阵,我怎样才能在O(log n)时间内计算a(n)?

2 个答案:

答案 0 :(得分:3)

您需要按照通常的步骤来解决非均匀线性递归问题。首先求解非均匀部分以获得方便的边界条件,然后求解均匀部分。

经验表明,这里最方便的边界条件是

a'(0) = -1 and a'(1) = -1,

导致所有a'(n) = -1重复发生的解决方案n

a'(n) = a'(n - 1) + a'(n - 2) + 1.

现在我们为b(n) = a(n) - a'(n)编写线性齐次递归。

b(0) = a(0) - a'(0) = 2 and b(1) = a(1) - a'(1) = 2
b(n) = a(n) - a'(n)
     = a(n - 1) + a(n - 2) + 1 - a'(n - 1) - a'(n - 2) - 1
     = a(n - 1) - a'(n - 1) + a(n - 2) - a'(n - 2)
     = b(n - 1) + b(n - 2)

通过检查,b(n)的解决方案为b(n) = 2 Fibonacci(n + 1),因此自a(n) = b(n) + a'(n)起,我们a(n) = 2 Fibonacci(n + 1) - 1

答案 1 :(得分:1)

您可以以矩阵形式为3D矢量[a [n-1],a [n],1]'编写递归方程。相应的向量递归是

/  a[n]  \     /  0  1  0  \   /  a[n-1] \
| a[n+1] |  =  |  1  1  1  | * |   a[n]  | 
\    1   /     \  0  0  1  /   \     1   /

因此,蛮力矩阵求幂解也确实成为可能。