您的位置:首页 > 其它

算法导论通过堆构建优先队列(学习笔记)

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;

 

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: