计算:f(n)= f(n-1)+ f(n-2)+ f(n-3)+ n * n *(n +1)

时间:2019-06-16 19:27:36

标签: algorithm recurrence

对于重复关系:

f(0) = p
f(1) = q
f(2) = r
For n > 2,
f(n) = a * f(n - 1) + b * f(n - 2) + c * f(n - 3) + n * n * (n + 1)

给出一些 n <= 10 ^ 18,我想使用在 O(log n)<中运行的方法找出 f(n) < / strong>时间。

如果f(n)= f(n-1)+ f(n-2)+ f(n-3),我们可以使用矩阵幂在O(Log n)时间内求解。但是n * n *(n + 1)项使问题复杂化。

1 个答案:

答案 0 :(得分:4)

该矩阵方程仍然可以设置,但是n的某些幂也必须包含在其中:

|F(n-0)|   | a, b, c, 1, 1, 0, 0 |   |F(n-1)|
|F(n-1)|   | 1, 0, 0, 0, 0, 0, 0 |   |F(n-2)|
|F(n-2)|   | 0, 1, 0, 0, 0, 0, 0 |   |F(n-3)|
|(n+1)³| = | 0, 0, 0, 1, 3, 3, 1 | * | n³   |
|(n+1)²|   | 0, 0, 0, 0, 1, 2, 1 |   | n²   |
| n+1  |   | 0, 0, 0, 0, 0, 1, 1 |   | n    |
| 1    |   | 0, 0, 0, 0, 0, 0, 1 |   | 1    |

然后通过平方求幂,最后将所得矩阵乘以该向量:

[r, q, p, 27, 9, 3, 1].T

通常情况下,如果以模M来请求最终答案,则可以全部用模算术完成,否则可能会导致n的值太大而接近10 18