我正在为任意字符串字(最大可能长度<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可表示的散列值,这对于给定长度下的任何单词都是唯一的?
谢谢!
答案 0 :(得分:0)
如果我们认为典型的文本字符串中有大约5位信息(26个大写,26个较低,一些标点符号大约是64个不同的字符),那么使用26个字符的字符串则需要大约130位和一个完美的哈希函数,以避免冲突。如果可以接受罕见的冲突,请使用std::hash<>
- 如果您需要统计上唯一的哈希值,则返回size_t
(通常为64位)或类似SHA256
。
可能会在Cryptography StackExchange上找到更多技术细节。