【问题标题】:Constructing a binary search tree from an unsorted array of size n of integers从大小为 n 的整数的未排序数组构造二叉搜索树
【发布时间】:2020-06-30 06:08:30
【问题描述】:

我对此的思考过程是这个算法是不正确的。要从大小为 n 的未排序整数数组创建二叉树,首先需要对数组进行排序。我们知道任何基于比较的排序算法都有一个 omega(nlog(n)) 的下限运行时间,因为我们没有比这更好的了。

数组排序后,我们需要一种方法来正确创建 BST。 (按顺序查看键/节点必须以递增/排序的方式)我们查看数组的中间元素并将其作为树的根。然后我们在数组的左半部分递归地执行此操作,构造左子树,并使其成为根的左子树。我们还在数组的右半部分递归地执行此操作,构造右子树,并使其成为根的右子树。由于递归关系,其运行时间为 O(n):T(n) = 2T(n/2) + c。这是在我们上面的排序之后发生的,所以总运行时间是 O(nlog(n) + n) 这只是 O(nlog(n))。这表明我们没有比这更好的方法了。

有什么我可以添加的吗?或者这是否足够?有人有其他建议/想法吗?谢谢。

【问题讨论】:

    标签: algorithm runtime binary-search-tree computer-science


    【解决方案1】:

    您假设要创建二叉树,您首先需要对整数进行排序作为第一步。由于这是一个不合理的假设,因此您的证明无效。

    要正确证明结果,您需要假设您可以在 nloglogn 比较中创建 BST,并由此证明矛盾。矛盾是立竿见影的,因为从 BST 你可以在线性时间(从树的中序遍历)得到一个排序的整数列表,所以你会有一个 nloglogn 比较排序。

    这个证明可能是提出问题的人的意图,但我认为问题的前提是错误的。正如您所介绍的那样,该问题并未指定对给定整数的唯一操作是比较,因此 X 教授的算法可能使二叉搜索树具有非比较操作。那么就不会有矛盾了,因为它可以用来对整数进行排序,但 不是 是比较排序。例如,融合树可用于在小于 O(n log n) 的算术运算中对 n 个整数进行排序(请参阅https://www.sciencedirect.com/science/article/pii/0022000093900404)。

    【讨论】:

    • 我明白你在说什么。谢谢!
    猜你喜欢
    • 2018-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 2017-12-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多