我有一个类来表示图中的无向边。每条边都有两个成员vertex1
和vertex2
,表示它连接的顶点。问题在于,一条边可以指定两个方向。我的想法是将边的哈希定义为其顶点哈希之和。这样,方向就不再起作用了,哈希值将是相同的。但是,这种方法存在什么潜在的问题吗?
我曾经遇到过类似的问题,并发现将哈希值相加作为哈希结果会导致太多冲突。哈希值之和的分布不够均匀。
我发现使用哈希值的乘积会导致更少的冲突。当然,这取决于各个顶点的哈希函数的特性。
搭建一个测试环境,测试几个对称哈希函数,然后根据冲突情况选择最佳的。
你可以尝试以下方法:
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) 时,