将类似输入映射到类似输出的散列函数?

时间:2009-11-06 11:35:29

标签: algorithm hash hashcode simhash

是否存在哈希函数,其中输入中的微小变化会导致输出中的微小变化?例如,像:

hash("Foo") => 9e107d9d372bb6826bd81d3542a419d6
hash("Foo!") => 9e107d9d372bb6826bd81d3542a419d7 <- note small difference

4 个答案:

答案 0 :(得分:4)

我不会把它称为哈希,因为哈希的要点恰恰相反。但是,根据您声明的目标,即输入中的微小变化会产生较小的输出变化,我会考虑使用soundex函数或Ratcliff算法。

答案 1 :(得分:3)

我会推荐Mark Manasse的simhashalgorithm

答案 2 :(得分:0)

一个简单的解决方案是对所有字节模块N进行异或。对于64位散列,你要XOR(输入[0] ^输入[8] ^输入[16])+ 256 *(输入[1] ^输入[9] ^输入[17])等。 所以,“Foo”哈希到“Foo \ 0 \ 0 \ 0 \ 0 \ 0”和“Foo!”哈希到“Foo!\ 0 \ 0 \ 0 \ 0”。

答案 3 :(得分:0)

  

位置敏感散列(LSH)降低了维数   高维数据。 LSH哈希输入项目以便类似项目   以高概率映射到相同的“桶”:

https://en.wikipedia.org/wiki/Locality-sensitive_hashing

另见:https://en.wikipedia.org/wiki/Perceptual_hashing

以下是DNA序列感知哈希的一个很好的例子:

http://arxiv.org/pdf/1412.5517.pdf