一、最大堆的插入 图9-3a 给出了一个具有5个元素的最大堆。由于堆是完全二叉树,当加入一个元素形成6元素堆时,其结构必如9-3b 所示。如果插入元素的值为1,则插入后该元素成为2的左孩子,相反,若新元素的值为5,则该元素不能成为2的左孩子(否则将改变最大树的特性),应把2下移为左孩子(如图9 - ... ...
分类:
编程语言 时间:
2016-05-18 21:48:01
阅读次数:
421
【大顶堆的性质】大顶堆是一棵完全二叉树,且树中的每个节点的值都不小于它的孩子节点的值。我们可以用一个heap数组来表示它。【大顶堆的插入、删除】
大顶堆的插入:首先初始化插入位置为最后,然后从下往上调整堆(调整插入元素的位置)。在调整过程中,若当前节点的父亲节点小于插入元素,则将其父亲节点的值赋给当前节点,父亲节点作为当前节点,依此继续;否则当前节点即为插入位置。
大顶堆的删除:删除根,初始化最后一...
分类:
编程语言 时间:
2015-07-14 17:58:44
阅读次数:
330
这题思路也很简单,就是用一个最大堆堆去维护Prim算法中的Low数组,把刷新Low数组的操作,变成了刷新堆的操作,由于堆的插入操作位logn,查询时间为常数,因此在边稀疏的情况下,其复杂度与Kruscal接近。这题刚开始老是WA,想了很久,不知道错在哪里,后来发现时因此不能直接去堆中的最小路径,因为...
分类:
编程语言 时间:
2015-04-13 00:10:33
阅读次数:
190
1,堆排序概念点击打开链接点击打开链接堆排序与快速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法一般都用数组来表示堆,i结点的父结点下标就为(i – 1) / 2。它的左右子结点下标分别为2 * i + 1和2 * i + 2。如第0个结点左右子结点下标分别为1和2堆的插入与...
分类:
编程语言 时间:
2015-01-20 22:04:05
阅读次数:
170
堆是一种非常有用的数据结构,下面的C#以插入数据的方式创建最大堆,然后实现了堆的插入和删除操作。...
分类:
其他好文 时间:
2014-09-16 14:19:00
阅读次数:
127
rebalance a heap⑴最大堆的插入 由于需要维持完全二叉树的形态,需要先将要插入的结点x放在最底层的最右边,插入后满 足完全二叉树的特点; 然后把x依次向上调整到合适位置满足堆的性质,例如下图中插入80,先将80放在最后,然后两次上浮到合适位置. 时间:O(logn)。 “结点上浮”程序...
分类:
其他好文 时间:
2014-08-25 14:57:04
阅读次数:
198
1. 堆堆:n个元素序列{k1,k2,...,ki,...,kn},当且仅当满足下列关系时称之为堆:(ki = k2i,ki >= k2i+1), (i = 1,2,3,4,...,n/2)若将和此次序列对应的一维数组(即以一维数组作此序列的存储结构)看成是一个完全二叉树,则堆的含义表明,完全二叉树...
分类:
其他好文 时间:
2014-08-11 17:05:42
阅读次数:
253