【问题标题】:Number of Arithmetic Operations Performed By a Fibonacci Function斐波那契函数执行的算术运算次数
【发布时间】:2014-11-25 23:07:11
【问题描述】:

对于这个问题,我们有一个函数 f,它以标准方式计算第 n 个斐波那契数:

f(n)
 {
  if(n == 0)
   return 0;
  if(n == 1)
   return 1;
  else return f(n-1) + f(n-2);
 }

然后我的任务是计算函数对输入 n 执行的算术运算次数。我知道对 f 的每次调用都会执行 3 次运算(2 次减法,1 次加法),然后我尝试通过扩展函数来尝试找到某种递归关系,然后计算出完成了多少算术运算。但后来我被卡住了,因为这不是正确的答案。

正确答案是 f 对输入 n 进行 3f(n+1)-3 次算术运算。请问有人可以向我解释一下吗?这很重要,因为我们后来被要求以此为起点找出时间复杂度。

非常感谢, 尼亚姆

【问题讨论】:

  • 您可能想查看this 的答案。它试图归纳计算计算斐波那契数列中第 n 个数的时间复杂度。

标签: time-complexity fibonacci


【解决方案1】:

算法的时间复杂度接近 2^(n) 。因此它是 O( 2^n ) 这是一个示例,说明如果 n = 6,您的算法将如何解决

您的算法执行 T(n) = T(n-1) + T(n-2) + O(1)

T(n-1) = T(n-2) + T(n-3) + O(1)

T(n-2) = T(n-3) + T(n-4) + O(1)

。 . .

T(2) = T(1) + T(0) + O(1)

看看Fibonacci time complexity

T(n) = T(n-1) + T(n-2) + O(1) 等于

T(n) = O(2^(n-1) ) + O(2^(n-2) )+ O(1) = O(2^n)

【讨论】:

    【解决方案2】:

    可能执行了 n/2 次附加操作;

    for(i=3;i<=n;i++)
    let n=4;
    variable a,b=0,c=1;
    [a=b+c;b=c;c=a;].........(1) //now a=1;b=1;c=1;
    [a=b+c,b=c,c=a)...............(2) //now a=2;b=1;c=2;
    

    输出:0112.
    注意:如果 n 为奇数,则加法运算执行 (n/2)+1 次;
    注意:如果 n 为 Even No 则加法运算执行 (n/2) 次;

    !如果我错了,请纠正我!

    【讨论】:

      猜你喜欢
      • 2013-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-18
      • 2013-03-31
      • 2016-08-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多