理解哈希码

阅读: 评论:0

理解哈希码

理解哈希码

我不止一次看到有人问这样的问题:

我有一些动态生成字符串的过程,我想设计一个算法,它输入一个字符串并为该字符串生成一个小的唯一标识符(哈希码),以便两个相同的字符串具有相同的标识符,并且如果两个字符串不同,那么它们将具有不同的标识符。我尝试了String.GetHashCode 方法,但偶尔会发生冲突。有没有办法生成保证唯一性的哈希码呢?

如果你可以限制要散列的字符串的域(所有可能性),你有时可以实现上述算法的唯一性。例如,如果域是有限集,则可以开发所谓的完美哈希,以保证域字符串之间没有冲突。

在一般情况下,如果你不知道要散列哪些字符串,这是不可能的。假设你的哈希码是 32 位值。这意味着有 2 的 32 次方个可能的哈希值。但是有超过 2 的 32 次方个可能的字符串。因此,根据鸽子洞原则(又称抽屉原理),必须至少存在两个具有相同哈希代码的字符串。

关于鸽子洞原理的一个鲜为人知的事实是,它与鸽子无关。术语”鸽子洞”是指桌子上的一个小隔间,用于分发文件或信件等物品。 (因此动词 “to pigeonhole”:分配一个类别,通常基于粗略的概括。因此,鸽子洞原理是指将纸张分类到鸽子洞中的过程,而不是鸠鸽科鸟类的筑巢习性)

最后

Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。
本文来自:《Understanding hash codes》

 

本文发布于:2024-02-01 09:01:11,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170674927135490.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:哈希码
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23