Data structures 堆的正确定义是什么

Data structures 堆的正确定义是什么,data-structures,heap,Data Structures,Heap,我在读Java编程中的堆。在我的教科书中,我发现了堆的这个定义:堆是一个完整的二叉树,具有以下属性:1)根中的值是树中最小的项; 2) 每个子树都是一堆 但当我观看有关堆的视频时,我发现了一个完全不同的堆定义,即:在堆中,父键比子键大 现在我感到困惑,因为这两个定义不一致。 哪个定义是正确的 谢谢 这两个定义都是正确的。 有两种类型的堆 Min Heap:其中父节点总是小于其子节点 Max Heap:其中,父节点总是比其子节点大 父对象的值小于/大于其子对象的值称为堆属性。树的每个节点都满足此堆

我在读Java编程中的堆。在我的教科书中,我发现了堆的这个定义:堆是一个完整的二叉树,具有以下属性:1)根中的值是树中最小的项; 2) 每个子树都是一堆

但当我观看有关堆的视频时,我发现了一个完全不同的堆定义,即:在堆中,父键比子键大

现在我感到困惑,因为这两个定义不一致。 哪个定义是正确的


谢谢

这两个定义都是正确的。

有两种类型的

Min Heap:其中父节点总是小于其子节点

Max Heap:其中,父节点总是比其子节点大

父对象的
值小于/大于其子对象的
值称为堆属性。树的每个节点都满足此
堆属性

从给定数组构造堆的复杂性是
O(n)
。此操作称为Heapify

给定堆,从堆中添加/删除节点/元素。操作的复杂性是
O(log(n))

使用堆数据结构(堆排序)对任何数组进行排序的复杂性为
O(n.log(n))
。基本上,您可以从
Min堆中提取顶部(根)元素。此操作重复了
n次
,因此复杂性为
O(n.log(n))

在计算机科学中,堆是一种专门的基于树的数据结构 它满足heap属性:如果A是B的父节点,那么 节点A的密钥相对于节点B的密钥按 在堆中应用相同的顺序。堆可以分类 进一步称为“最大堆”或“最小堆”。在max堆中 父节点的键始终大于或等于 子节点和最高键位于根节点中。在min堆中 父节点的键小于或等于子节点的键 最低的键在根节点中。堆在几个方面至关重要 高效的图形算法,如Dijkstra算法,以及 排序算法heapsort。堆的一个常见实现是 二进制堆,其中的树是一个完整的二叉树(见图)

有两种类型的堆:

Min Heap:父节点始终小于子节点


Max Heap:父节点总是比子节点大。

Wiki对此说得很清楚:堆可以进一步分类为“Max Heap”或“min Heap”。在最大堆中,父节点的键始终大于或等于子节点的键,最高键位于根节点中。在最小堆中,父节点的密钥小于或等于子节点的密钥,最低的密钥在根节点中。谢谢。。我还有一个问题:堆的时间复杂度O(nlog(n))是否也像O(log(n))那样写@Allals:在heap上,你说的是哪个操作的复杂性?谢谢。。我还有一个问题:堆的时间复杂度O(nlog(n))是否也像O(log(n))那样写@所有的
O(log(n))[Heapify操作]
O(nlog(n))[Heap排序算法]
是两件完全不同的事情。如果你看下面链接中的问题,你会在第一个答案中发现程序员对提问者说堆的时间复杂度写得像O(log(n))。。。请看问题和答案。。谢谢他说的是Heapify手术。将元素移除/添加到堆中。其复杂性是
O(log(n))
。但是如果使用堆对元素进行排序,那么复杂性是
O(n log(n))
。因此,这两种复杂的操作都是针对两种不同的操作的。上帝保佑你,兄弟:)