我对哈希表的了解有限,我目前正在学习它。我有一个关于哈希冲突解决的问题,通过开放散列或单独的链散列。
据我所知,在这种情况下,哈希桶包含指向链表的指针,其中映射到同一键的所有元素都被链接。所以搜索复杂度将是o(n)的顺序,其中n是链表中元素的数量。有没有办法让这更简单?
此外,如果对链表的大小有限制,说它最多只能容纳5个元素,如果超过5个元素散列到同一个存储桶中,那么处理这种情况的最佳方法是什么?
任何有关上述内容以及任何帮助的更多信息的指示都将不胜感激。
答案 0 :(得分:1)
散列冲突不应该太常见,否则你做错了(例如糟糕的散列函数或者没有足够大的散列表)。因此,每个链表中的元素数量应该是最小的,并且O(n)的复杂度不应该太差。
理论上,您可以将其替换为许多其他数据结构之一。例如,二叉搜索树将获得O(log n)搜索时间(假设项目具有可比性),但插入时间将最多为O(log n)而不是O(1),并且需要更多空间。
列表中的元素数量应该没有最大值。如果有的话,你可能会求助于探测(例如线性探测),但是删除可能是一场噩梦,因为你可能需要将元素移动很多。