大数据算法种有一类题求解问题(应用场景)
1、求解在n 个数据种前 k个最大数据或最小数据的(或出现次数最多或次数最小的 前k个数)
解答:一般这类解法除了常用大数据 MR 思想外。如果内存比较大的化我们可以采用维护最大最小堆的方式
2、大顶堆的图示
3、 堆排序的具体流程图:
注意理解概念:堆蓝色部分表示无序区,黄色部分表示有序区。
4、堆排序的具体步骤
(1、无序区进行初始化然后生产大顶堆。
(2、将大顶堆的堆顶元素按照顺序(由右到左 一层一层向上轮询)等方式挨个替换挨着有序元素的值。完成堆排序的过程
(3、在构建大顶堆的过程中是每次顶节点与左右子节点比较大小,将最大的元素归结到堆顶并递归完成大顶堆的构建过程。
注意:理解代码-》i节点的孩子节点为 2i +1和 2i+2 ;i节点的 父节点为:(i-1)/2;最后一个非叶子节点:n/2 - 1;下面的代码是实现的大根堆,把元素从小到大依次排序;
堆排序的java 实现:
5、堆的存储空间
1)、堆排序的空间存储的占用大小为数组长度K,空间复杂度O(1)
2)、堆的时间复杂度
堆排序的时间复杂度,主要在初始化堆过程和每次选取最大数后重新建堆的过程如果对k个值进行堆排序。
初始化建立堆的过程种O(k)
更改堆元素后重建堆时间:O(klogk)
所以堆是很好兼容时间和空间复杂度
6、堆排序的优势:
一般堆的存储都采用数组的方式,然后通过数组指针的坐标方式记录堆的存储顺序(父节点和子几点的关系和位置)方式交换堆的父节点和子节点的维护堆的存储