目录
要理解优先级队列,需要有如下知识
STL容器之一的vector,小编写了写了五千字长文详解了vector容器,不过大家只需要知道vector是什么即可http://t.csdnimg.cn/tz9y6
堆算法,虽然小编在学C语言的时候写过一篇,但本篇内容会详细讲解堆算法
仿函数,仿函数属于STL六大组件之一,小编也会精讲
堆算法
概述
小编在学习C语言时写过一篇堆排序,详见http://t.csdnimg.cn/pT5Vw
堆在结构上是一颗二叉树,这颗二叉树只能是满二叉树或完全二叉树。这颗树上的所有数据存放在类似于数组的顺序表中,用顺序表来管理树的数据。(顺序表是一种数据结构,它的底层是线性的空间——存储数据的空间是连续的)
树上的数据是按层序的顺序存入顺序表。如下图
那么顺序表的下标就代表树的节点。父亲节点,左孩子节点,右孩子节点的下标关系如下
左孩子节点的下标等于父亲节点的下标乘2加1 |
右孩子节点的下标等于左孩子节点的下标加1 |
父亲节点的下标等于左孩子节点的下标减1除2 |
左孩子节点的下标等于右孩子节点的下标减1 |
到这里大家也看出来了,我们所谓的树结构只是想象的,实际是我们管理的只是类似于数组的顺序表,通过上述公式便可以达到顺序表是一颗树形结构的效果。
为什么非要搞一颗树形结构呢
实际上,只用用树形结构存储数据的话,和顺序表,链表比是没有任何优势的。如果存储数据时加上某些限制,便可以高效的对数据进行排序,查找等。
本来顺序表的排序效率是O(N^2),但如果顺序表管理的是一颗树形结构,那么它的排序效率会被降到O(N * lgN)。O(