数据结构-堆 堆(英语:Heap),是一种拥有像树那样的特殊数据结构,或者理解为具有优先级的树。它的特点是父节点的值大于(或小于)两个子节点的值(分别称为大顶堆和小顶堆)。它常用于管理算法执行过程中的信息...
分类:
其他好文 时间:
2015-06-24 07:06:32
阅读次数:
132
章节简述
本章主要介绍堆,用该数据结构解决下面两个重要的问题:
排序,采用堆排序算法对n元数组排序,所花的时间不会超过O(nlogn),而且只需要几个字的额外空间;
优先级队列,堆通过插入新元素和提取最小元素这两种操作来维护元素集合,每个操作所需的时间都为O(logn);
本章采用自底向上的组织结构,从细节开始逐步过渡到正题。
堆数据结构
该部分介绍堆数据结构的设计思想。...
分类:
其他好文 时间:
2015-06-19 18:51:01
阅读次数:
156
4012. 合并果子Description在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。多多决定把所有的果子合成一堆。每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和。可以看出,所有的果子经过n-1次合并之后,就只剩下一堆了。多多在合并果子...
分类:
其他好文 时间:
2015-05-24 20:18:55
阅读次数:
135
又是一年省赛时。在这次省赛之前,窝们队刚经历了换队友风波,这次终于有了一个稳定,积极,一起为共同的目标而努力的队伍。在以很快的速度换完队友之后,距省赛还有不到两个月了。于是每周四在CF的gym上自加一场练习赛,然后加上周末的周赛,每周双赛,跟新队友ly之间的配合也越来越好。我总算把剩下的不算很难的图论知识点都刷完了,+cai也刷了一大堆数据结构,ly也刷了很多数学。(于是计算几何仍然没人刷。。)。...
分类:
其他好文 时间:
2015-05-20 14:45:48
阅读次数:
139
本文记录了使用C++模板实现了堆的基本操作,对于其他一些有用操作如IncreaseKey和DecreaseKey等则没有实现,这是因为使用模板把最小堆和最大堆揉在一起,对Key的增减我还没有找到比较好的处理方式,而现在写这个堆数据结构主要是因为在Hoffman树算法需要,基本操作已经够用了。
堆是一棵完全二叉树,所谓完全二叉树就是一棵从上倒下,从左到右依次填满每一个位置的二叉树,除了最后一层节点没...
分类:
其他好文 时间:
2015-05-14 16:35:04
阅读次数:
126
堆堆数据结构是一种数组对象,可以被视为一棵完全二叉树。对于给定的数组A,树的根为A[1],对于给定的下标为i的结点A[i],其父结点PARENT(i)=floor(i/2),左子结点LEFT(i)=2i,右子结点RIGHT(i)=2i+1叶级结点的高度可以认为是0,每向上一层,高度加一,定义树的告诉...
分类:
编程语言 时间:
2015-05-12 22:58:29
阅读次数:
164
堆堆的基本性质堆也可以说是一个完全二叉树,就是除了最底层的,其它层是满的,既然我们可以用完全二叉树来表示一个堆,那么我们这里就采用数组结构的二叉树来阐述堆的性质。
假设在这里我们用数组A表示堆,A[i]表示堆里面的第i个元素,于是我们通过二叉树的性质可知:
- PARENT(i) = i/2
- LEFTCHILD(i) = 2*i
- RIGHTCHILD(i) = 2*i+1就如下图表现...
分类:
其他好文 时间:
2015-05-05 22:03:55
阅读次数:
250
堆数据结构的一个重要用处就是:最为高效的优先级队列。优先级队列分为最大优先级队列和最小优先级队列,其中最大优先级队列的一个应用实在一台分时计算机上进行作业的调度。当用堆来实现优先级队列时,需要在队中的每个元素里存储对应的应用对象句柄(handle)。这里对象柄用数组下标表示,因为在堆操作中,堆元素会...
分类:
其他好文 时间:
2015-03-28 23:13:23
阅读次数:
184
堆排序利用的是堆这种数据结构来对进行排序,(二叉)堆数据结构是一种数组对象,它可以被视为一棵完全的二叉树,树的每个节点与数组中存放该节点的值得那个元素对应。这里使用最大堆进行排序算法设计,最大堆就是parent(i) > leftchild(i) 且parent(i) > rightchild(i)...
分类:
其他好文 时间:
2015-03-27 23:35:39
阅读次数:
220
对于堆排序,首先要先知道什么是堆数据结构,堆数据结构就是一个完全二叉树,但是它有自己的性质.
例如最大堆的性质为:A[PARENT[i]]>=A[i];即每一个结点的值大于等于其左右孩子的值,小于等于其父节点的值。我们在这里只讨论最大堆的情况。我们知道一颗完全二叉树对应一个最大堆的形式,我们要做的就是将二叉树转化为最大堆,这就是所谓的最大堆的维护,我们定义函数MaxheapFY(A,i)来进行操作...
分类:
编程语言 时间:
2015-03-20 11:04:21
阅读次数:
177