【问题标题】:BST O(NLogN) build proofBST O(NLogN) 构建证明
【发布时间】:2018-05-26 20:19:15
【问题描述】:

我正在尝试学习测试,我知道单个插入是 O(logn),树的高度是 n,所以比较会使时间 Ω(n log n)。

我如何证明,给定一个包含 n 个元素的未排序数组 A,在最坏的情况下,构建 BST 所需的时间是 Ω(n log n)。

【问题讨论】:

  • 你无法证明它,因为它不是真的。
  • 在最坏的情况下,树会长成一个长字符串,看起来像一个链表,每个节点都添加到最后。构建它需要与 n^2 成比例的时间。说列表未排序并不足以避免这种情况。您可以证明平均而言构建一个简单的 BST 需要 O(n log n) 比较。你可以证明像 AVL 或红黑树这样的自平衡树可以通过 O(n log n) 比较来构建。但证明并不是很简单。
  • 你能告诉我,如果数组未排序,最坏的情况会怎样?
  • 不要互换使用 Omega 和 Big-O,它们是两个不同的东西。
  • @Gene 你为什么这么认为?从任何 BST 构建平衡的 BST 都可以在线性时间内完成,但这与问题无关。此外,如果您有一个排序数组,您可以轻松地从中构建一个 BST。

标签: algorithm performance time binary-tree binary-search-tree


【解决方案1】:

遍历一个 BST 可以在线性时间内完成,所以如果你可以从未排序的数组中构建一个 BST 比 O(n * log(n)) 更快,这意味着你可以比 O(n * log(n)) 并且我们知道this can't be done,除非您有关于正在排序的元素的其他信息。

另一方面,您可以在 Ω(n*log(n)) 中对数组进行排序,并且可以在线性时间内从排序后的数组构建 BST(例如构建“类似列表”的树)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-25
    • 1970-01-01
    • 1970-01-01
    • 2021-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多