我需要的是一个以固定数据大小运行的散列函数,显然是出于非安全目的。它需要将类似的字符串映射到相似或相等的哈希值,换句话说,字符串中的小变化应该对哈希值没有或只有很小的变化。
例如:我的名字是John ,我的名字是Jon 应该具有相同或非常相似的哈希值。 我的名字是约翰,你的名字是利亚姆应该会产生一些类似的哈希值。 我的名字是John ,我住在美国应该提供完全不同的哈希。 等等!
是否有用于类似目的的散列函数?
答案 0 :(得分:1)
没有可靠的方法来实现这一目标。这是由于鸽子原理;两个短字符串比两个长字符串“接近”的方式要少得多。
然而,有模糊散列的概念,这可能会让你在那里的一部分。
答案 1 :(得分:0)
听起来你正在寻找Levenshtein距离(见http://en.wikipedia.org/wiki/Levenshtein_distance)。
在各种语言中有很多这样的实现。
答案 2 :(得分:0)
我认为在这种情况下Jacard索引可能会有所帮助.Jaccard索引是对两组相似程度的简单衡量。它只是集合交集的大小与集合的大小的比率。
有一篇博客讨论Jaccard Similarity Index for measuring Document Similarity我发现更接近你的需求。