堆排序
堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。可以利用数组的特点快速定位指定索引的元素。
堆分为大根堆和小根堆,是完全二叉树。大根堆的要求是每个节点的值都不大于其父节点的值,即A[PARENT[i]]
>= A[i]。在数组的非降序排序中,需要使用的就是大根堆,因为根据大根堆的要求可知,最大的值一定在堆顶。
维护堆的性质
M...
分类:
其他好文 时间:
2015-04-17 11:37:45
阅读次数:
138
排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。可以利用数组的特点快速定位指定索引的元素。堆分为大根堆和小根堆,是完全二叉树。大根堆的要求是每个节点的值都不大于其父节点的值,即A[PARENT[i]] >= A[i]。在数组的非降序排序中,需要使用的...
分类:
编程语言 时间:
2015-04-16 21:15:41
阅读次数:
124
由于前一篇写的有点匆忙很多地方不是很简单,这一片再描述一些概念和细节。 首先,我们都知道在数据库中的存储分为两种结构,一是堆;二是B树。堆的数据是没有排序也就没有结构性可言,我们可以简单理解为没有索引的表数据就是以堆的形式存在的。与之相对的,索引都是B树的形式存储,这样的话索引中数据是有序排列的。....
分类:
其他好文 时间:
2015-04-03 01:25:04
阅读次数:
134
对于堆排序,首先要先知道什么是堆数据结构,堆数据结构就是一个完全二叉树,但是它有自己的性质.
例如最大堆的性质为:A[PARENT[i]]>=A[i];即每一个结点的值大于等于其左右孩子的值,小于等于其父节点的值。我们在这里只讨论最大堆的情况。我们知道一颗完全二叉树对应一个最大堆的形式,我们要做的就是将二叉树转化为最大堆,这就是所谓的最大堆的维护,我们定义函数MaxheapFY(A,i)来进行操作...
分类:
编程语言 时间:
2015-03-20 11:04:21
阅读次数:
177
题目链接:http://hihocoder.com/problemset/problem/1109,最小生成树 + 堆优化(优先队列)。 可以用优先队列,也可以自己手动模拟堆,为了练手,我两种都试了下,优先队列还是要方便一点,不过堆要快一点。 好好学算法,没有无缘无故的爱,也没有无缘无故减少...
分类:
编程语言 时间:
2015-03-06 00:55:32
阅读次数:
249
平衡树treap:(1)树+堆。具体是随机某个节点的值,然后维护这个值满足堆的性质。(2)代码实现sbt:(1)陈大神的节点大小平衡树,其实就是根据四种情况进行调整,而这四种情况也是其他bst会使用的调整方式。中心思想就是当节点信息变时,用maintain调整(2)代码实现procedure mai...
分类:
其他好文 时间:
2015-02-13 22:26:01
阅读次数:
181
本文记录常用的数据结构,介绍它们的基本结构、使用细节、常见用途和关联的常用算法。仅包含思想,不涉及具体实现。1:常用数据结构有:堆,栈,队列,链表,散列表,二叉树,红黑树。2:堆。3:栈4:队列。5:链表。6:散列表。7:二叉树。8:红黑树。
分类:
其他好文 时间:
2015-02-08 15:18:35
阅读次数:
142
随机构建的二叉查找树的高度期望值为O(lgn),并不代表所有的二叉查找树的高度都为O(lgn)。但是对于有些二叉查找树的变形来说,动态集合各基本操作的性能却总是很好的,如红黑树、B树、平衡二叉树(AVL树)、跳跃表(确切的说不是树,或多或少有树的结构)、treaps(树堆)等。这里我们讲解红黑树。
平衡的意思就是完成动态数据集的操作(minimum、maximum、search、p...
分类:
编程语言 时间:
2015-02-03 23:03:09
阅读次数:
293
完全二叉树 首先让我们回顾一下完全二叉树的两个性质: 性质1:具有n个结点的完全二叉树的深度为[logn](向下取整)+1。 性质2:若对含 n 个结点的完全二叉树从上到下且从左至右进行 1 至 n 的编号,则对完全二叉树中任意一个编号为 i 的结点: (1) 若 i=1,则该结点是二叉树的根,无双亲,否则,编号为 [i/2](向下取整)的结点为其双亲结点; (2) 若 2i>n,...
分类:
编程语言 时间:
2015-01-13 21:40:06
阅读次数:
221
题目大意:给出一些音符,将它们组成和旋。和旋只能由[l,r]个音符组成。优美程度为所有音符的和。求k个和旋的又优美程度的最大和。
思路:先处理出来前缀和,以便O(1)去除一段的和。然后考虑对于一个音符来说,向左边扩展的音符是一段长度为r - l + 1的区间,取出的最大和是sum[i] - sum[p],sum[i]是一定的,要想让整段和最大,需要让sum[p]最小。之后就是区间k小值和...
分类:
其他好文 时间:
2014-12-12 19:16:03
阅读次数:
167