Time complexity 给定程序的最坏情况复杂性是什么?

Time complexity 给定程序的最坏情况复杂性是什么?,time-complexity,binary-search-tree,complexity-theory,Time Complexity,Binary Search Tree,Complexity Theory,该程序将一个具有n个叶节点的平衡二叉搜索树作为输入,并为每个节点x计算函数g(x)的值。如果计算g(x)的代价是{x的左子树中的叶节点数,x的右子树中的叶节点数},则程序的最坏情况时间复杂度为 我的解决方案: 对于每个内部节点,最大成本为n/2。对于每个叶节点,成本为零 平衡二叉树的内部节点数为:叶节点-1 因此,总成本为: n/2*(n-1) O(n^2) 我说得对吗 我有一个不同的解决方案。在最坏的情况下,这棵树恰好是一棵完整的树,并且你得到了正确的结果,因此叶节点的数量将是n/2 但根节点

该程序将一个具有n个叶节点的平衡二叉搜索树作为输入,并为每个节点x计算函数g(x)的值。如果计算g(x)的代价是{x的左子树中的叶节点数,x的右子树中的叶节点数},则程序的最坏情况时间复杂度为

我的解决方案:

对于每个内部节点,最大成本为n/2。对于每个叶节点,成本为零

平衡二叉树的内部节点数为:叶节点-1

因此,总成本为:

n/2*(n-1)

O(n^2)


我说得对吗

我有一个不同的解决方案。在最坏的情况下,这棵树恰好是一棵完整的树,并且你得到了正确的结果,因此叶节点的数量将是n/2

但根节点的情况就是如此

对于级别1的节点:总成本为2*n/4=n/2

对于级别2的节点:总成本为4*n/8=n/2

以此类推,直到最后一级,即log(n),成本再次为=n/2

因此,在最坏的情况下,总成本为=n/2*log(n)=O(n*logn),在完整树中,最后一级可能没有完全填充,但在渐近分析中,我们忽略了这些复杂的细节。

您可以使用分治技术计算每个节点的g(x)。递归求解左、右子树。组合结果以获得您的解决方案

时间复杂度的递推关系为

T(n)=2*T(n/2)+O(1)


哪一个给出了时间复杂度O(n)

也许是最好的答案?“如果你有一个关于……算法和数据结构概念的问题”你认为答案是什么?你为什么这么认为?@hexparrot-以目前的形式,这个问题对程序员来说会很糟糕。如果去掉a-B-C-D答案,他会问这个问题吗“我如何确定最坏情况下的时间复杂度?”@JoranBeasley我已经添加了我的解决方案您的解决方案是lucid sumeet…我知道我评论得很晚,但您值得投票…谢谢