解决斐波那契数列中的递归问题

发布于 2024-08-23 19:56:10 字数 415 浏览 9 评论 0原文

我不知道这个算法中的数学原理,需要一些帮助。

算法:

if n<2 then

  return n

else return fibonacci(n-1) + fibonacci(n-2)

语句

n < 2 是 O(1)
时间 n >=2 的时间复杂度为 O(1)
返回 n 为 O(1) 时间n>=2是- 返回 fib(n-1) + fib(n-2) 为 -

且时间 n>=2 为 T(n-1) + T(n-2) +O(1)

总计:O(1) T(n -1) + T(n-2) + O(1)
T(n) = O(1) 如果 n < 2
T(n) = T(n-1) + T(n-2) + O(1) 如果 n>=2

I'm unaware of the mathematics in this algorithm and could use some help.

Algorithm:

if n<2 then

  return n

else return fibonacci(n-1) + fibonacci(n-2)

Statement

n < 2 is O(1)
Time n >=2 is O(1)
Return n is O(1)
Time n>=2 is -
Return fib(n-1) + fib(n-2) is -

and time n>=2 is T(n-1) + T(n-2) +O(1)

Total: O(1) T(n-1) + T(n-2) + O(1)
T(n) = O(1) if n < 2
T(n) = T(n-1) + T(n-2) + O(1) if n>=2

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

左秋 2024-08-30 19:56:10

我想您应该注意到这个函数的递归关系非常熟悉。通过按名称查找,您可以准确了解这种非常熟悉的复发速度。

但是,如果您未能实现直观的飞跃,您可以尝试使用简化的问题来限制运行时。本质上,您可以以保证增加运行时间同时使其更简单的方式修改算法。然后你算出新算法的运行时间,这给你一个上限。

例如,这个算法需要更长的时间并且更容易分析:

F(n): if n<2 then return n else return F(n-1) + F(n-1)

I think you're supposed to notice that the recurrence relation for this function is awfully familiar. You can learn exactly how fast this awfully familiar recurrence grows by looking it up by name.

However, if you fail to make the intuitive leap, you can try to bound the runtime using a simplified problem. Essentially, you modify the algorithm in ways guaranteed to increase the runtime while making it simpler. Then you figure out the runtime of the new algorithm, which gives you an upper bound.

For example, this algorithm must take longer and is simpler to analyze:

F(n): if n<2 then return n else return F(n-1) + F(n-1)
巷雨优美回忆 2024-08-30 19:56:10

通过归纳:如果对于所有 k fib(k) 的计算花费小于 C*2^k n,对于 fib(n) 的计算,我们有

T(n) = T(n-1) + T(n-2) + K < C*2^(n-1) + С*2^(n-2) + K
     = 0.75*C*2^n + K < C*2^n

足够大的 C(对于 C > K/0.25代码>,如<代码>2^n > 1)。这证明了 T(n) T(n) T(n) C*2^n,即T(n) = O(2^n)

(这里T(n)是计算fib(n)的时间,K是计算fib所需的常数时间(n)fib(n-1)fib(b-1) 都[已经]计算出来时。)

By induction: if calculation of fib(k) takes less than C*2^k for all k < n, for the calculation tome of fib(n) we've got

T(n) = T(n-1) + T(n-2) + K < C*2^(n-1) + С*2^(n-2) + K
     = 0.75*C*2^n + K < C*2^n

for sufficiently big C (for C > K/0.25, as 2^n > 1). This proves that T(n) < C*2^n, i.e. T(n) = O(2^n).

(Here T(n) is the time for calculation of fib(n), K is the constant time needed for calculating fib(n) when both fib(n-1) and fib(b-1) are [already] calculated.)

北城半夏 2024-08-30 19:56:10

您需要求解递推方程:

T(0) = 1
T(1) = 1
T(n) = T(n-1) + T(n-2), for all n > 1

You need to solve the recurrence equation:

T(0) = 1
T(1) = 1
T(n) = T(n-1) + T(n-2), for all n > 1
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文