2010-06-11 57 views
3

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

回答

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 =分钟(X,Y)

+0

会是有意义的还包括x ^Ÿ作为一个可能的散列组合? – Vatine 2010-06-11 10:44:37

+0

如果x^y = min(x,y),那么是:-) – 2010-06-11 10:56:31