是否存在一种字符串哈希算法,可以忽略字符串中字符的顺序?例如,“helloworld”和“worldhello”可以映射到同一个桶中。
是否存在一种字符串哈希算法,可以忽略字符串中字符的顺序?例如,“helloworld”和“worldhello”可以映射到同一个桶中。
有多种不同的方法可以采用。
您可以将字符的值相加。(a + b + c等于a + c + b)。不幸的是,这是最不理想的方法,因为像"ac"和"bb"这样的字符串将生成相同的哈希值。
为了减少哈希码冲突的可能性,您可以将值进行异或运算。(a ^ b ^ c等于a ^ c ^ b)。不幸的是,这不会给出非常广泛的随机位分布,因此仍会给不同字符串之间产生高碰撞的机会。
为了进一步减少哈希码冲突的可能性,您可以将字符的值相乘。(a * b * c等于a * c * b)。
如果这还不够好,那么您可以在应用默认字符串哈希函数之前对字符串中的所有字符进行排序,无论您使用的是哪种语言。(因此,"helloworld"和"wordhello"都将变成"dehlloorw",然后进行哈希,从而生成相同的哈希码。)这种方法的唯一缺点是它比其他方法更耗费计算资源。
set("helloword")
或import collections; collections.Counter("helloworld")
。不过我不知道你使用的是什么编程语言。 - user2357112dehlloorw
,从而得到相同的哈希值。 - Jonathan Leffler