两个单词哈希到相同的值

时间:2013-05-27 03:11:59

标签: c hash

给出一个使用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;
}

1 个答案:

答案 0 :(得分:2)

第一个函数只添加字符值,这意味着反转字符串(或以其他方式重新排列字母)无效;另一个还包括生成哈希值的每个字符的索引,使其对重新排序更具弹性。

所以:

hash1(ab) = 195
hash1(ba) = 195
hash2(ab) = 293
hash2(ba) = 292