字符串

时间:2018-03-12 01:44:39

标签: c++ string hash integer hashtable

我正在为任意字符串字(最大可能长度<26)编写散列函数。 我最初的方法是总结单词中每个字母的ASCII值 - 用C ++实现:

    int getKey(string value){
    int key = 0;
    int temp = 0;
    int length = value.length();
    for (int i = 0; i < length; i ++){
        temp = (int)value[i];
        key = key + temp;
    }
    return key;
}

然而,我很快意识到这种方法会导致重复次数过多(例如,由相同字母组成的单词)。所以我想知道是否有办法获得一个C ++ int可表示的散列值,这对于给定长度下的任何单词都是唯一的?

谢谢!

1 个答案:

答案 0 :(得分:0)

如果我们认为典型的文本字符串中有大约5位信息(26个大写,26个较低,一些标点符号大约是64个不同的字符),那么使用26个字符的字符串则需要大约130位和一个完美的哈希函数,以避免冲突。如果可以接受罕见的冲突,请使用std::hash<> - 如果您需要统计上唯一的哈希值,则返回size_t(通常为64位)或类似SHA256

可能会在Cryptography StackExchange上找到更多技术细节。