【发布时间】:2015-06-12 17:30:15
【问题描述】:
我需要为这种三元组实现某种集合数据结构: (int, int, int),其中前 2 个 int 来自未知范围,而第三个 int 通常很小。我不需要任何关于订购的信息,所以我决定使用 HashSet。我从来没有实现过类似的东西,但我读过它真的很容易搞砸并且在使用时性能很差。
这是我打算做的。我制作了一大堆可调整大小的桶,并且(散列函数 % 大小)给出了将三元组放入的桶的数量。我知道我需要均匀地使用所有桶以使其高效。问题是:这样做的正确方法是什么? “(a+b+c) mod size”是否足够高效或者我需要使用更复杂的东西?
【问题讨论】:
-
a + b + c显然是一个非常糟糕的选择,因为值的任何排列都将具有相同的哈希值。通常,您希望尽可能多地混合所有成分。对一般散列函数进行一些研究,然后将敏感算法应用于所有组成位。 -
请注意,您仍然必须为具有相同哈希的不同值做出规定。