繁体   English   中英

“分配hash函数”是什么意思?

[英]What does "distribution of the hash function" mean?

在阅读有关 Object.GetHashCode 方法的 MSDN 文档时,我遇到了像 hash function 这样的短语应该在 hash 表中提供随机或有用的分布。 对于 hash function 或 hash 表,此分布意味着什么?

hash function 产生一个 32 位 integer 用于“平衡”hash 表。 假设你的表有一百个“桶”,你根据 hash function 的后两位小数将表中的项目放入一个桶中。

现在假设 hash function总是产生 100 的偶数倍数 每个项目都将 go 放入同一个桶中,而 hash 表将是不平衡的。 那将是一个糟糕的 hash function。

一个好的 hash 算法会产生大致均匀的分布,无论您有多少个桶也无论您如何从 hash 中提取桶号

对于 hash 到 function 具有最大功效的表,hash 的值应尽可能唯一以防止冲突。 例如,让我们考虑一个非常简单的 hash function:假设您的对象是名字和姓氏,对于 hash 值,您选择首字母。 所以 Ginger Rodgers 的 hash 值为 GR,Fred Astaire 的 hash 值为 FA。 到目前为止一切顺利,但是当 Frank Allen 的 FA 值为 hash 时会发生什么? 现在 Fred Astaire 和 Frank Allen 发生了冲突,hash 表实现必须将此作为特殊情况处理,这会降低效率。

最好的 hash 函数采用输入空间 (Fred Astaire),并产生一个(理想情况下)输入空间唯一的随机值。 只要 hash 的大小小于数据的大小,就无法完全避免冲突,但应通过谨慎选择 hash 算法将冲突降至最低。

正如下面 Eric 所指出的,平衡 hash 表的 hash 算法必须非常快,因此您必须在速度和冲突之间取得平衡。 您可以研究 SHA-1 (http://en.wikipedia.org/wiki/SHA-1) 等加密算法 hash 以了解生成唯一哈希的复杂性,但用于平衡 hash 表的 hash 算法需要尽可能快.

暂无
暂无

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

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