什么是“;散列函数的分布“;意思是

本文关键字:分布 意思是 散列函数 什么 | 更新日期: 2023-09-27 18:30:07

在阅读MSDN上Object.GetHashCode方法的文档时,我遇到了一些短语,比如哈希函数应该在哈希表中提供随机或有用的分布。这种分布对于哈希函数或哈希表意味着什么?

什么是“;散列函数的分布“;意思是

哈希函数生成一个32位整数,用于"平衡"哈希表。假设您的表有一百个"bucket",并且您根据哈希函数的小数点后两位将表中的项目放入一个bucket中。

现在假设散列函数总是产生一百的偶数倍的数字。每个项目都将进入同一个bucket,哈希表将不平衡。那将是一个糟糕的散列函数。

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

为了使哈希表发挥最大功效,哈希值应尽可能唯一,以防止冲突。例如,让我们考虑一个极其天真的哈希函数:假设对象是名字和姓氏,对于哈希值,您可以选择首字母。所以Ginger Rodgers的哈希值是GR,Fred Astaire的哈希值为FA。到目前为止还不错,但当Frank Allen得到FA的哈希值时会发生什么?现在,Fred Astaire和Frank Allen之间发生了冲突,哈希表实现必须将其作为一种特殊情况来处理,这会降低效率。

最好的散列函数采用输入空间(Fred Astaire),并产生一个随机值,该值(理想情况下)对输入空间是唯一的。只要哈希的大小小于数据的大小,就没有办法完全避免冲突,但应该通过仔细选择哈希算法来最小化冲突。

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