Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/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
Algorithm 堆排序的时间复杂性_Algorithm_Sorting_Time Complexity_Heap_Heapsort - Fatal编程技术网

Algorithm 堆排序的时间复杂性

Algorithm 堆排序的时间复杂性,algorithm,sorting,time-complexity,heap,heapsort,Algorithm,Sorting,Time Complexity,Heap,Heapsort,我到处都读到heapsort的时间复杂性只是在最坏的情况下。但我们也到处看到,在Onlogn中构建堆是一种常见的误解。相反,您可以在上创建一个堆。因此,考虑到堆可以在On中生成,请查看下面的排序算法,并告诉我在分析其时间复杂性时的错误之处 将n个元素放入堆时间:On 直到堆为空,弹出每个元素并将其复制到数组中。时间:开。为什么?因为以相同的方式,所有元素都可以放在On中的堆中,所以所有元素也可以在On中提取。正当 总之,复杂性是开着的。但在这里,我们还需要一个额外的On内存 我知道传统的heap

我到处都读到heapsort的时间复杂性只是在最坏的情况下。但我们也到处看到,在Onlogn中构建堆是一种常见的误解。相反,您可以在上创建一个堆。因此,考虑到堆可以在On中生成,请查看下面的排序算法,并告诉我在分析其时间复杂性时的错误之处

将n个元素放入堆时间:On 直到堆为空,弹出每个元素并将其复制到数组中。时间:开。为什么?因为以相同的方式,所有元素都可以放在On中的堆中,所以所有元素也可以在On中提取。正当 总之,复杂性是开着的。但在这里,我们还需要一个额外的On内存


我知道传统的heapsort的时间复杂度为Onlogn,内存复杂度为O1。但是这个堆堆不是也一样吗?与传统的heapsort算法不同,它甚至在最坏的情况下也会提供On。

请注意,如果没有关于数据的任何附加信息,则无法按On对数组进行排序。实际上,在使用基于comaprison的算法时,我们可以证明Onlogn对数组排序的下界!出于同样的原因,我们可以证明Heaport的下界

这意味着,你永远不能对任何数据结构进行排序!任何线性排序算法都必须假定对数据有一些先验知识。
有关如何证明决策树Onlogn搜索下限的详细信息,请参见弹出的最前面的元素是O1,但您还需要重新排列堆,这需要花费logn时间来维护heap属性。不,它具有logn复杂性。但堆的大小也在缩小。它不是稍后弹出的元素的logn。类似地,当您创建堆时,大多数元素都不需要插入logn。@ChiragArora在我建议的dupe中看到了非常详细的讨论。最重要的一点是,尽管树正在收缩,但它收缩的速度还不够快。@molbdnilo但我们也给出了一个类似的解释,解释了为什么在上生成堆。尽管插入是一个logn过程,但并不是每个元素都需要logn时间才能随着堆的增长而插入。此外,堆的插入和删除过程非常相似。它们只有具有相同的时间复杂度才有意义。插入堆的平均时间是O1,最坏的情况是Olog n。这方面似乎有很多研究。看见