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