算法分析: 堆排序的思想是利用数据结构--堆。具体的实现细节: 1. 构建一个最大堆。对于给定的包含有n个元素的数组A[n],构建一个最大堆,从最下层最右边的非终端结点开始构建,将它与其孩子进行比较和若有必要的互换,调整这个堆结构,使其满足最大堆的特性。当为了满足最大堆特性时,堆结构发生变化,此时递 ...
分类:
编程语言 时间:
2016-08-05 15:35:48
阅读次数:
146
题意:有一些ADD和GET操作。n次ADD操作,每次往序列中加入一个数,由ADD操作可知序列长度为1-n时序列的组成。GET操作输入一个序列长度,输出当前长度序列第i大的元素的值。i初始为0,每次GET操作i先加1。给出的GET操作输入非降。 思路:求长度为k的序列的第i大元素。优先队列维护最大堆和 ...
分类:
其他好文 时间:
2016-08-05 13:50:34
阅读次数:
99
堆排序堆排序(heapsort)也是一种相对高效的排序方法,堆排序的时间复杂度为O(n lgn),同时堆排序使用了一种名为堆的数据结构进行管理。二叉堆
二叉堆是一种特殊的堆,二叉堆是完全二叉树或者是近似完全二叉树。二叉堆满足堆特性:父节点的键值总是保持固定的序关系于任何一个子节点的键值,且每个节点的左子树和右子树都是一个二叉堆。
如上图显示,(a)是一个二叉堆(最大堆), (b)是这个二叉堆...
分类:
编程语言 时间:
2016-07-23 23:07:31
阅读次数:
473
堆设置-Xmx3550m:设置JVM最大堆内存 为3550M。 -Xms3550m:设置JVM初始堆内存 为3550M。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。 -Xss128k: 设置每个线程的栈 大小。JDK5.0以后每个线程栈大小为1M,之前每个线程栈大小为25 ...
分类:
编程语言 时间:
2016-07-21 17:42:18
阅读次数:
167
这个hashheap的实现可以既可以是最大堆,也可以是最小堆,同时因为hash表中存的value是在heap数组中的index和这个key值的数目,所以可以处理重复数字.关键在于siftup和siftdown的非递归实现.siftdown相当于heapify,但是之前只使用过递归版本. ...
分类:
编程语言 时间:
2016-07-08 13:22:37
阅读次数:
182
在大数查找中会遇到一类问题,例如在100亿条数据中找出 最大的(最小的) 前1000个元素。以int型4Byte为例,有1*1010*4 B = 4*1010/(230) B = 37.25G。 直接读取到内存中显然不合适,那么就需要: 首先,读取前1000个元素,建立一个最小堆(最大堆); 其次, ...
分类:
其他好文 时间:
2016-06-28 23:43:06
阅读次数:
259
堆排序主要分为两步:创建最大堆和提取堆中最大元素。 首先,定义MAX-HEAPIFY函数: 该算法的时间复杂度为:T(n)=O(lgn); 创建最大堆:BUILD-MAX-HEAP 该函数的时间复杂度为:T(n)=O(nlgn); 选出最大元素构成有序序列:HEAP-SORT 该函数的时间复杂度为: ...
分类:
编程语言 时间:
2016-06-28 11:01:03
阅读次数:
176
堆的定义如下:n个元素的序列(K1,K2......Kn)当且仅当满足Ki<=K2i&&Ki<=K2i或Ki>=K2i&&Ki>=K2i(i=1,2,3,...n/2)时称之为堆 以一维数组作为堆的存储结构,堆可以看成一个完全二叉树。 最大堆:每个父节点的都大于孩子节点。最小堆:每个父节点的都小于孩 ...
分类:
编程语言 时间:
2016-06-27 23:04:17
阅读次数:
219
题目链接:http://poj.org/problem?id=1442 本来想复制一下,然后直接sort,结果T了。 在网上看了一下,有用两个队列做的,想了半天,没看懂什么意思。后来模拟一边,总算是懂了。 这里,将要输出的第k小的数存在最小堆中,输出,压入到最大堆中(最大堆是用来存第k小之前的数,更 ...
分类:
编程语言 时间:
2016-06-24 20:26:28
阅读次数:
131
建堆,可以用自底向上的方法利用过程Max-Heapify把一个大小为n的数组A转换为最大堆,A[n/2]后的元素都是树的叶结点,每个叶结点都可以看成只包含一个元素的堆,时间复杂度为O(n)。。 堆排序,堆排序算法利用Build-Max-Heap将输入数组A建成最大堆,因为数组中的最大元素总在根结点A ...
分类:
编程语言 时间:
2016-06-19 18:17:56
阅读次数:
357