是否可以为以下要求编写散列算法?

时间:2017-07-12 11:09:30

标签: algorithm string-hashing

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

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.

3 个答案:

答案 0 :(得分:2)

在问题中尝试的第一件事就是为每个字母分配一个 prime 号码,然后乘以它们。然后,"ab"是2 * 3 = 6; "ba"是3 * 2 = 6; "c"是5。

答案 1 :(得分:1)

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

你不能在字符串上使用无碰撞的Hash函数,但是你可以设计你的函数以使预期的输入值尽可能少地碰撞。

答案 2 :(得分:0)

正如其他人所提到的那样,你无法确保每个具有不同字母的字符串产生不同的散列,因为只有2 ^ 32(或2 ^ 64)个不同的散列可用,并且字母的组合方式比不同

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

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