【发布时间】:2013-09-06 17:35:38
【问题描述】:
我最近学会了通过矩阵求幂找出第 n 个斐波那契数列。 但我被困在两个关系上:
1) F(n) = F(n−1) + n
2) F(n) = F(n−1) + 1/n
有没有什么有效的方法来解决这些问题 O(登录) 时间就像我们有矩阵博览会。斐波那契数列?
【问题讨论】:
标签: algorithm recurrence
我最近学会了通过矩阵求幂找出第 n 个斐波那契数列。 但我被困在两个关系上:
1) F(n) = F(n−1) + n
2) F(n) = F(n−1) + 1/n
有没有什么有效的方法来解决这些问题 O(登录) 时间就像我们有矩阵博览会。斐波那契数列?
【问题讨论】:
标签: algorithm recurrence
第一个显然等于:
F(n) = F(0) + n*(n+1)/2
并且可以在 O(1) 时间内计算。第二个,看here。
假设您想使用矩阵求幂来计算第一个,就像使用斐波那契数列一样,这是您应该使用的矩阵:
| 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,而不能以这种方式线性计算。我想这是做不到的,但我不会试图证明这一点。
【讨论】:
F(0)+H_n的解,其中H_n是第n次谐波数。但这并没有太大帮助,因为第 n 次谐波数正是我们正在查看的总和。我认为没有有用的公式。
第一个可以用O(1)计算,因为这是一个算术级数,总和是n*(n-1)/2。
第二个是harmonic series,无法高效计算,但可以在O(1)中近似:
第一个是0.57721566490153286060,第二个大约是1/(2k)
【讨论】: