美文网首页
2.4 优先队列

2.4 优先队列

作者: EnjoyChen | 来源:发表于2017-07-23 17:05 被阅读0次

合适的数据结构支持两种操作:删除最大元素和插入元素

一 API


二 初级实现

2.1 数组实现(无序)


2.2 数组实现(有序)


2.3 链表表示法


三 堆的定义

四 堆的算法

打破堆的状态,然后再遍历堆并按照要求将堆的状态恢复。这个过程称为堆的有序化。

4.1 由下至上的堆有序化(上浮)

4.2 由上至下的堆有序化(下沉)


4.3 多叉堆

4.4 调整数组大小

4.5 元素的不可变性

4.6 索引优先队列

五 堆排序

堆排序分为两个阶段:在堆的构造阶段,将原始数组重新组织进一个堆中;

                                    在下沉排序阶段,我们从堆中按递减顺序取出所有元素并得到排序结                                           果。

5.1 堆的构造

5.2 下沉排序

5.3 先下沉后上浮

堆排序是我们所知的唯一能够同时最优地利用空间和时间的方法----在最坏的情况下它也能够保证使用 ~ 2NlgN次比较和恒定的额外空间。

尽管如此,堆排序的应用仍然没有快速排序广泛和频繁,主要是因为:

1.堆排序的内循环比快速排序要复杂

   循环技术和各种需要注意的地方较快速排序多

2.堆排序不能有效利用缓存

   堆排序载入大数组时,数组的引用会很可能布满整个内存,而快速排序是递归调用,保留着很    多局部的引用,所以快速排序在利用缓存的效率上比堆排序高。

   现代机器的缓存命中率一般都会在 95% 以上,所以有效的利用缓存是很重要的

   快排在递归进行部分的排序的时候,只会访问局部的数据,因此缓存能够更大概率的命中;而    堆排序的建堆过程是整个数组各个位置都访问到的,后面则是所有未排序数据各个位置都可能    访问到的,所以不利于缓存发挥作用。简答的说就是快排的存取模型的局部性(locality)更      强,堆排序差一些。

   速度和缓存的问题都反映了堆排序让数据过于大距离的移动,你观察某个元素在整个排序过程    中的移动过程,会发现它是前后大幅度的跑动;而快速排序则是尽快的移动到最终的位置,然    后做小范围的跳动。

3.同时和归并排序相比,堆排序是不稳定的,在开发一些要求排序稳定性的程序时,显然应该选    择归并排序

相关文章

  • 2.4优先队列

    有时候不是所有的数据都需要完全排序,可以选择一些优先级的数据来处理.例如支持,删除最大元素和插入元素,这种数据叫优...

  • 2.4 优先队列

    合适的数据结构支持两种操作:删除最大元素和插入元素 一 API 二 初级实现 2.1 数组实现(无序) 2.2 数...

  • 数据结构 | 其三 栈和队列

    栈 java中栈继承了Vector 队列 2.1 普通队列 2.2 循环队列 2.3 优先级队列 2.4 阻塞队列...

  • 《算法》2.4-优先队列

    1. 基本概念 比如:输入N个字符串,我们需要找打最大的M个字符串。我们可以将N个字符串进行排序,然后取最大的M个...

  • 2.4 优先队列 Priority Queue

    优先队列的数据结构支持两种操作:删除最大元素和插入元素优先队列的使用和队列(删除最老的元素)以及栈(删除最新的元素...

  • 《恋上数据结构与算法一》笔记(十七)优先级队列

    目录 优先级队列 优先级队列的应用场景举例 优先队列的底层实现 习题 一 优先级队列 优先级队列也是个队列,因此也...

  • 《数据结构与算法》总结(八)优先级队列

    目录 优先级队列 优先级队列的应用场景举例 优先队列的底层实现 习题 一 优先级队列 优先级队列也是个队列,因此也...

  • 2018-03-10 STL

    优先队列结构体优先队列 set map

  • GO语言实现 一 堆与优先队列

    堆与优先队列 优先队列 之前我们讲过队列这种数据结构,队列的特点是先进先出,那什么是优先队列呢?一般来说,优先队列...

  • 堆(Heap)和有优先队列(Priority Queue)

    1 优先队列(Priority Queue)优先队列与普通队列的区别:普通队列遵循先进先出的原则;优先队列的出队顺...

网友评论

      本文标题:2.4 优先队列

      本文链接:https://www.haomeiwen.com/subject/ncnykxtx.html