堆排序与高速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法。学习堆排序前,先解说下什么是数据结构中的二叉堆。二叉堆的定义二叉堆是全然二叉树或者是近似全然二叉树。二叉堆满足二个特性:1.父结点的键值总是大于或等于(小于或等于)不论什么一个子节点的键值。2.每一个结点的左子树和右...
分类:
编程语言 时间:
2015-03-17 20:03:18
阅读次数:
152
定义:二叉堆是一颗被完全填满的二叉树,底层是从左到右填入。即完全二叉树。一棵高为h的完全二叉树有2^h到2^(h+1)-1个节点。这个还是很好证明的。由于完全二叉树很有规律,所以我们用数组而不是指针来表示它。对于任意位置i上的元素,左儿子位置为2i,右儿子(2i+1),父亲为[i/2](向下取整) ...
分类:
其他好文 时间:
2015-03-15 10:49:29
阅读次数:
159
左式堆(Leftist Heaps)又称作最左堆、左倾堆。左式堆作为堆的一种,保留了堆的一些属性。第1,左式堆仍然以二叉树的形式构建;第2,左式堆的任意结点的值比其子树任意结点值均小(最小堆的特性)。但和一般的二叉堆不同,左式堆不再是一棵完全二叉树(Complete tree),而且是一棵极不平衡的...
分类:
其他好文 时间:
2015-03-12 18:45:31
阅读次数:
151
堆排序的时间复杂度是,具有空间原址性,即任何时候都只需要常数个额外的元素空间存储临时数据。一、堆二叉堆是一个数组,可看成一个近似的完全二叉树,树上的每个结点对应数组中的一个元素。除了最底层外,该树是完全充满的,而且是从左到右填充。二叉堆可以分为两种形式:最大堆和最小堆。在最大堆中除根节点外所有结点i...
分类:
编程语言 时间:
2015-03-11 19:04:58
阅读次数:
172
堆排序与高速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法。学习堆排序前,先解说下什么是数据结构中的二叉堆。二叉堆的定义二叉堆是全然二叉树或者是近似全然二叉树。二叉堆满足二个特性:1.父结点的键值总是大于或等于(小于或等于)不论什么一个子节点的键值。2.每一个结点的左子树和右...
分类:
编程语言 时间:
2015-03-11 10:40:57
阅读次数:
127
树形结构是一类重要的非线性数据结构,其中以树和二叉树最为常用。二叉树是每个结点最多有两个子树的有序树。通常子树的根被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用作二叉查找树和二叉堆或是二叉排序树。二叉树的每个结点至多只有二棵子树(不存在度大于2的...
分类:
编程语言 时间:
2015-03-09 12:24:13
阅读次数:
175
二叉堆,是一个满二叉树,满足堆的性质。即父节点大于等于子节点(max heap)或者是父节点小于等于子节点(min heap)。二叉堆的如上性质常用于优先队列(priority queue)或是用于堆排序。
由于max heap 与min heap类似,下文只针对min heap进行讨论和实现。
如上图,是根据字母的ASCII码建立的最小堆。
我们用数组对满二叉树采用宽度优先遍历存储...
分类:
编程语言 时间:
2015-03-07 15:41:40
阅读次数:
178
二叉堆(以最小堆为例),其具有结构性质和堆序性质结构性质: 堆是一棵完全的二叉树,一颗高为h的完全二叉树有2^h到2^h-1个节点,高度为log N 而且该结构可以很容易的使用数组来表示:对于数组中任一位置i上的元素,其左儿子在位置2i上,右儿子在2i+1,其父节点在[x/2]处堆序性质:在一...
分类:
其他好文 时间:
2015-03-05 22:04:05
阅读次数:
178
题目:二维推箱子游戏,给你箱子、人和目标的位置,输出问题的解(推箱子和行走的路径)。
分析:搜索、优先队列。优先顺序为:首先保证推箱子的字数最少、然后是走的步数最少。
利用二叉堆做优先队列,在上面进行bfs即可。
说明:注意搜索时按照字典序方向枚举,不然会WA╮(╯▽╰)╭。
#include
#include
#include
#include
#incl...
分类:
其他好文 时间:
2015-03-03 23:46:42
阅读次数:
429
1. 二叉堆是完全二叉树,即它的N级子节点放慢之后才会去放N+1级子节点2. 二叉堆用数组实现,每个子节点通过固定的索引找到(由完全二叉树保证)3. 二叉堆排序只保证堆顶有效,即堆顶是最大值或最小值,是优先队列实现的不二选择4. 二叉堆删除节点,需要重新组织堆内结构,不太高效5. 二叉树,也叫二叉搜...
分类:
其他好文 时间:
2015-02-15 12:05:52
阅读次数:
141