2014.06.15 22:14简介: 堆是一种非常实用的数据结构,其中以二叉堆最为常用。二叉堆可以看作一棵完全二叉树,每个节点的键值都大于(小于)其子节点,但左右孩子之间不需要有序。我们关心的通常只有堆顶的元素,而整个堆则被封装起来,保存在一个数组中。图示: 下图是一个最大堆: 实现: 优...
分类:
编程语言 时间:
2014-06-16 13:16:58
阅读次数:
230
堆是什么?是一种特殊的完全二叉树,就像下面这棵树一样。
有没有发现这棵二叉树有一个特点,就是所有父结点都比子结点要小(注意:圆圈里面的数是值,圆圈上面的数是这个结点的编号,此规定仅适用于本节)。符合这样特点的完全二叉树我们称为最小堆。反之,如果所有父结点都比子结点要大,这样的完全二...
分类:
其他好文 时间:
2014-06-16 10:41:34
阅读次数:
335
堆排序(heapsort)是一种原地(in place)排序算法, 它的时间复杂度是O(nlgn). 堆数据结构不只是在堆排序中有用,它还可以构成一个有效的优先队列。堆数据结构是一种数组对象,它可以被视为一颗完全二叉树。如图: Aheap-size是放在A中堆的元素个数。根据数组节点的索引,我们.....
分类:
其他好文 时间:
2014-06-15 21:27:58
阅读次数:
239
堆是什么?是一种特殊的完全二叉树,就像下面这棵树一样。
有没有发现这棵二叉树有一个特点,就是所有父结点都比子结点要小(注意:圆圈里面的数是值,圆圈上面的数是这个结点的编号,此规定仅适用于本节)。符合这样特点的完全二叉树我们称为最小堆。反之,如果所有父结点都比子结点要大,这样的完全二叉树称为最大堆。那这一特性究竟有什么用呢?
假如有14个数分别是9...
分类:
其他好文 时间:
2014-06-15 08:03:16
阅读次数:
223
二叉查换树,左孩子小于等于根,右孩子大于根。完全二叉树,叶子都在最后一层,所有结点(除了叶子)都有两个孩子。平衡二叉树,左右子树的高度在一定范围内。4.1
Implement a function to check if a binary tree is balanced. For the purp...
分类:
其他好文 时间:
2014-06-12 08:09:04
阅读次数:
167
查找分为静态查找与动态查找一、静态查找1.顺序查找法平均的查找长度为(n+1)/22.折半查找法局限是数据必须是有序的。完全二叉树的高度为logn上取整。3.分块查找法查找第一阶段:每一块的查找利用折半查找法第二阶段:每一块内部的查找使用顺序查找法。二、动态查找B-树与B+树主要用于大规模数据的查找...
分类:
其他好文 时间:
2014-06-11 07:26:46
阅读次数:
239
二叉树
介绍二叉堆之前首先介绍二叉树。二叉树有一个根节点,节点下又有两个子节点。完全二叉树是指一个二叉树树除了最底层,其他层都是完全平衡的。
完全二叉树最基本的性质就是它的高度是 floor(lgN)。
二叉堆
二叉堆是完全二叉树的一种,每个节点对应一个数值,而且这个数值都大于等于它子节点的数值。
下图是一个...
分类:
其他好文 时间:
2014-06-10 06:14:42
阅读次数:
287
1、概述线段树,也叫区间树,是一个完全二叉树,它在各个节点保存一条线段(即“子数组”),因而常用于解决数列维护问题,基本能保证每个操作的复杂度为O(lgN)。线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。对于线段树中的每一个非叶子节点[a...
分类:
其他好文 时间:
2014-06-07 16:55:29
阅读次数:
307