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
Performance 自下而上堆头与自上而下堆头(性能方面)_Performance_Sorting_Heapsort - Fatal编程技术网

Performance 自下而上堆头与自上而下堆头(性能方面)

Performance 自下而上堆头与自上而下堆头(性能方面),performance,sorting,heapsort,Performance,Sorting,Heapsort,自下而上堆头和自上而下堆头之间的性能差异是什么 堆是一个二叉树;因此,我们知道它有logn深度,每个级别有2^i个节点。级别0(根)有1个节点,级别1有2个节点,级别2有4个节点,以此类推 现在想想你提到的两种方法: 对于自底向上,我们在底部插入节点,并让它们每次“冒泡”堆。相反,对于自顶向下,我们让节点“坠落”到其正确的位置。哪一个更有效 让我们想想最坏的情况: 自下而上,每个节点都可以上升到最高层。在级别1,这需要一次交换(在两个节点上);在级别2,这需要两个(在四个节点上)。。。一旦我们到

自下而上堆头和自上而下堆头之间的性能差异是什么

堆是一个二叉树;因此,我们知道它有logn深度,每个级别有2^i个节点。级别0(根)有1个节点,级别1有2个节点,级别2有4个节点,以此类推

现在想想你提到的两种方法:

对于自底向上,我们在底部插入节点,并让它们每次“冒泡”堆。相反,对于自顶向下,我们让节点“坠落”到其正确的位置。哪一个更有效

让我们想想最坏的情况:

自下而上,每个节点都可以上升到最高层。在级别1,这需要一次交换(在两个节点上);在级别2,这需要两个(在四个节点上)。。。一旦我们到达最后一级,我们必须进行logn交换(在相当大的n/2节点上)!这给了我们O(n logn)效率


自上而下:在每个级别上,任何节点都可以落到树的底部(logn交换)。它与自下而上的区别在于,随着最大下落距离的增加,受其影响的潜在节点数量减少。级别0是唯一可以落在日志n中的节点,它只是一个节点(而不是自底向上的n/2)。因此,所有“下降”的总和为O(n),这是更有效的算法。

欢迎使用堆栈溢出。这不是家庭作业完成服务。你的导师给了你作业,而不是我们,你需要做你自己的工作。如果我们为你做,你什么也学不到。如果你不能开始,向你的老师寻求帮助;他们被雇来教你。祝你好运,说真的?我只是问哪一个性能更好。你有吗?看看。