繁体   English   中英

关于加载因子的哈希表

[英]hash table about the load factor

我正在研究算法类的哈希表,我对负载因子感到困惑。 为什么负载因子n / m显着,'n'是元素数,'m'是表槽数? 另外,为什么这个加载因子等于n(j)的预期长度,当所有元素都存储在一个插槽中时,哈希表中插槽j的链表?

哈希表的关键属性是查找元素所需的预期时间 。*

为了实现这一点,哈希表的实现者必须确保对哈希表的每个查询都返回一些固定数量的步骤。

如果你有一个带有m桶的哈希表并且无限期地添加元素(即n>>m ),那么列表的大小也会增长,你无法保证预期的查找时间,但你宁愿得到线性时间(因为你需要遍历不断增加的链表的运行时间将超过桶的查找)。

那么,我们怎样才能实现列表不会增长? 那么,你必须确保列表的长度受一些固定常数的限制 - 我们如何做到这一点? 好吧,我们必须添加额外的桶。

如果哈希表得到很好的实现,那么用于将元素映射到桶的哈希函数应该将元素均匀地分布在桶中。 如果散列函数执行此操作,则列表的长度将大致相同。

如果元素均匀分布,其中一个列表有多长? 显然,我们将元素的总数除以桶的数量,即负载因子 n/m每个桶的元素数量=每个列表的预期/平均长度)。

因此,为了确保持续的时间查找,我们要做的是跟踪负载因子(再次:列表的预期长度),这样,当它超过固定常量时,我们可以添加额外的桶。

当然,还有更多问题,例如如何重新分配已存储的元素或添加多少桶。

要带走的重要信息是,需要加载因子来决定何时向哈希表添加额外的桶 - 这就是为什么它不仅“重要”而且至关重要


当然,如果将所有元素映射到同一个存储桶,那么每个列表的平均长度将不值得。 如果你在桶中均匀分布,所有这些东西才有意义。

*注意预期 - 我不能强调这一点。 它通常听到“哈希表有不断的查找时间”。 他们不! 最坏的情况总是O(n),你不能让它消失。

加上现有的答案,让我简单介绍一下。

考虑表中任意选择的桶。 X_i为指示符随机变量,如果第ith元素插入此元素则等于1 ,否则为0

我们想要找到E[X_1 + X_2 + ... + X_n].

通过期望的线性,这等于E[X_1] + E[X_2] + ... E[X_n]

现在我们需要找到E[X_i].的值E[X_i]. 通过预期值的定义,这简单地是(1/m) 1 + (1 - (1/m) 0) = 1/m 因此,总结所有i's值,我们得到1/m + 1/m + 1/m n次。 这等于n/m. 我们刚刚发现插入随机桶预期元素数量,这是负载因子。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM