给出一个使用stringHash1散列到相同值的两个单词的示例,但会使用stringHash2散列到不同的值。
我的答案是汽车和相机,因为前两个字母是相同的ascii值,但我不确定?
int stringHash1(char * str)
{
int i;
int r = 0;
for (i = 0; str[i] != '\0'; i++)
r += str[i];
return r;
}
/*the second hashing function you can use*/
int stringHash2(char * str)
{
int i;
int r = 0;
for (i = 0; str[i] != '\0'; i++)
r += (i+1) * str[i];
return r;
}
答案 0 :(得分:2)
第一个函数只添加字符值,这意味着反转字符串(或以其他方式重新排列字母)无效;另一个还包括生成哈希值的每个字符的索引,使其对重新排序更具弹性。
所以:
hash1(ab) = 195
hash1(ba) = 195
hash2(ab) = 293
hash2(ba) = 292