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

时间:2010-06-11 10:04:55

标签: python hash

我有一个表示图中无向边的类。每条边都有两个成员vertex1vertex2,表示它连接的顶点。问题是,边缘可以指定两个方向。我的想法是将边的散列定义为其顶点的散列之和。这样,方向不再起作用,哈希将是相同的。那有什么陷阱吗?

1 个答案:

答案 0 :(得分: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)