【发布时间】:2011-12-15 05:50:30
【问题描述】:
我正在编写执行很多表查找的程序。因此,当我偶然发现Data.Map(当然)以及Data.HashMap 和Data.Hashtable 时,我正在仔细阅读Haskell 文档。我不是散列算法方面的专家,在检查了软件包之后,它们看起来都非常相似。因此我想知道:
1:主要区别是什么?
2:在对约 4000 个键值对的映射/表进行大量查找时,哪个性能最高?
【问题讨论】:
-
您可能还对this blog post 感兴趣。它展示了许多有趣的数字,并比较了 Haskell 中哈希表的不同方法。该帖子得出的最终结论是,您需要杂质才能使正确的哈希表快速工作。
-
@JeremyW.Sherman SO 上的人们经常可以提供您自己无法发现的见解。例如,图书馆的作者或熟悉的人可能会偶然发现这个问题并解释晦涩的配置选项,或调整某些东西的方法。此外,有人可以推荐第四个选项
SuperHashMap。最后,以后我这个职位的其他人可以看到这个问题并从中学习。 -
一般来说,不要通过模块名来识别代码。在 Haskell 宇宙中,模块名称发生冲突。例如,当您说
Data.HashMap时,我猜您是在谈论hashmap包,它的性能比我建议您使用的unordered-containersHashMap 实现更差。 -
@FUZxxl 谢谢你的链接。结合@mergeconflict 的回答,我说服了我尝试
hashtables包中的布谷鸟实现。另外,谢谢@ThomasM.DuBuisson,我还是 Haskell 的新手,需要这样的提示! -
@ThomasM.DuBuisson 并不是
unordered-containers在所有方面都比hashmap快。我使用前者的HashMap和后者的HashSet以在我的特定应用程序中获得最佳性能。