我的问题与这个话题有很多关系:
Hash function on list independant of order of items in it
基本上,我有一组 N 号码。 N 是固定的,通常非常大,例如。例如1000。这些数字可以是整数或浮点数。它们可以是平等的,部分或全部。没有数字可以为零。
K 数字的每个组合,其中 K 是介于1和 N 之间的任何值,导致计算散列。
让我们以3个数字为例,我将调用A,B和C.我需要计算以下组合的哈希值:
A
B
C
A+B
B+C
A+B+C
A+C
事情与秩序无关,C + A等于A + C. ' +'可以是一个真正的补充或不同的东西,如异或,但它是固定的。同样,每个值都可以首先通过函数,例如
f(A)
f(B)
f(A)+f(B)+f(C)
...
现在,我需要避免碰撞,但只能以特定方式。 每个组合都标有数字,0或1。 可能发生冲突,如果可能的话,只有标记有相同数字(0或1)的那些可能发生碰撞。在这种情况下,确实会遇到许多冲突,特别是如果这使哈希值变得紧凑。我的意思是,理想情况下,最好的哈希只有1位长! (0或1)。 标记不同数字(0和1)的组合之间的碰撞应该很少发生 - 如果可能的话 - 这就是重点。
让我们举个例子。组合 - >标签 - >计算的哈希值:
Combination Tag Hash
A -> 0 -> 0
B -> 1 -> 1
C -> 0 -> 2
A+B -> 0 -> 0
B+C -> 1 -> 1
A+B+C -> 1 -> 3
A+C -> 0 -> 2
这里,哈希值是有效的,因为不同标签的组合之间没有冲突。例如,A与A + B相撞,但它们都被标记为' 0'。
然而,哈希总体来说不是很好,因为我需要4位,这对于4个输入数字来说似乎很多。
如何为此目的找到一个好的(足够好的)哈希函数?
感谢您的见解。