- 3
- 0
- 约2.14万字
- 约 91页
- 2018-10-04 发布于浙江
- 举报
* * 5.6 堆(Heap) 一、堆的定义 1、什么是堆? ◆若有n个关键字的集合K={k0,k1,k2, …,kn-1}将其所有元素按完全二叉树的顺序存贮方式存于一个一维数组中,并且满足以下条件,则该集合称为最小堆(或最大堆)。 ki≤k2i+1和ki≤k2i+2 或 ki≥k2i+1和ki≥k2i+2 (其中,i = 0,1, …?(n – 2) / 2? ) ◆举例 09 17 65 23 45 78 87 53 31 0 1 2 3 4 5 6 7 8 最小堆 87 78 53 45 65 09 31 17 23 0 1 2 3 4 5 6 7 8 最大堆 09 17 65 23 45 78 87 53 31 0 1 2 3 4 5 6 7 8 堆顶元素值最小 87 78 53 45 65 09 31 17 23 0 1 2 3 4 5 6 7 8 堆顶元素值最大 * 2、最小堆的类声明 template class Elem,class Comp class MinHeap { private : Elem * heap; //存放堆元素的数组 int n; //堆当前元素个数 int size; //堆最多允许元素个数 void siftdown (int i) public : MinHeap (Elem* h, int num ,int max) //构造堆 {Heap=h; n=num; size=max; buildHeap();} int heapsize() const {return n;} ~MinHeap( ) {delete [ ] heap;} * bool Insert (const Elem ); bool RemoveMin (Elem ); bool isLeaf(int pos) const{return (pos=n/2)(posn)} int leftchild(int pos) const {return pos*2+1;} int rightchild(int pos) const {return pos*2+2;} int parent(int pos) const{return (pos-1)/2;} bool remove(int, Elem); void buildHeap() { for(int i=n/2-1; i=0; i--) siftdown(i); } }; * 二、堆的建立 1、自下向上逐步调整建堆的举例 i j 53 17 78 09 45 87 65 23 31 0 1 2 3 4 5 6 7 8 i = ?(n – 2) / 2? = 3 * i j 53 17 78 09 45 87 65 23 31 0 1 2 3 4 5 6 7 8 i = 2 二、堆的建立 1、自下向上逐步调整建堆的举例 65 78 * i j 53 17 65 09 45 87 78 23 31 0 1 2 3 4 5 6 7 8 i = 1 二、堆的建立 1、自下向上逐步调整建堆的举例 09 17 i j * i j i j 二、堆的建立 1、自下向上逐步调整建堆的举例 i j 53 09 65 17 45 87 78 23 31 0 1 2 3 4 5 6 7 8 i = 0 09 53 17 53 23 53 ☆对第i个关键字进行筛选的要点: ①在第(2 i + 1)和(2 i + 2)中选小者定为第j ②若第i大于第j则交换 ③向下继续:i = j,j = 2 i + 1,重复①、②,直到j>(n – 1) * 向下筛选的算法 template class Elem,class Comp void MinHeapElem,Comp ::siftDown(int pos) { while(!isLeaf(pos)){ int j=leftchild(pos); int rc=rightchild(pos); if(rcn)Comp::gt(Heap[j],Heap[rc])) j=rc; if(!Comp::gt(Heap[pos],Heap[j])) return; swap(Heap, pos, j); pos=j; } } *
您可能关注的文档
- 状态空间达式的解.ppt
- 9年级Unit(第一课时公开课).ppt
- 10-5对标的曲面积分.ppt
- 状态空间平均法立小信号模型.ppt
- 10kV空线路基础知识.ppt
- 10倍速领力培训课程.pptx
- 10分钟品通集团财务.ppt
- 状元坊与高第街商业调查报告.ppt
- 11结构体联合体与枚举类型.ppt
- 12册 第单元 第29课.ppt
- 伟明环保-市场前景及投资研究报告-境内业务稳健运行,印尼市场贡献边际增量.pdf
- 桂东县法院系统招聘考试真题2025.pdf
- 贵州省黔南布依族2026年中考三模物理试题及答案.pdf
- 贵州省黔南州2026年中考语文二模试卷附答案.pdf
- 贵州省铜仁市2026年中考语文二模试卷附答案.pdf
- 2026上半年安徽事业单位联考合肥市庐江县招聘36人备考题库及一套完整答案详解.docx
- 贵州省毕节市2026年中考语文一模试卷附答案.pdf
- 贵州省贵阳市南明区2026年中考语文一模试卷附答案.pdf
- 2026上半年安徽事业单位联考合肥市庐江县招聘36人备考题库及一套参考答案详解.docx
- 贵州省贵阳市白云区2026年中考二模物理试题附答案.pdf
原创力文档

文档评论(0)