0

来自以下问题的后续问题:https ://codereview.stackexchange.com/questions/30243/how-can-i-improve-upon-my-a-pathfinding-code/

摘要: 我请求帮助改进我的寻路代码 (A*)。一位用户很快发现我正在对特定的节点列表进行很多排序,并且使用 IComparible 来这样做 - 显然效率很低。他建议使用 OrderedBag,但是,我必须自己编写所有代码,并且不能使用来自互联网的代码。

问题:那么,使二进制堆成为维护有序数据的最有效方式,同时仍然能够快速添加和删除数据。如果是这样,是否有人有任何链接指向我创建一个的正确方向,以及创建哪个?

我听说过 LinkedList - 好主意吗?

4

2 回答 2

3

如果您将自己的滚动作为练习,那么是的,堆是构建有效优先级队列的正确数据结构。从二进制堆开始,因为它相当容易。如果您有时间和意愿,您可以稍后再尝试更复杂的堆。

推荐场外资源的问题是题外话。简单算法和数据结构的标准打印源是Introduction to Algorithms。但是现在维基百科也是伪代码的好来源。(请注意,Wikipedia 文章显示了如何构建最大堆;您需要一个最小堆。在给出最大堆代码的情况下弄清楚如何构建最小堆是一个很好的练习。)

本文还提供了一些关于使用二进制堆的好建议A*

于 2013-08-26T14:11:31.333 回答
0

LinkedList 是个坏主意,尤其是对于排序。如果您不想使用 OrderedBag,请尝试使用 SortedDictionary

于 2013-08-26T13:53:16.040 回答