【发布时间】:2013-09-25 08:41:07
【问题描述】:
根据我对 Haskell 的有限了解,Maps(来自 Data.Map)似乎应该像其他语言中的字典或哈希表一样使用,但被实现为自平衡二叉搜索树。
这是为什么?使用二叉树将查找时间减少到 O(log(n)),而不是 O(1),并且要求元素在 Ord 中。当然有充分的理由,那么使用二叉树有什么好处呢?
还有:
在哪些应用程序中二叉树会比哈希表更糟糕?反过来呢?是否有很多情况下,其中一种会比另一种更可取? Haskell 中有传统的哈希表吗?
【问题讨论】:
-
仅供参考,虽然传统哈希表存在答案中描述的问题,但存在本质上相似并提供相似时间复杂度的持久数据结构:哈希数组映射尝试,在 Clojure 等中使用。
-
"相对于 O(1)" 仅在一般情况下。在最坏的情况下,哈希表查找是 O(n)。
-
仅在没有开放寻址的哈希表中实现。最坏的情况(这将导致 O(n) 查找时间)在开放寻址中非常不可能,几乎不值得考虑。
-
@newacct 对于布谷鸟哈希,查找是最坏情况的 O(1) 时间。
-
@delnan:当然,为此,插入的最坏情况时间很糟糕。
标签: algorithm haskell data-structures hashtable binary-search-tree