创建两个数字的哈希码

创建两个数字的哈希码,第1张

创建两个数字的哈希码

我为任意一组可哈希项创建哈希码的常规方法是:

int hash = 23;hash = hash * 31 + item1Hash;hash = hash * 31 + item2Hash;hash = hash * 31 + item3Hash;hash = hash * 31 + item4Hash;hash = hash * 31 + item5Hash;// etc

在你的情况下

item1Hash
可能只是
a
,也
item2Hash
可能只是
b

只要它们是质数(或至少是互质数),则23和31的值就相对无关紧要。

显然仍然会有冲突,但是您不会遇到以下常见的令人讨厌的问题:

hash(a, a) == hash(b, b)hash(a, b) == hash(b, a)

如果您更多地了解

a
b
可能是什么,那么您可能会做得更好,但这是一个很好的初始实现,很容易记住和实现。请注意,如果有可能在勾选“检查算术上溢/下溢”的情况下构建程序集,则应将其全部置于未检查的块中。(对于此算法,溢出是可以的。)



欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/4937751.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-13
下一篇 2022-11-13

发表评论

登录后才能评论

评论列表(0条)

保存