TopK 问题 少量数据,可以全部读入内存 LeetCode原题,两种方法: 1. 优先队列(堆排序) 2. QuickSelect 大量数据,无法全部读入内存 50 GB 数据,CPU 2 核,512 MB 内存 使用堆排序,内存中只需要常驻当前TopK,读取数据时只读取一个数据分组,比如 100 ...
分类:
其他好文 时间:
2020-04-08 11:54:51
阅读次数:
58
数据结构--优先队列(堆排序) 优先队列:不是先进先出啦,下面的代码是大顶堆,大的先出。 在之前理解堆排序的基础上,在来理解优先队列。 还是用这个公式: leftNo = parentNo*2+1 rightNo = parentNo*2+2 parentNo = (nodeNo-1)/2 每次进队 ...
分类:
编程语言 时间:
2018-10-04 11:34:48
阅读次数:
158
2269: minval 题目描述 有两个长度为N的序列A和B,在A和B中各任取一个数相加可以得到N2个和,求这N2个和中最小的N个。 有两个长度为N的序列A和B,在A和B中各任取一个数相加可以得到N2个和,求这N2个和中最小的N个。 输入 第一行输入一个正整数N(1<=N<=100000); 第二 ...
分类:
编程语言 时间:
2018-04-21 23:36:39
阅读次数:
288
都工作2年了还去看排序算法,是不是有点low?是的,不过咱不会,就得看,还是有些东西值得一观的,我看的是《算法》这鸟书。 排序算法大概讲了,冒泡算法,选择算法,插入算法,希尔算法,归并算法,快排算法,三向切分快排算法,接着讲了优先队列,堆排序,索引优先队列,然后扯皮了几种排序算法的归约(归约是指为解 ...
分类:
编程语言 时间:
2017-10-13 17:13:12
阅读次数:
284
1、堆排序的堆,其实是一个 完全二叉树。既是一个结点要么是叶子结点,要么必定有左右两个子节点的树。 2、堆有序:每个结点的值,都必须大于两个子节点。但是两个子结点的大小不作要求。 3、一棵大小为N的完全二叉树,高度为lgN(层)。 用数组实现堆,假设数组下标从0开始,下标为k的元素,它的左子树是2k ...
分类:
编程语言 时间:
2016-12-09 22:11:12
阅读次数:
174
本文从两个方面介绍优先队列,1.优先队列的常见函数;2.优先队列代码实现:堆排序和哈夫曼树。...
分类:
编程语言 时间:
2015-07-16 19:56:24
阅读次数:
127
1. 堆排序是一种不稳定的排序,时间复杂度是O(nlogn),最差也是O(nlogn),堆排序也可看成是一个“完全二叉树”,其中MinHeap经常被当作最小优先队列。堆排序的过程:每次弹出堆的堆顶元素,然后把堆的最右下叫元素交换,然后重新调整堆。调整堆主要依据:找左/右子节点的最大的那个元素,然后交...
分类:
其他好文 时间:
2015-06-08 14:40:20
阅读次数:
210
优先队列和堆排序标签(空格分隔): 排序算法 数据结构优先队列和堆排序
优先队列
堆
1 基于堆的算法
初始化
自底向上堆化
自顶向下堆化
插入删除一项
2 堆排序
优先队列全部代码
1 优先队列普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除。在优先队列中,元素被赋予优先级。当访问元素时,具有最高优先级的元素最先删除。优先队列具有最高级先出 (largest-in,first-...
分类:
编程语言 时间:
2015-04-08 10:59:15
阅读次数:
214
1.堆排序a.堆的定义n个元素序列{k1,k2,...,kn}当且仅当满足以下关系时,称之为堆。ki=k2i且ki>=k2i+1 (大根堆)以下针对最大堆b.维护堆的性质Max-Heapify通过让A[i]的值在最大堆中"逐级下降"(A[i]的值小于其左右孩子的值时),从而使得以i为根结点的子树重新...
分类:
编程语言 时间:
2015-04-06 15:34:34
阅读次数:
218
对于堆排序,首先要先知道什么是堆数据结构,堆数据结构就是一个完全二叉树,但是它有自己的性质.
例如最大堆的性质为:A[PARENT[i]]>=A[i];即每一个结点的值大于等于其左右孩子的值,小于等于其父节点的值。我们在这里只讨论最大堆的情况。我们知道一颗完全二叉树对应一个最大堆的形式,我们要做的就是将二叉树转化为最大堆,这就是所谓的最大堆的维护,我们定义函数MaxheapFY(A,i)来进行操作...
分类:
编程语言 时间:
2015-03-20 11:04:21
阅读次数:
177