字符串的哈希算法

Raj*_*Raj 0 algorithm hash

我遇到了一种情况,我必须计算字符串中每个单词的出现次数.我决定散列是最好的方法(找到遇到的每个单词的哈希值,并在哈希值索引的位置增加计数 - 假设我使用数组).我可以使用什么哈希算法来确保为每个字符串生成的哈希值是唯一的?

这导致了一个更大的问题.语言库(例如Java)如何实现像hashmap这样的数据结构,在字符串的情况下生成唯一的哈希值?

我想知道实现这种算法背后涉及的数学结构.

jas*_*son 7

我可以使用什么哈希算法来确保为每个字符串生成的哈希值是唯一的?

没有这样的功能.字符串的空间是无限的,但目标空间是有限的(比如说你使用的是32位整数).你无法将无限空间映射到有限空间; 必须有碰撞.

语言库(例如Java)如何实现像hashmap这样的数据结构,以便在字符串的情况下生成唯一的哈希值?

他们没有; 对于上述字符串,没有唯一的散列函数.

我遇到了一种情况,我必须计算字符串中每个单词的出现次数.我决定散列是最好的方法(找到遇到的每个单词的哈希值,并在哈希值索引的位置增加计数 - 假设我使用数组).

你有正确的想法.只需使用字典映射strings即可int.例如,在C#中我们将使用a Dictionary<string, int>.大多数现代语言都存在类似的东西.让语言/框架处理碰撞问题,什么不适合你,只关注在该语言/框架中表达你的想法.