Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.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
Data structures 二进制树的顺序遍历排序复杂性_Data Structures_Binary Tree - Fatal编程技术网

Data structures 二进制树的顺序遍历排序复杂性

Data structures 二进制树的顺序遍历排序复杂性,data-structures,binary-tree,Data Structures,Binary Tree,我不明白为什么quicksort、shellsort、mergesort……所有被反复提到的流行排序算法都是O(nlog(n))算法,对binarysearch树的按序遍历不会给树排序带来O(n)复杂性吗?我遗漏了什么?否。构建树的复杂性为O(N logn)(即,在树中插入N个项目,每次插入都具有对数复杂性) 一旦构建了树,就可以以线性复杂度遍历它(特别是当它是一个线程树时),但这并不等同于排序——它相当于在排序后遍历数组 尽管它们具有相同的渐进复杂性,但构建树通常会慢很多,因为您必须为树分配节

我不明白为什么quicksort、shellsort、mergesort……所有被反复提到的流行排序算法都是O(nlog(n))算法,对binarysearch树的按序遍历不会给树排序带来O(n)复杂性吗?我遗漏了什么?

否。构建树的复杂性为O(N logn)(即,在树中插入N个项目,每次插入都具有对数复杂性)

一旦构建了树,就可以以线性复杂度遍历它(特别是当它是一个线程树时),但这并不等同于排序——它相当于在排序后遍历数组


尽管它们具有相同的渐进复杂性,但构建树通常会慢很多,因为您必须为树分配节点并遍历非连续分配的节点才能遍历树。

基本上有6种类型的复杂性。 O(1),O(logn),O(n),O(nlogn),O(n^2),O(n^3)

对于问题的第一部分,为什么流行的排序算法具有O(nlogn)复杂度,这仅仅是因为我们不能以O(n)复杂度对数组进行排序。 这是因为对于O(n)复杂度,您只希望在一个循环中对数组进行排序。 这是不可能的,因为我们不能在一个strech中对数组进行排序

所以下一个可能的复杂性是O(nlogn)。例如,在合并排序中就是分治方法 我们发现中间的元素递归地对它的每一边排序。对于递归,因为每次复杂性为o(logn)时,它都会将大小减少一半。对于排序部分,它将复杂性提高到O(nlogn)

对于问题的下一部分,请记住一个事实,即BST中的所有基本操作(如插入、删除)都具有O(logn)的复杂性,其中logn是树的高度

所以,如果你用o(n)复杂度对一棵树进行排序,那么它的总复杂度就是o(nlogn)


如果你不明白我的意思,请评论我。我认为这是回答这个问题的简单方法。

所以你说的是,需要O(nlogn)将所有节点插入到树中,然后按顺序遍历也需要O(n)才能得到排序数组。但是假设我们已经有了一个二叉树,排序将是o(n),对吗?@sam2015:假设我们已经有了一个(排序的)二叉树,那么排序将已经完成,但是我们可以将排序的数据从二叉树复制到o(n)中的排序数组。很抱歉,作为一个新手,二叉树是默认排序的?我认为你必须以任何方式进行遍历,inorder会对其进行排序,而Postorder则不会这样做?@sam2015:不是所有的二叉树都被排序,但支持按排序顺序遍历的树基本上都被排序了——是的,也可以按其他顺序遍历它们,但你基本上是在构建树时进行排序的。否。按序遍历为遍历树提供了O(n)复杂度。首先,是时候构建树了。关于O(n!)和O(2^n)等等,这些都是运行时的复杂性。还需要考虑空间的复杂性。你真的需要仔细阅读复杂性类。首先感谢你的关心。但我知道空间复杂性和O(n!)复杂性。我不知道排序算法有O(n!)复杂度,但你说有“6种复杂度”,没有包括它们或其他。你答案中的第一句话是错误的和误导性的。