【问题标题】:Time complexity of a recursive function with three recursive calls具有三个递归调用的递归函数的时间复杂度
【发布时间】:2019-02-19 04:53:31
【问题描述】:

具有以下递归关系的递归函数的时间复杂度是多少:

T(n) = T(n-1) + T(n-2) + T(n-3), T(0) = T(1) = 1 and T(2) = 2

我知道有两个递归调用的函数会给我们O(2^n)的指数时间复杂度,这是否意味着具有上述递归关系的函数将具有时间复杂度O(3^n)

感谢您的帮助。

【问题讨论】:

  • 每个递归调用都必须有一个基本条件,你能分享一下吗?
  • 恕我直言,如果您不使用动态编程并再次进行所有计算,则复杂度为 O(3^n),因为对于 n>3,对于每个 n,您正在计算/做工作 3 次上一步的。
  • 添加了基本情况:T(0) = T(1) = 1 和 T(2) = 2
  • 例如T(6) = T(5) + T(4) + T(3), T(5) , T(4), T(3)--> 每个递归 3 次,所以 T(6) 有 3^3 次计算。
  • 是的,复杂性限制在O(N^3)以下,尽管您总是可以解决递归关系以获得更丑陋的精确版本...wolframalpha.com/input/…

标签: algorithm recursion big-o complexity-theory


【解决方案1】:

更具体地说,假设您有这样的功能:

T(n) = T(n-1) + T(n-1) + T(n-1), T(0) = 1

这个写法时间复杂度正好是O(3^n)。

你的函数比这个函数好一点,但时间复杂度还是一样O(3^n)

现在,如果我们重写我提议的代码:

T(n) = 3 * T(n-1), T(0) = 1

复杂度只有 O(n)!因为之前调用的结果会被重复使用而不被再次调用。

所以在你的实现中,如果你可以有缓冲区不调用而只使用以前调用的值(某些语言实际上可以支持这一点),那么复杂性将降低到 O(n)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-19
    • 2018-05-29
    • 2018-08-18
    相关资源
    最近更新 更多