算法导论第六章堆排序

Posted yesuuu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法导论第六章堆排序相关的知识,希望对你有一定的参考价值。

基本过程:

1、保持最大堆的性质:假设两个子堆都满足,只需要根节点依次换下去,复杂度O(lg n) 

2、初始化堆:后半段都是叶子,在前半段从后往前,依次执行上述最大堆性质的操作,名义复杂度是O(n lg n),但是有更精确的计算,

  在高度为h的节点为O(h), 因此为 n\sigma (h / 2^h),其复杂度为O(n)。(思想是高层复杂度才高,指数衰减,而复杂度增长是lg级别,因此被dominate掉了)

堆排序算法:先建最大堆,每次把顶上的位置与合适的位置互换,然后执行过程1, 共执行n次,其复杂度为 O(n lg n)

 

优先级队列:集合的一个管理方式

操作:insert(x, S), max(S), extract_max(S), increase(x, k, S) - 将x的值增长为k,

1、max 很显然。。。取第一个元素即可

2、extract_max 与之前相同,O(lg n),

3、insert操作:在最后加入,然后一点一点上移。

 

堆排序代码:未完待续

 

以上是关于算法导论第六章堆排序的主要内容,如果未能解决你的问题,请参考以下文章

《算法导论》第六章 练习题 Exercise

堆排序

算法导论

算法导论笔记——第十六章 贪心算法

算法导论第十六章

算法导论_第十六章_动态规划_creatshare分享会