Data structures 堆数据结构的精确定义是什么?

Data structures 堆数据结构的精确定义是什么?,data-structures,heap,Data Structures,Heap,wikipedia()中给出的heap定义是 在计算机科学中,堆是一种专门的基于树的数据结构 它满足heap属性:如果A是B的父节点,那么 键(A)的顺序与键(B)的顺序相同 跨堆应用。父节点的键始终为 大于或等于子项的,最高键为 在根节点(这种堆称为max heap)或 父节点小于或等于子节点(最小值 堆) 定义没有说明树是完整的。例如,根据这个定义,二叉树5=>4=>3=>2=>1,其中根元素是5,所有子元素都是正确的子元素,也满足heap属性。我想知道堆数据结构的精确定义。正如其他人在评论

wikipedia()中给出的heap定义是

在计算机科学中,堆是一种专门的基于树的数据结构 它满足heap属性:如果A是B的父节点,那么 键(A)的顺序与键(B)的顺序相同 跨堆应用。父节点的键始终为 大于或等于子项的,最高键为 在根节点(这种堆称为max heap)或 父节点小于或等于子节点(最小值 堆)


定义没有说明树是完整的。例如,根据这个定义,二叉树5=>4=>3=>2=>1,其中根元素是5,所有子元素都是正确的子元素,也满足heap属性。我想知道堆数据结构的精确定义。

正如其他人在评论中所说:这是堆的定义,您的示例树是一个堆,尽管是退化/不平衡的。树是完整的,或者至少是合理平衡的,这对于树上更高效的操作是有用的。但是一个低效的堆仍然是一个堆,就像一个不平衡的二叉搜索树仍然是一个二叉搜索树一样

请注意,“heap”不是指数据结构,而是指满足heap属性或(取决于上下文)特定操作集的任何数据结构。在作为堆的数据结构中,最有效的结构显式或隐式地保证了树的完整性或某种程度的平衡性。例如,根据定义,二进制堆是一个完整的二叉树


无论如何,你为什么在乎?如果您关心特定操作的特定下限或上限,请说明它们,而不需要堆。如果您讨论特定的数据结构,即堆和完整树,请说明不要只谈论堆(当然,假设完整性很重要)。

我怀疑Wikipedia给出了精确的定义,您引用的示例是堆。平衡不良的二进制堆不会阻止它成为堆。谢谢。我只是想澄清堆实现是否必须完成。另外,我认为您将优先级队列称为ADT,而堆/二进制堆则是实现。@Stormshadow是的,有些人(有时包括我)将优先级队列(ADT)和堆(数据结构的类别,恰好与优先级队列一起工作)视为同一事物。