堆数据结构是一种数组对象,它可以被视为一科完全二叉树结构。它的特点是父节点的值大于(小于)两个子节点的值(分别称为最大堆和最小堆)。它常用于管理算法执行过程中的信息,应用场景包括堆排序,优先队列等。1、根结点若有子树,则子树一定也是堆。2、根结点一定大于(或小于)子结点。因为要求堆必须是完全二叉树,所以可以用线性的数据结构,比如数组,来实现堆。利用数组实现,则对于长为N的堆中的元素从0到N-1排列...
分类:
其他好文 时间:
2015-07-30 19:34:42
阅读次数:
414
堆 是一种经过排序的完全二叉树,其中任一非终端节点的数据值均不大于(或不小于)其左孩子和右孩子节点的值。二叉堆 是一种特殊的堆,二叉堆是完全二元树(二叉树)或者是近似完全二元树(二叉树)。二叉堆有两种:最大堆和最小堆。最大堆 根结点的键值是所有堆结点键值中最大者,父结点的键值总是大于或等于任何一个子...
分类:
其他好文 时间:
2015-07-22 12:38:23
阅读次数:
108
温故知新,基础复习(二叉堆排序)最小堆(最终数组的数据是降序),最大堆(最终数组的数据是升序)下例是最小堆#include
#include
void Swap(int Arra[],unsigned int LeftIndex,unsigned int RightIndex)
{
int TeampValue = Arra[LeftIndex];
Arra[LeftIndex]=Arr...
分类:
编程语言 时间:
2015-07-22 00:04:42
阅读次数:
167
class MinStack {public: void push(int x) { ele.push(x); if(min.empty()||x ele; stack min;};
分类:
其他好文 时间:
2015-07-20 14:21:23
阅读次数:
92
斐波拉契堆是由一组最小堆有序树组成,每棵树遵循最小堆性质,并且每棵树都是有根而无序的。所有树的根通过left和right指针来形成一个环形的双链表,称为该堆的根表。
对于一个给定的斐波拉契堆H ,可以通过指向包含最小关键字的树根指针H.min来访问。堆中每个节点还包含x.mark,x.degree两个域,x.degree表示x的子女表中的子女个数;x.mark表示从x上次成为另一个节点子女...
分类:
编程语言 时间:
2015-07-18 17:14:13
阅读次数:
228
【思路】建立一个小堆和一个大堆。大堆用来存放第1..index-1大的数,其余数存放在大堆,小堆的堆顶元素便是我们要求出的第index大的数。每次插入一个A(n),必须保证大堆中数字数目不变,故先插入小堆中。若此时小堆堆顶小于大堆堆顶,则交换堆顶元素;每次Get(),输出小堆的堆顶元素,并将它并入大...
分类:
其他好文 时间:
2015-07-16 11:25:49
阅读次数:
149
前几天在做Kth Largest Element in an Array 时使用到了堆,通过那倒题目也了解到了堆的make_heap,push_heap,pop_heap操作,看了C++ reference中的讲解也明白了heap_sort是什么回事。于是想着自己实现以下这四个函数。
堆的定义:
任意节点小于它的所有后裔,最小元在堆的根上(堆序性)。
堆总是一棵完全树。
#include <ios...
分类:
其他好文 时间:
2015-07-14 18:16:02
阅读次数:
109
这个题很显然,可以转换成这个问题:
有n-1个区间,m个数,
每个数最多只能用一次,第i个数只要能被第j个区间包含,那么这个数就可以放入这个区间内。
求出,当所有区间里都恰有一个数时的情况。
我们把所有区间按照下限升序排序,所有数升序排序之后分治即可。
分治过程,维护一个元素为区间的小堆,堆顶是上限最小的区间。
考虑第i个数,把所有能够包含它的区间都丢到堆中,然后从堆中丢一个区...
分类:
其他好文 时间:
2015-07-14 00:14:36
阅读次数:
280
堆的定义堆是一个完全二叉树或者近似的完全二叉树堆的性质
父结点的键值总是大于或等于(小于或等于)任何一个子节点的键值。
每个结点的左子树和右子树都是一个二叉堆(都是最大堆或最小堆)。堆的存储一般都用数组来表示堆,i结点的父结点下标就为(i – 1) / 2。它的左右子结点下标分别为2 * i + 1和2 * i + 2
堆的特点插入元素和弹出堆顶元素的时间复杂度lg(n)
判断序列是不是堆根据性质判...
分类:
其他好文 时间:
2015-07-13 22:28:39
阅读次数:
130
主要内容:1、什么是堆?2、如何建堆3、堆排序4、参考代码一、什么是堆?“堆”是个很有趣的数据结构,是个完全二叉树。“堆”的特性:每个节点的键值一定总是大于(或小于)它的父节点(大于:称为“最大堆”,小于:称为“最小堆”),或者说每个节点总是大于或小于它的子节点。对于最大堆而言,根节点为最大值;对于...
分类:
编程语言 时间:
2015-07-01 13:40:31
阅读次数:
161