你何时会重新连接一个链表?

时间:2017-12-16 20:45:18

标签: data-structures hashmap hashtable chaining

当在链接哈希表中插入时,你什么时候重新编写?当alpha = 1时重新散列会更好吗? (alpha =存储的元素数/散列表的大小)

1 个答案:

答案 0 :(得分:1)

使用链接时,您通常希望在任何存储桶包含超过一定数量的项目时调整大小。例如,您可能认为存储桶最多可包含5个项目。第一次将第六个项目插入到存储桶中时,可以重新调整表格的大小。

或者,您可能会认为理想数字是10或3.由您决定如何平衡检索性能和调整大小时间。您的存储桶大小越小,平均查找速度就越快,但您必须更频繁地调整表的大小。使用更大的桶大小,您不必经常调整大小,但平均查找时间会更长。

铲斗大小为10的最差情况查找时间将比铲斗大小为2慢5倍。但它仍然比列表的顺序扫描快得多,并且您可以减少5倍在你必须重新哈希的次数。您应该为您的应用试验最佳铲斗尺寸。

使用较大的存储桶大小,您可以采取的一件事是,在查找时,移动刚刚引用其列表中列表头部的项目。这里的理论是,有些项目比其他项目更频繁地查找,所以如果你总是将最近引用的项目移动到列表的头部,那么你更有可能更快地找到它。如果统一引用项目,则此优化不会有任何好处。

通过链接,您可以经常获得150%或200%的负载因子的良好性能;有时甚至更高。与重新散列形成对比,重新散列在负载系数或70%或75%时开始快速降级。