【发布时间】:2017-11-23 03:01:57
【问题描述】:
这是《破解哈希表编码面试》中颇有争议的一句话。
哈希表的另一个常见实现(除了链表)是使用 BST 作为底层数据结构。
我知道以前有人问过这个问题……这太令人困惑了,因为每个人都给出了两个不同的答案。例如
Why implement a Hashtable with a Binary Search Tree?
这篇文章中投票率最高的答案是上面引用的声明是在谈论使用二叉搜索树的哈希表实现,没有底层数组。我了解到,由于插入的每个元素都有一个哈希值(一个整数),因此这些元素形成了一个总顺序(每一对都可以与 进行比较)。因此,我们可以简单地使用二叉搜索树来保存哈希表的元素。
另一方面,别人说
Hash table - implementing with Binary Search Tree
这本书说我们应该用二叉搜索树来处理冲突。所以有一个底层数组,当多个元素获得相同的哈希值并被放置在数组的同一个槽中时发生冲突时,这就是 BST 的用武之地。
所以数组中的每个槽都是一个指向 BST 的指针,它保存具有相同哈希值的元素。
我倾向于第二篇文章的论点,因为第一篇文章并没有真正解释哈希表的这种实现如何处理冲突。而且我认为它无法达到预期的 O(1) 插入/删除/查找时间。
但是对于第二篇文章,如果我们有多个元素获得相同的哈希值并放置在 BST 中,我不确定这些元素是如何排序的(如何相互比较?)
请帮我彻底解决这个问题!
【问题讨论】:
标签: hash hashtable binary-search-tree