0

所有输入都是小写英文字母。

HashString("ab")= should be unique value
HashString("ba")= should give me the same value as above

我尝试为每个字母分配一个数字,但结果证明是错误的逻辑

我的尝试产生了以下输出。

HashString("ab")=3
HashString("ba")=3 this is correct.
HashString("c")=3  this is wrong.
4

3 回答 3

2

在这个问题的尝试中,首先想到的是给每个字母分配一个数,然后将它们相乘。那么,"ab"是 2*3 = 6;"ba"是 3*2 = 6;"c"是 5。

于 2017-07-12T11:15:34.783 回答
1

不,因为有无限多可能的字符串,但只有有限数量的可能哈希值。

您不能在字符串上使用无冲突哈希函数,但您可以将函数设计为对预期输入值具有尽可能少的冲突。

于 2017-07-12T11:14:30.167 回答
0

正如其他人所提到的,您不能确保每个具有不同字母的字符串都会产生不同的散列,因为只有 2^32(或 2^64)个不同的散列可用,而且字母的不同组合比这要多得多。

但是如果你只是想做一个不关心字符串中字符顺序的哈希函数,那么最简单的方法就是对字符串中的字符进行排序(所以“canada”会变成“aaacdn”,例如例如),然后散列结果。

另一种常见的方法是将每个字符映射到一个看起来随机的数字,然后将所有字符的数字相加。

于 2017-07-12T13:27:49.903 回答