Hash 是否存在可以忽略此字符串中字符顺序的字符串哈希

Hash 是否存在可以忽略此字符串中字符顺序的字符串哈希,hash,Hash,是否存在可以忽略此字符串中字符顺序的字符串哈希?例如,“helloword”和“wordhello”可以映射到同一个bucket。如果您不介意像“ac”和“bb”这样的字符串生成相同的散列值,您可以将字符的值相加。(a+b+c等于a+c+b。) 如果您想减少这种哈希代码冲突的可能性,那么可以将字符的值相乘在一起。(a*b*c也等于a*c*b) 如果这还不够好,那么您可以对字符串中的所有字符进行排序,然后再应用由您使用的任何语言提供的默认字符串哈希函数。(因此,“helloword”和“wordh

是否存在可以忽略此字符串中字符顺序的字符串哈希?例如,“helloword”和“wordhello”可以映射到同一个bucket。

如果您不介意像“ac”和“bb”这样的字符串生成相同的散列值,您可以将字符的值相加。(a+b+c等于a+c+b。)

如果您想减少这种哈希代码冲突的可能性,那么可以将字符的值相乘在一起。(a*b*c也等于a*c*b)


如果这还不够好,那么您可以对字符串中的所有字符进行排序,然后再应用由您使用的任何语言提供的默认字符串哈希函数。(因此,“helloword”和“wordhello”在散列之前都会变成“dehloorw”,从而生成相同的散列码。)

尽管其他乘法或添加字符的建议也可以,但请注意,这样的散列函数根本不安全

原因是它将引入大量冲突,而哈希函数的主要特性之一是冲突概率低

例如,a+b+c与c+b+a相同。但是,它也与a+a+d相同(因为ascii字符的总和相同)。这同样适用于数字的乘法或异或运算


总之,如果您想实现一个忽略顺序的哈希函数,您可以这样做,但它会引入大量冲突,这可能会使您的程序出现故障和不安全。

是的。你需要它做什么?最好将字符串转换成一组或多组字符,然后使用它们。你能给我更多关于如何实现它的细节吗@用户2357112在Python中,
set(“helloword”)
导入集合;collections.Counter(“helloword”)
。但是,不知道您使用的是哪种语言。对字符串的内容进行排序,并对排序后的值进行散列。这样,就可以对两个样本进行哈希
dehloorw
,从而得到相同的哈希值。