特定整数集的散列函数

时间:2017-05-02 14:17:08

标签: java arrays hash

我有一组特定的整数:2,10,13,15,23,34,43,58,100,123,199,200和348.任务是创建一个1行哈希函数至少可以在索引0到12中映射9个值。

到目前为止,我所做的哈希函数是:

  1. hash = value%13
  2. hash = (value+array[indexOfValue])%13
  3. hash = array[indexOfValue]
  4. 3号可能会让我责骂,但我似乎可以接受,所以我不妨给它作为答案。哦,我不应该使用任何碰撞解决方法。

    编辑:那么我应该对什么哈希函数做出任何建议?

    编辑:我找到了一个函数,可以映射0到12之间的所有值以及它:((((x*7)+x)%7)+x)%13

1 个答案:

答案 0 :(得分:3)

我的(受过教育的)猜测是,XOR将是这里散列函数的良好基础。例如:

(value ^ c) % 13

通过在上面的公式中尝试[1,200]中c的所有值(暴力)并计算为集合中的值生成多少个不同的哈希码,数字72出现了。 E.g。

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出现两次。