我有一组特定的整数:2,10,13,15,23,34,43,58,100,123,199,200和348.任务是创建一个1行哈希函数至少可以在索引0到12中映射9个值。
到目前为止,我所做的哈希函数是:
hash = value%13
hash = (value+array[indexOfValue])%13
hash = array[indexOfValue]
3号可能会让我责骂,但我似乎可以接受,所以我不妨给它作为答案。哦,我不应该使用任何碰撞解决方法。
编辑:那么我应该对什么哈希函数做出任何建议?编辑:我找到了一个函数,可以映射0到12之间的所有值以及它:((((x*7)+x)%7)+x)%13
答案 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出现两次。