jb.*_*jb. 9 heap data-structures
我正在做一些涉及堆的家庭作业,我理解它们的结构.堆必须让每个节点满足堆属性,
max-heap属性是除了根之外的每个节点,Heap [Parent(i)]> = Heap [i]
因此,在每个节点处,较高节点具有较高数量,较低节点具有较低数量.我理解这一点.但我看不到使用Heap,只是简单地获得列表中最高的n个数字.我没有看到一种简单的方法来搜索特定值并返回节点,或者搜索n个最小数字(在最大堆中).两者在二叉搜索树中相对容易.
你为什么不只使用一个简单的二叉搜索树?或者更好的是,平衡的二叉搜索树?
编辑:我应该注意,这不是寻找家庭作业问题的答案.实际的作业问题是为insert()和extractMax()函数编写parallel-p-heap的伪代码.我已经回答了他们.他们让我意识到我并不真正了解Heaps.
Ash*_*ish 13
堆数据结构有许多应用程序.
完全和几乎完整的二进制堆可以仅使用阵列以非常节省空间的方式表示.第一个(或最后一个)元素将包含根.数组的下两个元素包含其子元素.接下来的四个包含两个子节点的四个子节点等.因此,位置n处的节点的子节点将位于基于一个阵列的位置2n和2n + 1中,或者位于2n + 1和2n + 2中从零开始的数组.这允许通过简单的索引计算来向上或向下移动树.通过交换乱序的元素来完成堆的平衡.由于我们可以从数组构建堆而无需额外的内存(例如,对于节点),因此可以使用heapsort对数组进行就地排序.
在某些应用中,堆叠超过树的另一个优点是使用Tarjan算法可以在线性时间内完成堆的构建.
参考:http://en.wikipedia.org/wiki/Heap_%28data_structure%29