哈希表v自我平衡搜索树

Vai*_*pai 15 hashtable red-black-tree

我很想知道使用自平衡树技术来存储项目的原因是什么,而不是使用哈希表.

我看到哈希表不能维护插入顺序,但我总是可以在顶部使用链表来存储插入顺序序列.

我看到,对于少量的值,哈希函数会增加成本,但我总是可以将哈希函数与密钥一起保存,以便更快地查找.

我知道散列表很难实现,而不是红黑树的直接实现,但在实际实现中,人们是否愿意为麻烦付出更多努力?

我看到使用哈希表发生冲突是正常的,但是使用双重哈希等开放寻址技术可以将密钥保存在哈希表本身中,并没有将问题减少到不倾向于使用优惠的效果对于这种实施,红黑树?

我很好奇,如果我严格地缺少哈希表的缺点,仍然使红黑树在实际应用(如文件系统等)中非常可行的数据结构.

unb*_*eli 17

这是我能想到的:

  1. 有些种类的数据不能被散列(或者散列太贵),因此不能存储在散列表中.
  2. 树以您需要(排序)的顺序保存数据,而不是按顺序排列.即使您通过它运行链表,也无法(有效地)使用哈希表执行此操作.
  3. 树木具有更好的最坏情况

  • @Jake 1-通过比较元素.订购某些东西并不意味着你可以散列一些东西.2-因为.3-没有什么可以在树上碰撞. (3认同)
  • 1-不正确。3-关于键的说法不正确:搜索树不需要任何键。如果插入的条目等于现有条目,则不会影响性能,这与哈希冲突相反。了解原因是您的功课。 (2认同)

Odr*_*ade 5

存储分配是另一个考虑因素 每次在散列表中填充所有桶时,都需要分配新存储并重新散列所有内容.如果您提前知道数据的大小,则可以避免这种情况.另一方面,平衡树根本不会受到这个问题的影响.

  • 在大多数情况下,可能不会。在实时应用程序中,是的。 (3认同)