常见的堆实现为二叉堆(Binary Heap),其实际上是一颗二叉树(Binary Tree),并且是一颗完全二叉树(Complete Binary Tree)。当堆被实现为完全二叉树时,其高度为最小高度。如果堆中有 n 个节点,则最小高度为 Θ(lg n)。
分类:
其他好文 时间:
2014-09-17 20:17:52
阅读次数:
352
树是一种非线性的数据结构,树有根节点,子树等概念。
二叉树(Binary Tree):每个节点最多有两颗子树,并且子树有左右之分。
概念:树的深度,满二叉树,完全二叉树,树的节点树
二叉树包括顺序存储和链式存储,这里只说链式存储。二叉树的每个节点和双链表有些类似,但是树的结构要比双链表复杂,在构造树的过程中涉及到递归调用的问题,递归的问题往往是很复杂的问题,因此,这里单独说二叉树的构建。
...
分类:
其他好文 时间:
2014-09-15 19:36:19
阅读次数:
142
堆排序
堆,heap,是二叉树的一种。小根堆有这样的性质——任意一个结点的值比它的左右孩子都要小。
排序思想
将待排元素看作是完全二叉树,物理上用一维数组存储。
实现堆排序需要解决两个问题:
1.如何将杂乱的完全二叉树初始化为一个堆?
答:从最后一个非叶结点起,将该节点当做根,自上而下进行调整,使之成为一个堆。然后依次对倒数第二个、倒数第三个、直至正数第一个结点进行此操作。
2.输出...
分类:
其他好文 时间:
2014-09-09 12:59:48
阅读次数:
165
堆的定义如下:n个元素的序列{k0,k1,...,ki,…,k(n-1)}当且仅当满足下关系时,称之为堆。"ki=k(2i),ki>=k(2i+1).(i=1,2,…,[n/2])"若将和此次序列对应的一维数组(即以一维数组作此序列的存储结构)看成是一个完全二叉树,若完全二叉树中每一个节点的值都大于...
分类:
其他好文 时间:
2014-09-05 19:44:31
阅读次数:
277
堆可用于实现优先队列。 堆有两个性质:结构性和堆序性。 堆的结构性: 堆是一棵被完全填满的二叉树,有可能的例外是在底层,底层上的元素从左到右填入。这样的树称为完全二叉树。 一棵高为h的完全二叉树有2^h~2^(h+1)-1个节点。这意味着,完全二叉树的高是logN下取整。 完全二叉树很有规律,可用一...
分类:
其他好文 时间:
2014-09-04 22:12:40
阅读次数:
241
本章节主要证明对包含n个元素的输入序列来说,任何比较排序在最坏情况下都要经过omega(nlgn)次比较。从而证明归并排序和堆排序是渐近最优的。同时,介绍了三种线性时间复杂度的排序算法:计数排序、基数排序和桶排序。1. 排序算法的下界在确定排序算法的下界时,借助决策树模型。决策树模型是一棵完全二叉树...
分类:
其他好文 时间:
2014-08-29 18:01:18
阅读次数:
239
1、 线段树是二叉树,且必定是平衡二叉树,但不一定是完全二叉树。2、 对于区间[a,b],令mid=(a+b)/2,则其左子树为[a,mid],右子树为[mid+1,b],当a==b时,该区间为线段树的叶子,无需继续往下划分。3、 线段树虽然不是完全二叉树,但是可以用完全二叉树的方式去构造并存储它,...
分类:
其他好文 时间:
2014-08-28 11:14:29
阅读次数:
194
题意:有一棵完全二叉树,每层元素有同一变量表示,从上到下分别为x1,x2,... 最后一层叶子结点会有0或1的赋值,输入给出。然后如果xi取值为0时,则往左子树走,否则往右子树走,直到走到叶子结点,得到一值。
思路:因为是完全二叉树,可以用顺序存储,数组实现即可。另外也只需存叶子结点的值就行了。对一结点k来说,左孩子是2k,右孩子是2k+1。因为高度最大为7,最多有x7,所以可以直接取数组的第二...
分类:
其他好文 时间:
2014-08-27 22:06:38
阅读次数:
261