通常,散列的目标是将连续函数转换为离散函数:输入中的微小变化应该会导致输出发生很大变化。但是,是否有任何散列算法(粗略地说)会为类似输入返回相似但(仍然不同)的散列值?
(使用它的一个例子是通过检查它们的哈希值是否相似来检查两个文件是否“相似”。当然,一些失败总是可以接受的。)
答案 0 :(得分:10)
看看Locality Sensitive Hashing(LSH)。例如,这是一种快速查找给定点附近的一堆点的概率方法。
答案 1 :(得分:1)
给定距离函数可以告诉您对象的相似程度或不同程度,您还可以使用距离排列: http://www.computer.org/portal/web/csdl/doi/10.1109/TPAMI.2007.70815 或草图: http://portal.acm.org/citation.cfm?id=1638180
对于后一种方法的实施: http://obsearch.net
答案 2 :(得分:-1)
您真的不想看到类似的哈希。哈希是为了确保完整性,因此文件/应用程序/程序中的最细微更改都会产生完全不同的哈希。如果两个不同的字符串显示相同的哈希,这称为冲突,并且哈希算法现在受到损害。 MD5有一些冲突,但今天仍在使用。