堆这个数据结构应用非常广泛,数字图像处理的算法里也见过。似乎记得以前老师上课说需要用树结构实现堆排序,看了一下算法导论才明白其精髓。堆虽然是一棵树,但显然没必要非得用树结构实现堆排序。堆排序的性质很好,算法时间复杂度为O(nlgn)。1. 堆排序的简要说明。二叉堆可以分为两种形式:最大堆和最小堆。在...
分类:
其他好文 时间:
2014-08-19 23:48:35
阅读次数:
325
题目:n个数中,求最小的前k个数。这道题在各个地方都看到过,在国内出现的频率也非常高。解法:1. brute force。 O(k*n)复杂度;2. sort。O(k+n*lgn)复杂度;3. 最大堆。每次替代的是大小为k的最大堆的最大值。O(k+(n-k)lgk)复杂度。4. 最小堆。和sort类...
分类:
其他好文 时间:
2014-08-19 00:45:33
阅读次数:
347
题目链接:Median做了整整一天T_T尝试了各种方法:首先看了解答,可以用multiset,但是发现java不支持;然后想起来用堆,这个基本思想其实很巧妙的,就是维护一个最大堆和最小堆,最大堆存放前半部分较小的元素,最小堆存放后半部分较大的元素,并且最大堆的所有元素小于最小堆的所有元素;保持最大堆...
分类:
其他好文 时间:
2014-08-18 23:21:23
阅读次数:
537
The kth great number
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65768/65768 K (Java/Others)
Total Submission(s): 6637 Accepted Submission(s): 2671
Problem Description
Xiao...
分类:
其他好文 时间:
2014-08-08 21:25:06
阅读次数:
462
堆数据结构实际上是一种数组对象,是以数组的形式存储的,但是它可以被视为一颗完全二叉树,因此又叫二叉堆。堆分为以下两种类型:
大顶堆:父结点的值不小于其子结点的值,堆顶元素最大
小顶堆:父结点的值不大于其子结点的值,堆顶元素最小
堆排序的时间复杂度跟合并排序一样,都是O(nlgn),但是合并排序不是原地排序(原地排序:在排序过程中,只有常数个元素是保存在数组以外的空间),合并排序的多有元素都被...
分类:
其他好文 时间:
2014-08-05 22:34:10
阅读次数:
232
一、对堆排序的相关了解
1、堆排序的运行时间是 O(nlogn)
;
2、定义:
堆heap是一棵具有以下属性的二叉树——
(1)它是一棵完全二叉树;
(2)每个结点大于或等于它的任意一个孩子。
备注:完全二叉树的定义——除了最后一层没填满以及最后一层的叶子都是偏左放置的,其他层都是满的二叉树!
3、二叉堆有两种:最大堆和最小堆。在堆排序中我...
分类:
其他好文 时间:
2014-08-01 00:11:00
阅读次数:
269
二叉堆:
二叉堆是完全二叉树或者是近似完全二叉树。
二叉堆满足二个特性:
1.父结点的键值总是大于或等于(小于或等于)任何一个子节点的键值。
2.每个结点的左子树和右子树都是一个二叉堆(都是最大堆或最小堆)。
当父结点的键值总是大于或等于任何一个子节点的键值时为最大堆。当父结点的键值总是小于或等于任何一个子节点的键值时为最小堆
堆排序:
由二叉堆的定义可知,堆顶元素(即...
分类:
其他好文 时间:
2014-07-23 22:34:19
阅读次数:
193
最小堆的类声明: 1 template 2 class MinHeap 3 { 4 public: 5 MinHeap(ElementType array[], int maxHeapSize); 6 ~MinHeap() { delete [] heap; } 7 int ...
分类:
其他好文 时间:
2014-07-20 08:18:26
阅读次数:
312
堆数据结构是一种数组对象,它可以被视为一颗完全二叉树,树中每个节点和数组中存放该节点值的那个元 素对应。如果表示堆的数组为A,那么树的根为A[1]。
一、 堆
1. 表示堆的数组A是一个具有两个属性的对象:length(A)是数组中的元素个数,heap-size(A)是存放在A中的堆的元素个数;A[heap-size(A)]之后的元素都不属于相应的堆。也就是:Heap-size(A)。
2....
分类:
其他好文 时间:
2014-07-08 20:23:53
阅读次数:
222
最大堆是一种很有用的数据结构,它是一颗完全二叉树,并且如果一个节点有儿子节点,其关键字都不小于其儿子节点的关键字。(最小树反之:节点值不大于儿子节点的完全二叉树。) 最大堆使用的一个典型的地方就是找出无序数字中,最大的一个数字。比如100亿整数中找出最小的前100个数字,典型的解决方案之一就是...
分类:
其他好文 时间:
2014-07-06 19:17:07
阅读次数:
127