【问题标题】:Time complexity of a recursive function with two variables具有两个变量的递归函数的时间复杂度
【发布时间】:2020-10-05 07:33:48
【问题描述】:

我有一个递归函数,它接受两个变量,然后分成两个调用:

def f(n, m):
    if ((n == 0) or (m == 0)):
        return 1

    return f(n - 1, m) + f(n, m - 1)

前三个递归调用如下所示:

                    f(n-2, m)
                   /
          f(n-1, m)
         /         \
        /           f(n-1, m-1)
       /
f(n, m)
       \
        \           f(n-1, m-1)
         \         /
          f(n, m-1)
                   \
                    f(n, m-2)

我知道拆分为两个调用的函数将具有O(2^n) 的指数时间复杂度,但我怎样才能同时包含第二个参数及其条件?

【问题讨论】:

  • 传递给每个函数的内容不会改变时间复杂度。
  • 查看维基百科Master Theoremit.wikipedia.org/wiki/Teorema_principale
  • @RobertHarvey 这个函数有两个参数的时间复杂度是多少?
  • 你已经说过这个函数的时间复杂度是O(2^n),为什么。我说过参数的数量并不重要(当然,除非您添加更多的函数拆分)。
  • Big O 应该是最坏的情况,而不是最好的情况。或者至少是常见的情况。如果你将项目按字母顺序放入二叉树,它的性能将是 O(n),而不是 O(log2 n)。但是没有人说二叉树中的插入性能是 O(n),因为这不是常见的情况。

标签: algorithm recursion big-o complexity-theory


【解决方案1】:

传递给每个函数的内容不会改变时间复杂度。

Big O 应该是最坏的情况,而不是最好的情况。或者至少是常见的情况。如果你将项目按字母顺序放入二叉树中,它的性能将是 O(n),而不是 O(log2 n)。但是没有人说二叉树中的插入性能是 O(n),因为这不是常见的情况。

【讨论】:

  • 时间复杂度不应该至少是n和m吗?例如 O(2^Max(n,m)) 或 O(2^(n+m)?奇怪的是,该函数的时间复杂度仅以 n 为单位。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-19
  • 1970-01-01
  • 1970-01-01
  • 2018-05-29
  • 2018-08-18
相关资源
最近更新 更多