堆是一种特殊的二叉树,它具有以下两个性质:
1、每个节点的值大于或等于其每个子节点的值;
2、该树完全平衡,最后一层的叶子都处于最左侧的位置。
有最大堆和最小堆之分,以上定义是最大堆的定义,最小堆的定义如下:
1、每个节点的值小于或等于其每个子节点的值;
2、该树完全平衡,最后一层的叶子都处于最左侧的位置。
本文实现了堆的建立、删除、插入、堆排序。
本文中的例子以最大堆为...
分类:
其他好文 时间:
2014-10-07 18:10:53
阅读次数:
122
在数据结构书中,讲解树内容的时候,都会介绍哈夫曼树(Huffman)和哈夫曼编码(哈夫曼树的一种应用)。关于哈夫曼树的定义,在这里就不讨论了,接下来贴出LZ实现哈夫曼树的一种方案。构建哈夫曼树:1.首先将所有的节点构成独立的二叉树,这些二叉树构成的一个森林,将这些二叉树构建成一个最小堆;2.选择最小...
分类:
其他好文 时间:
2014-10-01 21:53:11
阅读次数:
213
堆是二叉树中的一种,是一种常见的数据结构,具有以下性质:任意节点小于(最小堆)或大于(最大堆)它的所有后裔,最小元或最大元在堆的根上(堆序性)。堆总是一棵完全二叉树 最大堆如图一,最小堆如图二。 最小堆的实现如下: MinHeap.h 1 #include "stdafx.h" 2...
分类:
其他好文 时间:
2014-09-30 18:57:49
阅读次数:
188
采用优先队列把一个普通线性表改造成赫夫曼树,再进行赫夫曼编码,得到一个同时记录了明文和对应编码的密码本。使用优先队列(最小堆)构造赫夫曼树是一种高效的方法,比每次都遍历整个线性表要快很多。我在构造密码本时确保密码本数组递增排序,这样每次插入新结点时可以折半查找插入,效率较高。有序的密码本在把明文编码成密文时也可以大大提高查找效率。...
分类:
其他好文 时间:
2014-09-28 16:14:43
阅读次数:
319
//////最小堆排序,把所有的排序元素放在数组中。构成一个完全二叉树。///publicclassMyHeapSort{//////创建最小堆////////////publicvoidCreateHeap(Listlist,intlow,inthigh){inttemp=0;intk=0;//从...
分类:
其他好文 时间:
2014-09-19 19:05:55
阅读次数:
220
斐波那契堆(Fibonacci Heap)同二项堆(Binomial Heap)一样,也是一种可合并堆(Mergeable Heap)。与二项堆一样,斐波那契堆是由一组最小堆有序树构成,但堆中的树并不一定是二项树。与二项堆中树都是有序的不同,斐波那契堆中的树都是有根而无序的。
分类:
其他好文 时间:
2014-09-17 23:14:12
阅读次数:
336
年轻代 年老代概念 http://jefferent.iteye.com/blog/1123677JVM的堆的内存,是通过以下面两个參数控制的-Xms最小堆的大小,也就是当你的虚拟机启动后,就会分配这么大的堆内存给你-Xmx是最大堆的大小当最小堆占满后,会尝试进行GC,假设GC之后还不能得到足够的内...
分类:
编程语言 时间:
2014-09-06 21:17:43
阅读次数:
396
今天在某个群中看到有人问在流式的数据中如何动态的维护中位数的方法,因为之前看到同学的一个问题,当时他没答出来。但是后来了解到类似top(k),last(k)需要用到最大堆,最小堆一样,中位数需要利用双堆维护一下。 先复习一下,如果是静态的数据求取中位数的方法有哪些呢? (1)排序 ...
分类:
其他好文 时间:
2014-08-30 13:53:09
阅读次数:
217
对于堆大家都不陌生,无非就是最大堆和最小堆之分,堆的使用很广泛,优先队列、求大叔组的前k个数都可以用堆实现,且时间复杂度低。但是对于堆的具体实现存在几种不同的方式,它们各有优势。根据堆底层的实现可分为顺序存储堆和链式存储堆,链式存储又分为左式堆、斜堆以及二项..
分类:
其他好文 时间:
2014-08-25 17:18:25
阅读次数:
248
题目:
选择排序法的概念简单,每次从未排序部份选一最小值,插入已排序部份的后端,其时间主要花费于在整个未排序部份寻找最小值,如果能让搜寻最小值的方式加 快,选择排序法的速率也就可以加快
Heap排序法让搜寻的路径由树根至最后一个树叶,而不是整个未排序部份,从而可以加快排序的过程,因而称之为改良的选择排序法。
整个堆排序的过程分建堆、取值、调整为新的堆三个过程。分别如下示:(以最小堆积树为例。关于HeapTree请参阅数据结构与算法)...
分类:
其他好文 时间:
2014-08-21 00:14:23
阅读次数:
193