• 忘掉天地
  • 仿佛也想不起自己
bingliaolongBingliaolong  2020-06-15 14:35 Aet 隐藏边栏 |   抢沙发  4 
文章评分 2 次,平均分 5.0

简述

heap并不属于STL容器组件,它是priority queue的助手。
priority queue允许用户以任何次序将任何元素推入容器中,但取出时一定是从优先权最高的元素开始取。

binary heap是一种完全二叉树,即,整颗二叉树,除了最底层的叶子节点之外,是填满的,而最底层的叶子节点从左至右又不得有空隙。

完全的二叉树没有任何节点漏洞,这样就有个好处:可以利用array来储存所有节点,假设让array#0元素保存无限大值或无限小值。那么,当完全二叉树的某个节点位于arrayi处时,其左子节点必位于array2i处,其右子节点比位于array2i+1处,其父节点必位于i/2处。

通过这个规则,array可以轻易实现完全二叉树。

根据元素排列方式,heap可分为max-heapmin-heap两种,前者的每个节点的键值都大于等于其子节点值,后者的每个节点的键值都小于等于其子节点的键值。因此,max-heap的最大值在根节点,并总是位于底层的arrayvector的起头处;min-heap的最小值在根节点,同样总是位于arrayvector的起头处。

heap的所有元素都必须遵循特别的二叉树排列规则,所以heap不提供遍历功能,也不提供迭代器。

heap算法

push_heap

pop_heap

sort_heap

make_heap

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

bingliaolong
Bingliaolong 关注:0    粉丝:0 最后编辑于:2021-11-27
Everything will be better.

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享