将对象的哈希值定义为其成员哈希值之和

3

我有一个类来表示图中的无向边。每条边都有两个成员vertex1vertex2,表示它连接的顶点。问题在于,一条边可以指定两个方向。我的想法是将边的哈希定义为其顶点哈希之和。这样,方向就不再起作用了,哈希值将是相同的。但是,这种方法存在什么潜在的问题吗?

1个回答

3

我曾经遇到过类似的问题,并发现将哈希值相加作为哈希结果会导致太多冲突。哈希值之和的分布不够均匀。

我发现使用哈希值的乘积会导致更少的冲突。当然,这取决于各个顶点的哈希函数的特性。

搭建一个测试环境,测试几个对称哈希函数,然后根据冲突情况选择最佳的。

你可以尝试以下方法:

h(x,y) = x+y
h(x,y) = x*y
h(x,y)  = x * y + (x ^ y)
h(x,y) = x *y + x + y

当 x^y = min(x,y) 时,


也将x^y作为可能的哈希组合器是否有意义? - Vatine
如果 x^y = min(x,y) 那么是的 :-) - Il-Bhima

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接