Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 从大小为n的整数未排序数组构造二叉搜索树_Algorithm_Runtime_Binary Search Tree_Computer Science - Fatal编程技术网

Algorithm 从大小为n的整数未排序数组构造二叉搜索树

Algorithm 从大小为n的整数未排序数组构造二叉搜索树,algorithm,runtime,binary-search-tree,computer-science,Algorithm,Runtime,Binary Search Tree,Computer Science,我的思考过程是,这个算法是不正确的。要从大小为n个整数的未排序数组创建二叉树,首先需要对数组进行排序。我们知道,任何基于比较的排序算法都有一个下限运行时间ω(nlog(n)),因为在中,我们无法得到比这更好的结果 数组排序后,我们需要一种方法来正确创建BST。(按顺序查看键/节点必须以递增/排序的方式)我们查看数组的中间元素,并将其作为树的根。然后,我们在数组的左半部分递归地执行此操作,构造左子树,并使其成为根的左子树。我们还递归地在数组的右半部分执行此操作,构造正确的子树,并使其成为根的正确子

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

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


有什么我可以补充的吗?或者这足够了吗?有人有其他建议/想法吗?谢谢。

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

为了正确地证明结果,您需要假设您可以在nloglogn比较中创建BST,并由此证明一个矛盾。矛盾是直接存在的,因为从BST可以得到线性时间内的整数排序列表(从树的顺序遍历),因此需要进行nloglogn比较排序


这个证明可能是提出问题的人的意图,但我认为这个问题的前提是错误的。正如您所介绍的,问题并没有指定对给定整数的唯一操作是比较,因此X教授的算法可能会使用非比较的操作生成二叉搜索树。这样就不会有矛盾,因为它可以用来对整数排序,但不是比较排序。例如,可以使用融合树在小于O(n logn)的算术运算中对n个整数进行排序(请参见)。

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

为了正确地证明结果,您需要假设您可以在nloglogn比较中创建BST,并由此证明一个矛盾。矛盾是直接存在的,因为从BST可以得到线性时间内的整数排序列表(从树的顺序遍历),因此需要进行nloglogn比较排序


这个证明可能是提出问题的人的意图,但我认为这个问题的前提是错误的。正如您所介绍的,问题并没有指定对给定整数的唯一操作是比较,因此X教授的算法可能会使用非比较的操作生成二叉搜索树。这样就不会有矛盾,因为它可以用来对整数排序,但不是比较排序。例如,融合树可以用于在小于O(n logn)的算术运算中对n个整数进行排序(请参见)。

我理解你的意思。非常感谢。我明白你的意思。非常感谢。