虽然堆排序算法是一个很漂亮的算法,但是在实际中,快排序的一个好的实现往往优于堆排序。尽管这样堆数据结构还有很大的用处,例如优先级队列。

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

相关文章:

  • 2021-08-27
  • 2022-12-23
  • 2022-12-23
  • 2021-07-22
  • 2021-10-07
  • 2021-09-16
猜你喜欢
  • 2021-07-19
  • 2022-02-18
  • 2022-01-07
  • 2022-12-23
  • 2021-12-31
  • 2021-10-01
  • 2021-08-16
相关资源
相似解决方案