【发布时间】:2011-12-02 07:28:10
【问题描述】:
在标题中提到的那些中,有人可以解释一下我应该如何决定是使用一个堆实现还是另一个堆实现?
我想要一个答案来指导我根据问题选择有关结构性能的实现。现在,我正在做一个优先级队列,但我不仅想知道最适合这种情况的实现,还想知道允许我在任何其他情况下选择实现的基础......
要考虑的另一件事是我这次使用的是 haskell,所以,如果您知道任何技巧或可以改进这种语言的实现的东西,请告诉我!但是和以前一样,也欢迎使用其他语言的cmets!
谢谢!如果问题太基本,对不起,但我根本不熟悉堆。这是我第一次面临实施一个任务...
再次感谢!
【问题讨论】:
-
呃,如果这是您第一次实现堆,请先使用二进制堆编写一个版本。只要让它足够抽象,这样如果你真的必须的话,你可以用别的东西来代替它。二项堆和斐波那契堆比二元堆复杂得多,可能不值得努力(当然,除非你只是想了解它们)。
-
我最喜欢 Leonardo heaps。它们出现在 Dijkstras Smoothsort 中。
-
全部实现并使用您的应用程序对它们进行基准测试。
-
查看this 文章。它列出了不同的时间。您会发现二进制堆也满足您的约束。由于二叉堆更简单、更优雅,我建议使用它,即使其他堆可能有更好的性能。
标签: performance haskell fibonacci binary-heap binomial-heap