我的问题可能听起来有点奇怪: 我知道用于加密的哈希函数必须具有大大改变输出的特性,即使由于某种雪崩效应导致的一位的微小变化也是如此。
是否存在不存在的哈希,其特征是类似的字符串会产生类似的输出?
如果答案是肯定的,你能告诉我是否有办法操纵这个方面(“类似”的定义)与文本字符之间潜在的预先知道的关系?
答案 0 :(得分:1)
是的,它存在。正如您所期望的那样,必须给出类似的定义。但这取决于你的应用 - 我可以举个例子。
假设您的字符串是域,并且您希望将所有子域哈希到一个存储桶中。然后你可以反转字符串,如:
finance.yahoo.com => com.yahoo.finance
sport.yahoo.com => com.yahoo.sport
user.mail.yahoo.com => com.yahoo.mail.user
并仅对前两部分进行哈希:com.yahoo
,其余部分则删除。你的哈希函数看起来像这样(在python中):
def hash(url):
return any_other_hash_function(".".join(url.split(".")[::-1][:2]))
你的问题一点都不奇怪。您可以在Google的map-reduce或BigTable(以及许多其他系统中)中找到类似的方法来完全保留类似的内容,以便可以加快计算速度。
我给出的示例是字符串,但您可以对其他对象使用类似的方法。这里的想法只是将项目分成组并散列组ID(高级域名)。
答案 1 :(得分:1)
这种散列函数称为locality sensitive。