字符串单词的唯一哈希值

Unique hash of string words

本文关键字:哈希值 唯一 单词 字符串      更新时间:2023-10-16

我正在为任意字符串单词编写一个哈希函数(最大可能长度<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 表示的哈希值?

谢谢!

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

也许可以在Cryptography StackExchange上找到更多的技术细节。