【发布时间】:2016-04-12 20:51:46
【问题描述】:
我正在尝试编写一个利用哈希的函数(用于 A* 的实现)。
经过一番研究,我发现事实上的标准是Data.Map。
但是,在阅读API文档时,我发现:O(log n). Find the value at a key.
https://downloads.haskell.org/~ghc/6.12.2/docs/html/libraries/containers-0.3.0.0/Data-Map.html
事实上,文档通常表明大 O 倍显着低于标准哈希的 O(1)。
然后我找到了Data.HashTable。
https://hackage.haskell.org/package/base-4.2.0.2/docs/Data-HashTable.html
这个文档没有直接提到大 O,让我相信它可能符合我的期望。
我有几个问题:
1)这是正确的吗?是 O(lookupInDataHashTable) = O(1) 吗?
2) 鉴于Data.Map 效率低下,我为什么要使用它?
3) 是否有更好的库满足我的数据结构需求?
【问题讨论】:
-
在实践中,您应该对 O(1) 与 O(log n) 算法进行基准测试(前者可能有更大的常数),
Data.Map或Data.IntMap可能是一个不错的选择。如果您希望Data.HashTable检查hackage.haskell.org/package/hashtables 通常我认为最重要的是最终的内存使用情况。
标签: haskell data-structures hashtable time-complexity