所有输入都是小写英文字母。
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.
答案 0 :(得分:2)
在问题中尝试的第一件事就是为每个字母分配一个 prime 号码,然后乘以它们。然后,"ab"
是2 * 3 = 6; "ba"
是3 * 2 = 6; "c"
是5。
答案 1 :(得分:1)
不,因为存在无限多个可能的字符串,但只有有限数量的可能哈希值。
你不能在字符串上使用无碰撞的Hash函数,但是你可以设计你的函数以使预期的输入值尽可能少地碰撞。
答案 2 :(得分:0)
正如其他人所提到的那样,你无法确保每个具有不同字母的字符串产生不同的散列,因为只有2 ^ 32(或2 ^ 64)个不同的散列可用,并且字母的组合方式比不同
但是如果你只想制作一个不关心字符串中字符顺序的哈希函数,那么最简单的方法就是对字符串中的字符进行排序(所以“加拿大”会成为“aaacdn” “,例如),然后散列结果。
另一种常见的方法是将每个字符映射到一个随机数字,然后将所有字符的数字加在一起。