Heap数据结构的精确定义是什么?

时间:2012-10-16 19:52:34

标签: data-structures heap

维基百科(http://en.wikipedia.org/wiki/Heap_(data_structure))中给出的堆的定义是

  

在计算机科学中,堆是一种专门的基于树的数据结构   满足堆属性:如果A是B的父节点,那么   密钥(A)按密钥(B)排序,顺序相同   在整个堆中应用。父节点的键始终是   大于或等于孩子的那些,最高的关键是   在根节点(这种堆称为最大堆)或密钥   父节点小于或等于子节点(min   堆)

该定义没有说明树是完整的。例如,根据该定义,二叉树5 => 4 => 3 => 2 => 1根元素为5且所有后代都是右子元素也满足堆属性。我想知道堆数据结构的精确定义。

1 个答案:

答案 0 :(得分:2)

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

请注意,“heap”不是指数据结构,它指的是满足堆属性的任何数据结构或(取决于上下文)一组操作。在作为堆的数据结构中,最有效的数据结构明确地或隐含地保证树完整或稍微平衡。例如,二进制堆根据定义是一个完整的二叉树。

无论如何,你为什么关心?如果您关心特定操作的特定下限或上限,请说明那些而不是需要堆。如果你讨论堆积和完成树的特定数据结构,请说明那个而不是仅仅谈论堆(当然,假设完整性很重要)。