看到一篇很好的博文,来自http://blog.csdn.net/morewindows/article/details/6709644下面是博文内容堆排序与快速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法。学习堆排序前,先讲解下什么是数据结构中的二叉堆。二叉堆的定义二叉堆...
分类:
其他好文 时间:
2014-09-10 19:19:10
阅读次数:
214
接上篇:A*寻路初探 GameDev.net 在A*寻路中使用二叉堆 作者:Patrick Lester(2003年4月11日更新) 译者:Panic 2005年3月28日 译者序: 这一篇文章,是“A* Pathfinding for Beginners.”,也就是我翻译的另一篇文章《A*寻路初探...
分类:
其他好文 时间:
2014-09-07 22:19:55
阅读次数:
255
堆排序与高速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法。学习堆排序前,先解说下什么是数据结构中的二叉堆。二叉堆的定义二叉堆是全然二叉树或者是近似全然二叉树。二叉堆满足二个特性:1.父结点的键值总是大于或等于(小于或等于)不论什么一个子节点的键值。2.每一个结点的左子树和右...
分类:
其他好文 时间:
2014-09-06 17:19:53
阅读次数:
210
这题利用二叉堆维持堆性质的办法来维持Young氏矩阵的性质,题目提示中写得很清楚,不过确实容易转不过弯来。a,b两问很简单。直接看c小问:按照Young氏矩阵的性质,最小值肯定在左上角取得,问题在于取出最小值后如何保持矩阵的性质。可以参照max_heapify中的做法,先取出最小值,然后将矩阵左上角...
分类:
其他好文 时间:
2014-08-31 18:25:21
阅读次数:
205
d叉堆的实现相对于二叉堆变化不大,首先看它如何用数组表示。考虑一个索引从1开始的数组,一个结点i最多可以有d个子结点,编号从id - (d - 2) 到 id + 1。从而可以知道一个结点i的父结点计算方法为: (i + d - 2) / d。第二个问题是 一个含有n个元素的d叉堆的高度,就是一个简...
分类:
其他好文 时间:
2014-08-31 11:49:51
阅读次数:
172
堆这个数据结构应用非常广泛,数字图像处理的算法里也见过。似乎记得以前老师上课说需要用树结构实现堆排序,看了一下算法导论才明白其精髓。堆虽然是一棵树,但显然没必要非得用树结构实现堆排序。堆排序的性质很好,算法时间复杂度为O(nlgn)。1. 堆排序的简要说明。二叉堆可以分为两种形式:最大堆和最小堆。在...
分类:
其他好文 时间:
2014-08-19 23:48:35
阅读次数:
325
PriorityQuenue
优先队列就是作业调度类的ADT,这里用二叉堆来实现。
优先队列最少有两个操作:插入(Insert)和删除最小者(DeleteMin)。
插入操作图解:
图片来源:www.educity.cn
删除操作图解:
图片来源:www.cfanz.cn
代码实现:
//
// main.cpp
// binaryHeap
//...
分类:
其他好文 时间:
2014-08-19 12:59:04
阅读次数:
323
在计算机科学中,树是一种重要的非线性数据结构,直观地看,它是数据元素(在树中称为结点)按分支关系组织起来的结构。二叉树是每个节点最多有两个子树的有序树。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用于实现二叉查找树和二叉堆。如下是实现.....
分类:
编程语言 时间:
2014-08-14 20:00:29
阅读次数:
220
Heap堆是常用的数据结构,Heap中也可以存放元素。但是STL中并没有提供Heap容器,只是提供了关于Heap操作的算法。...
分类:
其他好文 时间:
2014-08-14 14:11:58
阅读次数:
205
堆排序与高速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法。学习堆排序前,先解说下什么是数据结构中的二叉堆。二叉堆的定义二叉堆是全然二叉树或者是近似全然二叉树。二叉堆满足二个特性:1.父结点的键值总是大于或等于(小于或等于)不论什么一个子节点的键值。2.每一个结点的左子树和右...
分类:
其他好文 时间:
2014-08-12 16:28:54
阅读次数:
136