STL学习之heap & priority queue

来源:互联网 发布:嫁给不喜欢的人 知乎 编辑:程序博客网 时间:2024/05/21 10:38
heap,又称堆,在数据结构中,我们接触过最大堆max-heap,最小堆min-heap,这也都是heap,优先队列(priority queue)实际上也是heap来实现的。

Binary Heap是一种complete binary tree(完全二叉树),除了最底层叶子节点外,其他点都是满的,最底层叶子节点之间也不能有间隙,如下图就是一棵完全二叉树


将一棵完全二叉树映射成一个数组:
1.数组元素0作为一个标记位,不存实际的任何元素
2.对于处于数组下标 i 的元素,其左孩子(如果有的话),下标为2i;右孩子下标为2i + 1,父节点下标 [i/2]

所以用array就可以映射一个heap,因vector可动态扩展,所以用vector做底层存储会更合适一些。max-heap的最大值重总是在根基点,array的首元素;min-heap也类似。每次对heap的插入或pop都要调用一些算法(详见数据结构),保证操作之后,heap依然保持其特性。heap没有遍历功能,也不支持迭代器。

优先队列(priority queue)拥有权值的概念,它首先是一个queue,就需要满足底端入,顶端出的特性,但允许特定优先权的元素先出队列。

多数情况下优先队列是max-heap实现的,priority queue可以归为container adaptor。


0 0