【问题标题】:Complexity .. Big O复杂性..大O
【发布时间】:2014-03-29 21:34:42
【问题描述】:

我必须确定以下函数的时间复杂度(大 O):

void BET::makeEmpty(BinaryNode* &n)
{
    if(n != NULL)
    {
        makeEmpty(n->left);
        makeEmpty(n->right);
        delete n;
    }
    n = NULL;
}

我熟悉简单函数(for 循环、嵌套循环等)的时间复杂度,但我不确定如何确定递归函数的大 O。

谢谢!

【问题讨论】:

  • 我认为您的问题格式更适合stackexchange网络的编程部门。 programmers.stackexchange.com,是关于递归函数复杂性的一般问题。如果您概述了在这种情况下确定复杂性背后的业务目的,那听起来会更具体。没有任何实际用途的理论是没有任何意义的。说了这么多,看看这个:cs.duke.edu/~ola/ap/recurrence.html

标签: c++ big-o complexity-theory


【解决方案1】:

嗯,这比您想象的要容易:makeEmpty 执行恒定 (O(1)) 的工作量(当然不包括递归调用)。它将在树中的每个节点上运行一次。所以它的时间复杂度是O(n),其中n是树中的节点数。

【讨论】:

  • 所以只有 O(n) 将是答案?
  • @user2267975: 是的,操作将在每个节点执行一次,给定 n 个节点,您将执行 n 次操作,所以它是 O(n)
  • 其实也是omega(n)。 O(n) 和 Omega(n) => Theta(n)
【解决方案2】:

我认为您的算法的递归关系应该如下所示:

你能解决吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-17
    • 2021-05-13
    • 1970-01-01
    • 1970-01-01
    • 2017-09-28
    • 2014-03-07
    • 2011-09-05
    • 1970-01-01
    相关资源
    最近更新 更多