所有输入都是小写英文字母。
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.
所有输入都是小写英文字母。
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.
在这个问题的尝试中,首先想到的是给每个字母分配一个质数,然后将它们相乘。那么,"ab"
是 2*3 = 6;"ba"
是 3*2 = 6;"c"
是 5。
不,因为有无限多可能的字符串,但只有有限数量的可能哈希值。
您不能在字符串上使用无冲突哈希函数,但您可以将函数设计为对预期输入值具有尽可能少的冲突。
正如其他人所提到的,您不能确保每个具有不同字母的字符串都会产生不同的散列,因为只有 2^32(或 2^64)个不同的散列可用,而且字母的不同组合比这要多得多。
但是如果你只是想做一个不关心字符串中字符顺序的哈希函数,那么最简单的方法就是对字符串中的字符进行排序(所以“canada”会变成“aaacdn”,例如例如),然后散列结果。
另一种常见的方法是将每个字符映射到一个看起来随机的数字,然后将所有字符的数字相加。