算法导论通过堆构建优先队列(学习笔记)
2018-10-12 19:27
239 查看
优先队列有四种基本操作
Insert(S, x): 把元素x 插入到S中
Maximum (S):返回S中具有最大key值的元素
Extract-Max(S):移除并返回S中具有最大key值的元素
Increase-Key(S, x, key):将元素x的key 值提升为key , 前提是新的key值不能小于旧的key值
HEAP-INCREASE-KEY 伪代码如下:
[code]HEAP-INCREASE-KEY(A, i, key): //将下标为i的元素的key值提升为key的值 if key < A[i]: error "新的key值小于当前的key值" A[i] = key; while i > 1 and A[parent(i)] < A[i]: exchange A[i] and A[parent(i)]; i = parent(i);
MAX-HEAP-INSERT 伪代码如下:
[code]MAX-HEAP-INSERT(A, key): //key为要插入到A中的元素 A.heap-size = A.heap-size + 1; A[A.heap-size] = 负无穷; //先加入一个无穷小的结点 HEAP-INCREASE-KEY(A, A.heap-size, key); //将新加入的结点的key值提升为正确的key值并移到正确的位置
HEAP-MAXIMUM 伪代码如下:
[code]HEAP-MAXIMUM (A): return A[1]; //堆顶元素即为最大元素
HEAP-EXTRACT-MAXIMUM 伪代码如下:
[code]HEAP-EXTRACT-MAXIMUM (A): if A.heap-size < 1: error "堆下溢" max = A[1]; A[1] = A[A.heap-size]; A.heap-size = A.heap-size - 1; //调整堆顶元素至正确位置, 保持最大堆性质 MAX-HEAPIFY (A, 1); return max;
阅读更多
相关文章推荐
- 算法(第四版)学习笔记之java实现基于堆的优先队列
- 【算法学习笔记】79.STL 优先队列 模拟法 SJTU OJ 4012 合并果子
- 【算法学习笔记】46.拓扑排序 优先队列 SJTU OJ 3010 Complicated Buttons
- 算法第四版学习笔记之优先队列--Priority Queues
- 算法导论学习笔记-5.4 概率分析和指示器随机变量的应用-几个有趣的问题
- 算法导论学习笔记-第十三章-红黑树
- Introduction to Algorithms 算法导论 第3章 函数的增长 学习笔记及习题解答
- 算法学习 - 优先队列的二叉堆实现
- 算法导论学习笔记(2)-归并排序
- 一个菜鸟的算法导论学习笔记【Introsuction&Chapter 1】
- 算法导论--第六章学习笔记
- 一个菜鸟的算法导论学习笔记【Chapter 2】
- 【算法学习笔记】53.单调队列的简单应用 SJTU OJ 1034 二哥的金链
- 算法导论学习笔记——插入排序
- 算法学习笔记 第2章 栈、队列、链表
- 算法导论——lec 12 平摊分析与优先队列
- 优先队列 算法导论 java语言
- 算法导论学习笔记 (页码:9 ~ 16)