【发布时间】:2011-03-29 16:07:22
【问题描述】:
我有一个永远丢失的字符串。我唯一拥有的就是一些神奇的哈希数。现在我有一个新字符串,它可能与丢失的字符串相似或相等。我需要知道它有多近。
Integer savedHash = 352736;
String newText = "this is new string";
if (Math.abs(hash(newText) - savedHash) < 100) {
// wow, they are very close!
}
有没有为此目的的算法?
ps。文字长度不固定。
pps。我知道通常的哈希码是如何工作的。我对一种能够以不同方式工作的算法感兴趣,它可以为我提供上述功能。
pps。在一个非常简单的场景中,这个hash() 方法看起来像:
public int hash(String txt) {
return txt.length();
}
【问题讨论】:
-
为“哇,他们非常接近!”竖起大拇指
-
has 码的目的是提供良好的分布,这意味着非常接近(应该)的字符串的哈希码往往会有很大的不同。
-
打开你的思路,伙计们:) 忘记 hashCode(),请再读一遍问题。
-
哈希码有什么限制?它必须小于一定长度吗?否则,字符串本身的“哈希码”会起作用。另外,您对“非常接近”的定义是什么?小的插入和删除是否意味着它仍然接近(因为大部分内容被移动)或完全不同(因为每个索引处的所有字符都不同)?
-
@0x69 我没有破解任何东西,我需要开发算法,它会生成哈希数。
标签: java algorithm design-patterns