我最近学会了通过矩阵求幂找出第n个数的斐波那契数。 但我被困在两个关系中:
1) F(n) = F(n−1) + n
2) F(n) = F(n−1) + 1/n
有没有有效的方法来解决这些问题 O(LOGN) 像我们有矩阵博览会的时间。对于斐波那契系列?
答案 0 :(得分:3)
第一个显然等于:
F(n) = F(0) + n*(n+1)/2
并且可以在O(1)时间内计算。对于第二个,请查看here。
假设您想要使用矩阵求幂计算第一个,就像使用Fibonacci系列一样,这里是您应该使用的矩阵:
| 1 1 0 |
A = | 0 1 1 |
| 0 0 1 |
如果你想到以下等式,矩阵的选择是显而易见的:
| F(n+1) | | 1 1 0 | | F(n) |
| n+1 | = | 0 1 1 | * | n |
| 1 | | 0 0 1 | | 1 |
当然,起始向量必须是:(F(0), 0, 1)
。
对于第二个系列,这并不容易,因为您希望逐渐计算值1/n
,这不能以这种方式线性计算。我想这不可能,但我不会试图证明它。
答案 1 :(得分:0)
第一个可以在O(1)
中计算,因为这是一个算术级数,总和是n*(n-1)/2
。
第二个是harmonic series,无法有效计算,但您可以在O(1)
中使用以下内容进行近似计算:
其中第一个是0.57721566490153286060,第二个是大约1/(2k)