-5

举两个单词的例子,它们使用 stringHash1 散列到相同的值,但使用 stringHash2 散列到不同的值。

我的答案是 car 和 camera 因为前两个字母是相同的 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;
}
4

1 回答 1

2

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

所以:

hash1(ab) = 195
hash1(ba) = 195
hash2(ab) = 293
hash2(ba) = 292
于 2013-05-27T03:20:15.480 回答