Algorithm 为什么堆排序在最坏的情况下是底层半满,而不是完全满?

Algorithm 为什么堆排序在最坏的情况下是底层半满,而不是完全满?,algorithm,data-structures,heapsort,Algorithm,Data Structures,Heapsort,我知道在这个话题上有很多问题可以回答。但我不明白他们在说什么 具体地说,我的问题是,为什么最坏的情况发生在底层正好是半满的时候,为什么不在满的时候 我浏览了以下问题: 但我的问题是,当树中的节点处于最大值时,我们会遇到最坏的情况,为什么要使用术语“半满” 为了支持我的观点,我附上了一张图片。现在A的高度是3,B的高度也是3。但是我们调用heapify的次数将增加,因为现在A将为n/2调用heapify,即11/2~5,在B中,我们在主循环内为15/2~7调用heapify。这是最坏的情况

我知道在这个话题上有很多问题可以回答。但我不明白他们在说什么
具体地说,我的问题是,为什么最坏的情况发生在底层正好是半满的时候,为什么不在
满的时候

我浏览了以下问题:



但我的问题是,当树中的节点处于最大值时,我们会遇到最坏的情况,为什么要使用术语“半满” 为了支持我的观点,我附上了一张图片。现在
A
的高度是3,
B
的高度也是3。但是我们调用heapify的次数将增加,因为现在
A
将为
n/2
调用heapify,即
11/2~5
,在B中,我们在主循环内为
15/2~7
调用heapify。这是最坏的情况吗?
我确信我的直觉是错的,但不知道在哪里。

这里的“最坏情况”是指较大的子树相对于n最大的情况

在图(A)中,树有11个节点(n=11),其中7个属于较大的子树,因此较大的子树有7n/11≈0.636n个节点

在图(B)中,树有15个节点(n=11),其中7个属于每个子树,因此每个子树有7n/15≈0.467n个节点

因此,尽管图(A)和图(B)中较大的子树具有相同的节点绝对数量(即7个),但前者相对于n比后者大,因为后者具有较大的n.

这里的“最坏情况”是指较大的子树相对于n最大的情况

在图(A)中,树有11个节点(n=11),其中7个属于较大的子树,因此较大的子树有7n/11≈0.636n个节点

在图(B)中,树有15个节点(n=11),其中7个属于每个子树,因此每个子树有7n/15≈0.467n个节点


因此,尽管图(A)和图(B)中较大的子树具有相同的节点绝对数(即7个),但前者相对于n比后者大,因为后者的n更大。

相对于n
最大的信息给了我们什么?可以肯定地说,由于元素在树中的位置受到严格的控制,因此没有特别的最坏情况,因为元素在树中的位置应尽可能完整?时间受
n
数量的影响,而不是受
n
排列的影响?@YashPatel:在分析算法或数据结构时,我们分析其最坏情况,因为这为我们提供了一个保证:没有其他情况更糟。在这个堆结构的情况下,这个“最坏情况”分析告诉我们,子树的大小最多是树的总大小的三分之二。好的,让我们假设左边的树有整个树的三分之二大小。所以这是最坏的情况。现在,如果我们在根节点上调用heapify,并且节点似乎通过右子树,那么它将执行比左子树少的一个递归步骤。但当节点通过左子树时,我们可以得到更好的最坏情况。一般来说,我们对输入做出最坏的判断,比如它的排列、分布等,而不是n的值。但在这篇文章中,我们通过使最后一级半满来关注n。为什么?@YashPatel:heap是一种具有API“插入元素”、“检查是否为空”、“检索最大元素”和“删除最大元素”的数据结构。该数据结构(节点、数组等)的实现不在这些API定义中。有许多不同类型的数据结构可以以不同的方式支持这些API,并具有不同的性能特征。因此,在任何给定时间数据结构中的元素数量是用例的基本特征,也是我们比较不同数据结构的唯一方法[续][续]提供这些API的目的是量化给定数量的元素在最坏情况下的性能?可以肯定地说,由于元素在树中的位置受到严格的控制,因此没有特别的最坏情况,因为元素在树中的位置应尽可能完整?时间受
n
数量的影响,而不是受
n
排列的影响?@YashPatel:在分析算法或数据结构时,我们分析其最坏情况,因为这为我们提供了一个保证:没有其他情况更糟。在这个堆结构的情况下,这个“最坏情况”分析告诉我们,子树的大小最多是树的总大小的三分之二。好的,让我们假设左边的树有整个树的三分之二大小。所以这是最坏的情况。现在,如果我们在根节点上调用heapify,并且节点似乎通过右子树,那么它将执行比左子树少的一个递归步骤。但当节点通过左子树时,我们可以得到更好的最坏情况。一般来说,我们对输入做出最坏的判断,比如它的排列、分布等,而不是n的值。但在这篇文章中,我们通过使最后一级半满来关注n。为什么?@YashPatel:heap是一种具有API“插入元素”、“检查是否为空”、“检索最大元素”和“删除最大元素”的数据结构。该数据结构(节点、数组等)的实现不在这些API定义中。有许多不同类型的数据结构可以以不同的方式支持这些API,并具有不同的性能特征。因此,在任何给定的时间,数据结构中元素的数量是用例的基本特征,我们可以比较提供这些API的不同数据结构[续][续]的唯一方法是量化给定数量元素的最坏情况性能。