堆是一种特殊的二叉树,它具有以下两个性质:
1、每个节点的值大于或等于其每个子节点的值;
2、该树完全平衡,最后一层的叶子都处于最左侧的位置。
有最大堆和最小堆之分,以上定义是最大堆的定义,最小堆的定义如下:
1、每个节点的值小于或等于其每个子节点的值;
2、该树完全平衡,最后一层的叶子都处于最左侧的位置。
本文实现了堆的建立、删除、插入、堆排序。
本文中的例子以最大堆为...
分类:
其他好文 时间:
2014-10-07 18:10:53
阅读次数:
122
堆是二叉树中的一种,是一种常见的数据结构,具有以下性质:任意节点小于(最小堆)或大于(最大堆)它的所有后裔,最小元或最大元在堆的根上(堆序性)。堆总是一棵完全二叉树 最大堆如图一,最小堆如图二。 最小堆的实现如下: MinHeap.h 1 #include "stdafx.h" 2...
分类:
其他好文 时间:
2014-09-30 18:57:49
阅读次数:
188
堆是一种非常有用的数据结构,下面的C#以插入数据的方式创建最大堆,然后实现了堆的插入和删除操作。...
分类:
其他好文 时间:
2014-09-16 14:19:00
阅读次数:
127
maxheap.h
#include
template
class MaxHeap
{
public:
MaxHeap(int num);
MaxHeap(T Arr[], int arrsize, int totalsize);
bool insert(const T&);
bool del(T&);
void show() const;
void showonlevel()...
分类:
其他好文 时间:
2014-09-13 21:32:55
阅读次数:
300
年轻代 年老代概念 http://jefferent.iteye.com/blog/1123677JVM的堆的内存,是通过以下面两个參数控制的-Xms最小堆的大小,也就是当你的虚拟机启动后,就会分配这么大的堆内存给你-Xmx是最大堆的大小当最小堆占满后,会尝试进行GC,假设GC之后还不能得到足够的内...
分类:
编程语言 时间:
2014-09-06 21:17:43
阅读次数:
396
当N很小十可以使用方法2,
当N很大时可以使用方法1,从硬盘逐次读入解决;
/*方法 1 适合大量数据
*寻找长为N的数组的前M大的元素并输出。
*用堆的性质,使用数组N建立一个M大的最大堆,然后输出堆内容即可
*时间复杂度分析: 建堆时间O(M)
*遍历数字,并在堆中比较时间O((N-M)logM)
*总时间复杂度O(M)+ O((N-M)logM)
*
...
分类:
其他好文 时间:
2014-09-06 11:02:23
阅读次数:
231
今天在某个群中看到有人问在流式的数据中如何动态的维护中位数的方法,因为之前看到同学的一个问题,当时他没答出来。但是后来了解到类似top(k),last(k)需要用到最大堆,最小堆一样,中位数需要利用双堆维护一下。 先复习一下,如果是静态的数据求取中位数的方法有哪些呢? (1)排序 ...
分类:
其他好文 时间:
2014-08-30 13:53:09
阅读次数:
217
对于堆大家都不陌生,无非就是最大堆和最小堆之分,堆的使用很广泛,优先队列、求大叔组的前k个数都可以用堆实现,且时间复杂度低。但是对于堆的具体实现存在几种不同的方式,它们各有优势。根据堆底层的实现可分为顺序存储堆和链式存储堆,链式存储又分为左式堆、斜堆以及二项..
分类:
其他好文 时间:
2014-08-25 17:18:25
阅读次数:
248
rebalance a heap⑴最大堆的插入 由于需要维持完全二叉树的形态,需要先将要插入的结点x放在最底层的最右边,插入后满 足完全二叉树的特点; 然后把x依次向上调整到合适位置满足堆的性质,例如下图中插入80,先将80放在最后,然后两次上浮到合适位置. 时间:O(logn)。 “结点上浮”程序...
分类:
其他好文 时间:
2014-08-25 14:57:04
阅读次数:
198
会有这样的场景,一个应用崩溃了,而导致的该应用崩溃的原因是,该应用占用的内存大小超过了系统分配给它的最大堆大小。对象的分配,是发生在堆(heap)上面的,系统分配给每个应用的最大堆大小是固定的。 假设,出现这种情况了,你的应用再启动一个activity,就导致了你的应用崩溃了,你的应用...
分类:
移动开发 时间:
2014-08-20 21:03:32
阅读次数:
260