我应该使用二进制堆吗?

时间:2013-08-26 13:38:08

标签: c# linked-list nodes binary-heap

跟进问题:https://codereview.stackexchange.com/questions/30243/how-can-i-improve-upon-my-a-pathfinding-code/

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

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

我听说过LinkedList - 好主意?

2 个答案:

答案 0 :(得分:3)

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

建议离开网站资源的问题不是主题btw。简单算法和数据结构的标准打印源是Introduction to Algorithms。但是现在维基百科也是伪代码的良好来源。 (注意Wikipedia article shows how to build a max heap;你需要一个最小堆。在给出最大堆的代码的情况下弄清楚如何构建一个最小堆是一个很好的练习。)

A*

This article also gives some good advice on use of binary heaps

答案 1 :(得分:0)

LinkedList是一个坏主意,特别是对于排序。如果您不想使用OrderedBag

,请尝试使用SortedDictionary