【问题标题】:Asymptotic time complexity, Big oh and Theta analysis. Is this a trick question though渐近时间复杂度、Big oh 和 Theta 分析。这是一个技巧问题吗
【发布时间】:2019-03-06 00:25:35
【问题描述】:

问题来了:

考虑如下排序算法: I. 将给定的输入 A[1], A[2], ..., A[n] 以给定的顺序插入到二叉搜索树 T 中,从一棵空树开始;二、对 T 进行中序遍历,以非降序输出元素。 (a) 算法的最坏情况时间是多少? (b) 算法的最佳案例时间是多少?

我的回答:

我在t(n) = 2(n/2) + n 中创建了一个 BST,因为我们必须遍历每个单独的元素,然后我还在 t(n) = 2(n/2) + n 中打印出 BST 顺序,因为我们必须再次遍历每个元素。然后我将时间复杂度以t(n) = 4(n/2)+2n 结尾。

按照Master的方法,符合案例一,设为θ(n^2)。如果是θ(n^2),这将回答问题的 a 和 b。我不明白怎么会有更好的表现,或者在那种情况下表现更差。

这是一个棘手的问题吗?

【问题讨论】:

  • 不应该将一个元素插入平衡二叉树是log_2 n。并且不应该通过插入排序序列创建的二叉树导致看起来像链表的树(插入总是在末尾,因此单个项目的 O(n) )?

标签: recursion big-o binary-search-tree complexity-theory traversal


【解决方案1】:

简答

您添加了两个方程的 RHS,但没有添加 LHS - 它应该是 2T(n)

当然,T(n) 的口头描述是“时间复杂度函数”,但是 什么?在这种情况下,它应该是或者 BST创建按顺序遍历的时间复杂度,而不是两者一起。

所以最终结果是2T(n) = 4T(n/2) + 2n。取消2,得到O(n log n)


tl;博士回答

但是等等,为什么n log n 也用于遍历?只有n 元素,对吧?

通过将问题分成相等的两半T(n/2),您隐含地假设树在每次插入后都是平衡。对于简单的非自平衡 BST 树实现,情况并非总是如此。如果树向一侧“倾斜”,则插入可能与O(n) 一样多(即O(n^2) 构造)。

幸运的是,对于最常用的自平衡树类型,例如红黑和AVL,插入保证O(log n)或以下。因此,树构造的正确递归关系是T(n) = T(n - 1) + log n,结果是O(n log n)(斯特林方程)。

尽管如此,任何 BST 的遍历,无论是否平衡,都是O(n),因为只有n 元素。这意味着您的遍历递归关系是错误的 - 它应该是 T(n) = 2T(n/2) + 1,因为每个节点只完成了 O(1) 工作。

【讨论】:

  • 这很有意义。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多