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