【问题标题】:What is the worst case complexity of the given program?给定程序的最坏情况复杂度是多少?
【发布时间】:2015-05-29 17:59:48
【问题描述】:

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

我的解决方案:

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

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

所以总成本将是:

n/2 * (n-1)

O(n^2)

我说的对吗?

【问题讨论】:

  • 也许最好在programmers.stackexchange.com 上回答? “如果您对……算法和数据结构概念有疑问”
  • 你认为答案是什么,你为什么这么认为?
  • @hexparrot - 以目前的形式,这个问题对程序员来说会很糟糕。
  • 如果删除 A-B-C-D 答案,他会不会突然变得更好,而是问“我如何确定最坏情况的时间复杂度?”
  • @JoranBeasley 我已经添加了我的解决方案

标签: time-complexity binary-search-tree complexity-theory


【解决方案1】:

我有不同的解决方案。在最坏的情况下,这棵树恰好是一棵完全正确的树,因此叶节点的数量为 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),在完整树中,可能会发生最后一层没有完全填充,但在渐近分析中,我们忽略了这些复杂的细节.

【讨论】:

  • 你的解决方案是 lucid sumeet...我知道我评论很晚,但你值得支持..谢谢
【解决方案2】:

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

时间复杂度的递归关系是

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

这给出了时间复杂度 O(n)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-11
    • 2015-01-20
    • 2021-07-28
    • 1970-01-01
    相关资源
    最近更新 更多