《算法导论》第六章-优先级队列(伪代码)

本文介绍了优先级队列的基本操作及其伪代码实现,包括获取最大值、提取最大值、增加键值及插入新元素等关键算法,并分析了每种操作的时间复杂度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

优先级队列

伪代码:

//返回优先级队列的最大值

Heap_Max(A)

        return A[1]

end

运行时间为Θ(1)


//去掉并返回优先级队列中的最大值

/*
 * 先记录最大值,将数组最后的元素与第一个元素交换,数组大小减一, 
 * 调用max_heapify函数保证最大堆的性质,最后返回最大值。
 */

Heap_Extract_Max(A, length)

         if  length < 1  then   error "heap under flow"

         max = A[1]

         A[1] = A[length]

         length --

         Max_Heapify(A, 1, length)

        return max

end

运行时间为Θ(lgn)


//将优先级队列中的i元素的值增加到key(key >= A[i])

Heap_Increase_Key(A, i, key)
       if key < A[i]    then   error
       A[i] = key
       while i>1 && A[PARENT(i)] <A[i]
             do exchange A[i] <-> A[PARENT(i)]
             i = PARENT(i)

end

运行时间为Θ(lgn)


//将元素插入优先级队列.

向最大堆中插入新的关键字。新的关键字插入在优先级的队尾部,然后从尾部的父节点开始自底向上调整堆

 MAX_HEAP_INSERT(A,key)
         heap_size[A] = heap_size[A]+1
         A[heap_size[A]] = -0; //把队尾赋值0或无穷小
         HEAP_INCREASE_KEY(A,heap_size[A],key)

end

运行时间为Θ(lgn)


详细资料参考:http://www.cnblogs.com/Anker/archive/2013/01/23/2873951.html


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值