2017-05-02 64 views
2

我有一组特定的整数,它们是:2,10,13,15,23,34,43,58,100,123,199,200和348.任务是创建一个1线散列函数可能至少在地图索引9个值0至12。特定整数集的散列函数

到目前为止我所作的散列函数是:

  1. hash = value%13
  2. hash = (value+array[indexOfValue])%13
  3. hash = array[indexOfValue]

数字3是可能让我骂,但它似乎是可以接受的,所以我不妨给它一个答案。哦,我不应该使用任何冲突解决方法。

编辑:所以我应该做什么散列函数的任何建议?

编辑:我发现将映射从0到12的所有值的函数,它是:((((x*7)+x)%7)+x)%13

+2

你的问题是什么? –

+0

@m_callens抱歉,我现在编辑它。 – Helquin

+0

由于要求自负的回答而投票结束。 –

回答

3

我的(学历)的猜测是,XOR将是这里的哈希函数的良好基础。例如:

(value^c) % 13 

通过尝试在C的所有的值(蛮力)[1,200]在上述式和计数多少不同的散列码在您的集合中的值,则数72产生出现了。例如。

int[] values = new int[]{2, 10, 13, 15, 23, 34, 43, 58, 100, 123, 199, 200, 348}; 
for (int value : values) { 
    System.out.print((value^72) % 13); 
} 

将打印出:

9 1 4 6 4 2 8 10 5 12 0 11 3 

,其包括在所述范围内的所有数值[0,12],除了7,并用4出现两次。

+0

13个可能的值有13个元素,所以重复不是不可避免的。 – biziclop

+0

@biziclop你当然是正确的 –

+0

如果你仍然对映射所有值的函数感到好奇,我发现一个:hash =((((x * 7)+ x)%7)+ x)%13 – Helquin