虽然堆排序算法是一个很漂亮的算法,但是在实际中,快排序的一个好的实现往往优于堆排序。尽管这样堆数据结构还有很大的用处,例如优先级队列。
3.1 最小堆
下面的程序就是按照《算法导论》最小堆的优先级队列的实现,修改几个小于号(大于号)可以轻易地将最小堆变成最大堆。
最小堆的一个用法实例是在Huffman编码中。
3.1.1 最小堆的优先级队列程序
3.2 最小堆实现优先队列
由于队列是不断地增删的,所以使用堆来实现优先队列是非常自然而令人愉快的事情。
3.2.1 实例
PKU JudgeOnline, 2312, Battle City.
3.2.2 问题描述
坦克大战中,一辆坦克可以在1步内走到一个没有东西的相邻位置。也可以在1步内打碎泥巴墙,但是不能打破铁墙,也不能过河。试问坦克从出发点到目的地的最少步数。
3.2.3 输入
34
YBEB
EERE
SSTE
00
3.2.4 输出
8
3.2.5 分析
这里很容易想到DFS算法。用DFS需要使用一个队列,该队列是标准的先进先出。但是这个题目的队列取要用优先级队列。优先级的级别和坦克初始出发点到该位置的距离成反比。故此优先队列可以用关于距离的最小堆来实现。
这里用到的方法实际上是代价一致搜索。
1.2.6 程序
1.3 实例
PKU JudgeOnline, 2312, Battle City.
本文章欢迎转载,请保留原始博客链接http://blog.csdn.net/fsdev/article