堆与堆排序 一、什么是堆 堆其实是一颗完全二叉树,除了树的最后一层不是满的,其他层从左到右都是满的。堆中除叶子节点外每个节点的关键字都大于等于(或小于等于)他的左右孩子的关键字,其中节点的关键字都大于等于左右孩子的关键字的堆称之为“大顶堆”或“最大化堆”,如下图a;节点的关键字都小于等于左右孩子的关 ...
分类:
编程语言 时间:
2017-03-30 17:16:15
阅读次数:
255
一、描述: 二、思路: 完全二叉树; 对于整棵二叉树,从根结点出发,一直沿左下方向遍历树的深度是l,一直沿右下方向遍历的深度是r;则有两种情况: 1、l == r,左右深度相等,一定是完全二叉树,即满二叉树,结点个数为(2^l-1)或(2^r-1); 2、l != r,只有一种情况:在二叉树的倒数第 ...
分类:
其他好文 时间:
2017-03-27 15:35:48
阅读次数:
176
欢迎探讨,如有错误敬请指正 如需转载,请注明出处 http://www.cnblogs.com/nullzx/ 1. 优先队列与索引优先队列 优先队列的原理大家应该比较熟悉,本质上就是利用完全二叉树的结构实现以log2n的时间复杂度删除队列中的最小对象(这里以小堆顶为例)。完全二叉树又可以通过数组下 ...
分类:
其他好文 时间:
2017-03-27 00:46:11
阅读次数:
293
学习了树的知识,简单的做了记录,只是基本的罗列和实现。 二叉树是树的一种特殊形式,每个节点都有左右两棵子树。有关基本的概念:度,高度(深度),还有满二叉树(特殊的完全二叉树),完全二叉树。 1.对于二叉树的数据存储结构:有顺序存储和链式存储。 顺序存储更适合完全二叉树,否则浪费存储空间。所以链式存储 ...
分类:
编程语言 时间:
2017-03-26 17:10:14
阅读次数:
214
转载请注明原文地址: 一:满二叉树 除了叶子结点无任何子节点外,每一层的结点都有两个子节点。也就是说:一棵满二叉树是一个完整的三角形 △ 结构。 满二叉树的性质:若满二叉树的层数为L,结点数为N,则: N=2^L-1。(结点数为 2的层数次方 减一) 二:完全二叉树 完全二叉树:1:一棵树,除了叶子 ...
分类:
其他好文 时间:
2017-03-24 15:30:45
阅读次数:
169
算法,是系统软件开发,甚至是搞软件的技术人士的核心竞争力,这一点,我坚信不疑。践行算法实践,已经有一段时间没有practise了,今天来一个相对麻烦点的,堆排序。 1. 什么是堆(Heap) 这里说的堆,是一种数据结构,不是指计算机系统中的存储类型。堆是一种完全二叉树。说到完全二叉树,估计很多人都会 ...
分类:
编程语言 时间:
2017-03-23 12:43:13
阅读次数:
274
堆排序是排序的一种,一般有大根对和小根堆之说,大根对,根节点的值比左右子树的根节点的值要大。建堆我们一般是一个完全二叉树。堆排序一般面向数据量比较大的时候,数据量比较小的时候,不适合使用堆排序,比如有种情况就是topN算法的实现,一般都是借助于一个大根对来实现,扫描海量数据,把海量数据中的把最大的前 ...
分类:
编程语言 时间:
2017-03-19 17:38:34
阅读次数:
203
堆排序是利用堆的性质进行的一种选择排序。下面先讨论一下堆。 1.堆 堆实际上是一棵完全二叉树,其任何一非叶节点满足性质: Key[i]<=key[2i+1]&&Key[i]<=key[2i+2]或者Key[i]>=Key[2i+1]&&key>=key[2i+2] 即任何一非叶节点的关键字不大于或者 ...
分类:
其他好文 时间:
2017-03-18 17:26:41
阅读次数:
170
转自:PriorityQueue 本文github地址 Java中PriorityQueue通过二叉小顶堆实现,可以用一棵完全二叉树表示。本文从Queue接口函数出发,结合生动的图解,深入浅出地 分析PriorityQueue每个操作的具体过程和时间复杂度,将让读者建立对PriorityQueue建 ...
分类:
其他好文 时间:
2017-03-17 19:04:24
阅读次数:
270
1.双链表SplDoublyLinkedList 结构如图: 类定义: 测试代码: 2.栈SplStack 结构: 栈继承了双向链表的所有方法 3.队列SplQueue 结构图: 继承了双向链表所有方法 另添加了两个方法 4.堆SplHeap 堆是完全二叉树,且节点值比左右孩子的值大(大顶堆)或者比 ...
分类:
Web程序 时间:
2017-03-13 00:08:42
阅读次数:
244