繁体   English   中英

数据结构问题:在 hash 映射的链式实现中,列表的大小与其加载因子之间是否存在联系?

[英]Data Structure Question: Is there a link between the size of a list in a chaining implementation of hash maps and its load factor?

例如,如果我在 hash map 中有 n 个键和 m 个槽,则从槽开始的链表的平均大小为 n/m。 我这样想对吗? 同样,我说的是平均数。 提前致谢!

我正在尝试学习数据结构。

正如您所说,单个列表的平均大小通常是表的负载因子; 但这是假设“简单统一哈希假设”适用于您的 hash 表(更具体地说,它具有 hash 函数和预期的输入键):简单地说,我们假设 hash function 将元素均匀分布到桶中,如以及彼此独立。

稍微扩展一下,换句话说:
我们假设如果我们随机选择一个新项目(想象从表征我们输入的概率分布中抽取一个项目),那么我们最终得到的项目将被映射到 m 个桶中的任何一个的机会均等。 (机会为 1/m。)
此外,考虑到任何桶中任何其他元素的存在(或不存在),此概率不受影响。
这是有帮助的,因为从这里我们可以得出结论,无论任何其他情况如何,一个项目被分类到给定桶中的概率总是 1/m; 由此直接得出,单个存储桶列表的预期(平均)长度将为 n/m(我们将 n 个元素插入表中,并且对于每个元素,以 1/m 的概率将其排序到此给定列表中) .

为了看出这一点很重要,我们可以想象一个它不成立的情况:例如,如果我们面临某种“攻击”并且我们的输入被设计为将所有 hash 放入同一个桶中,或者甚至只是很有可能。 在这种情况下,SUHA 不再成立,显然您询问的列表长度和负载因子之间的联系也不成立。

这是为您的用例选择一个好的 hash function 很重要的部分原因:没有它,假设可能不成立,这可能会对您的查找时间产生有害影响。

暂无
暂无

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

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