是否存在可以忽略此字符串中字符顺序的字符串哈希?例如,“helloword”和“wordhello”可以映射到同一个桶中。
答案 0 :(得分:3)
如果你不记得" ac"和" bb"生成相同的哈希值,您可以将字符的值一起添加。 (a + b + c等于a + c + b。)
如果要减少此类哈希码冲突的可能性,则可以将字符的值相乘。 (a * b * c也等于a * c * b。)
如果这还不够好,那么您可以在应用通过您使用的任何语言提供的默认字符串哈希函数之前对字符串中的所有字符进行排序。 (所以," helloword" ad" wordhello"会在散列之前成为" dehlloorw"因此生成相同的哈希码。)
答案 1 :(得分:0)
尽管其他建议使用字符乘或加的建议也可以,但是请注意,这样的哈希函数根本不安全。
原因是它将引入大量冲突,并且哈希函数的主要属性之一是发生冲突的可能性低。
例如,a + b + c与c + b + a相同。但是,它也与a + a + d相同(因为ASCII字符的总和相同)。将数字相乘或异或也是如此。
总而言之,如果您想实现一个忽略顺序的哈希函数,则可以,但是会引入大量的冲突,这有可能使您的程序出错和不安全。