libevent源代码之最小堆的实现libevent 中通过结构体min_heap_t实现最小堆,该结构体的声明如下:typedef struct min_heap{ struct event** p; unsigned n, a;} min_heap_t;其中p是指向指针的指针,p指向了一个数组,...
分类:
其他好文 时间:
2015-04-18 17:28:50
阅读次数:
141
对于堆排序,首先要先知道什么是堆数据结构,堆数据结构就是一个完全二叉树,但是它有自己的性质.
例如最大堆的性质为:A[PARENT[i]]>=A[i];即每一个结点的值大于等于其左右孩子的值,小于等于其父节点的值。我们在这里只讨论最大堆的情况。我们知道一颗完全二叉树对应一个最大堆的形式,我们要做的就是将二叉树转化为最大堆,这就是所谓的最大堆的维护,我们定义函数MaxheapFY(A,i)来进行操作...
分类:
编程语言 时间:
2015-03-20 11:04:21
阅读次数:
177
排序 堆的实现和利用堆来排序排序 堆的实现和利用堆来排序Table of Contents一些基本的定义heapy:调整堆build:建堆insert:插入新的元素removetop:取出堆顶现在来使用堆来排序,只要每次都 removetop 就行了堆是最有趣的数据结构,看过《算法导论》的都会很容易...
分类:
编程语言 时间:
2015-03-17 00:34:16
阅读次数:
167
为了方便快捷高效率的求得集合中权值最小的2个元素,我采用堆数据结构,它可以以O(logn)的复杂度取得n个元素中的最小值。为了绕过对堆的实现,我采用标准模板库中的相应标准模板——优先队列。利用语句:priority_queue Q; 建立一个保存元素为int的堆Q,但是此时建立的堆默认是大顶堆...
分类:
其他好文 时间:
2014-11-19 17:43:25
阅读次数:
194
一般情况下我们使用的堆都是大顶堆或者小顶堆,其能实现在常数时间内获得数组的最大值或者最小值,同时满足在对数时间内删除和插入元素。但是如果要同时实现即能在常数时间内获得最大值和最小值,又能在对数时间内删除和插入元素,通常情况下的堆就不能满足上述要求了。为此介绍一种新的数据结构min-max heap
min-max heap 是一颗完全二叉树,但是二叉树的奇数层存的是max元素,偶数层存的是min...
分类:
其他好文 时间:
2014-11-19 01:48:30
阅读次数:
378
/*
** 二叉堆的实现
** 堆最重要的性质是儿子的值大于等于父亲的值,除此之外,
** 树的节点是按照从上到下,从左到右的顺序紧凑排列的。
**
** 插入:首先在末尾插入,然后不断向上提升直到没有大小颠倒为止。
** 删除:首先把堆的最后一个元素复制到根节点并且删除最后一个
** 节点。然后不断向下交换直到没有大小颠倒为止。在向下交换过程
** 中,如果有两个儿子,那么选择数值较小的儿子...
分类:
其他好文 时间:
2014-10-31 17:18:17
阅读次数:
194
堆是二叉树中的一种,是一种常见的数据结构,具有以下性质:任意节点小于(最小堆)或大于(最大堆)它的所有后裔,最小元或最大元在堆的根上(堆序性)。堆总是一棵完全二叉树 最大堆如图一,最小堆如图二。 最小堆的实现如下: MinHeap.h 1 #include "stdafx.h" 2...
分类:
其他好文 时间:
2014-09-30 18:57:49
阅读次数:
188
看到标题,估计有人就开始想吐了,没关系,你可以先吐完再看,现在MVC框架多如牛毛,没必要再重复发明轮子了,要声明的是,这里不是想要发明轮子,也没那个闲工夫去发明轮子,而是看到这么多MVC框架模样都差不多,想统一接口,减少迁移成本,Java世界里,最喜欢的就是定标准,然后就是一大堆的实现,估且这里也当...
分类:
Web程序 时间:
2014-09-25 16:50:27
阅读次数:
202
d叉堆的实现相对于二叉堆变化不大,首先看它如何用数组表示。考虑一个索引从1开始的数组,一个结点i最多可以有d个子结点,编号从id - (d - 2) 到 id + 1。从而可以知道一个结点i的父结点计算方法为: (i + d - 2) / d。第二个问题是 一个含有n个元素的d叉堆的高度,就是一个简...
分类:
其他好文 时间:
2014-08-31 11:49:51
阅读次数:
172