【问题标题】:Time Complexity of Fibonacci Series斐波那契数列的时间复杂度
【发布时间】:2015-03-08 14:58:43
【问题描述】:
long int F(int n){
 long int F[n];
 if (n<2) return n;
 else {
      F[0]=0; F[1]=1;
      for (int i=2; i<n+1; i++)
         F[i]=F[i-1]+F[i-2];
      return F[n]; }
 }

大家好,有人知道如何计算上述函数的时间复杂度吗?我正在学习 C++,我对随机算法的计算时间复杂度感到非​​常痛苦。请帮我!提前致谢。

【问题讨论】:

  • 这种行为是微不足道的。 Donald Knuth 的计算机编程艺术的第一卷对递归情况进行了深入分析。 IIRC。
  • 嗨,非常感谢您的评论 :)

标签: c++ time-complexity fibonacci


【解决方案1】:

显示的代码依赖于 g++ 语言扩展、可变长度数组。

即它不是标准的 C++。

代码还通过使用名称 F 来表示两种不同的东西,从而导致了一些误导。

请注意,代码通过索引超出数组末尾的数组来显示未定义行为

除此之外,这是微不足道的。

当代码被纠正,或被视为伪代码时,执行n-1 操作的复杂度为 O(n)。

【讨论】:

  • 嗨,你能告诉我一步一步如何计算复杂度吗?我在一些书上看到了使用 T(n) 的计算。但我不知道它是如何工作的。请帮帮我。
【解决方案2】:

对于这个程序,复杂度是 O(n)

【讨论】:

    【解决方案3】:

    由于算法使用memoization,时间和空间复杂度是线性的O(n)

    通常时间复杂度涉及对数据的会计比较操作,在这种情况下缺少这些操作(唯一真正的比较操作是边界检查),因此线性复杂度由F[i-1]+F[i-2] 操作给出。

    【讨论】:

    • 嗨,你能告诉我一步一步如何计算复杂度吗?我在一些书上看到了使用 T(n) 的计算。但我不知道它是如何工作的。请帮帮我。
    • @LucasVinhTran:在一般情况下,循环迭代 N-1 次。每次执行固定数量的操作,每个固定复杂度的操作,例如加法和索引,都会被执行。 IE。循环体具有恒定的复杂性。由于它执行 N 次,因此复杂度为 O(N)。这并没有涉及符号的更精细点,在线论坛中的实践(通过键盘输入的文本)与数学弯曲的计算机科学家选择的符号(用铅笔或粉笔书写的文本)有些不一致。您可以找到更多信息,例如在维基百科中。
    • @Jack:这个函数没有使用记忆。每次调用都会计算一个结果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-25
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    相关资源
    最近更新 更多