使用主方法计算时间复杂度

时间:2016-10-24 03:07:28

标签: time-complexity

任何人都可以使用主方法解释下面的时间复杂度吗?

int sum(Node node) {
    if (node == null) {
        return 0;
    }
    return sum(node.left) + node.value + sum(node.right);
}

我知道一个人的价值是2,但我很难确定b和d。是b = 1而d = cO(n)?在这种情况下,任何人都可以解释如何识别b和d

2 个答案:

答案 0 :(得分:2)

好吧,为了使递归关系不那么复杂,我们可以假设一个具有2^i个节点的平衡二叉树,所以我们得到T(n) = 2T(n/2) + 1的重现(忽略基本情况)。

从上面,我们可以找到 a = 2, b = 2, c = 0,因为1是O(1) 。应用主方法,它通过案例1,我们可以得到我们的复杂性 T(n)=Θ(n log 2 2 )或O(n)

答案 1 :(得分:0)

这是一个用于汇总二叉树中所有节点的函数。首先从根向下离开然后向上(堆栈展开)。因此,时间复杂度为O(N),因为它需要至少访问每个节点一次。