一个递归构建的散列函数?

时间:2010-01-03 23:44:16

标签: hashtable hash

是否有一个(众所周知的)字符串s的哈希函数,它可以从s的子集的哈希值计算出来。 e.g。

hash(0到x)是hash(0到x / 2)+ hash(x / 2到x)// plus或任何其他数学运算

4 个答案:

答案 0 :(得分:5)

您可以使用您喜欢的任何散列函数构造hash tree。因此,如果您只需要一个可以根据数据部分计算的应用程序的自定义哈希函数,则可以从任何众所周知的哈希函数构建它。

一种常用的哈希树变体是Tiger Tree Hashes,它使用Tiger算法。

答案 1 :(得分:1)

我认为没有这样的“哈希”功能。当然,数学函数将存在......但是散列函数的目的是使散列尽可能少地依赖于条目,以便散列尽可能随机。

如果你考虑一下,你的哈希函数从开始就会有缺陷...毕竟我可以计算:

哈希(“密码”)=哈希(“传递”)+哈希(“词”)

然后

Hash(“word”)= Hash(“wo”)+ Hash(“rd”)

等等....所以最后递归构建将等于递归构造...对于哈希函数 bad

答案 2 :(得分:1)

有许多哈希函数可以解决您的问题。在我看来,最好的,适合大多数应用程序的东西类似于这里定义的内容:

http://en.wikipedia.org/wiki/Rolling_hash#Rabin-Karp_rolling_hash

为实现选择一些好的和大的常量很重要。你需要做一些数学运算(模运算)来实现O(1)中的串联(从H(A)和H(B)得到H(AB))。你也可以做相反的事情(例如从H(AB)和H(B)计算H(A))

答案 3 :(得分:0)

普通校验和(以某些值为模)符合此描述,但在许多情况下,对于散列函数的各种特性,它将被视为相当差的散列。例如,这样的哈希可以很容易地“破解”(如果在某些加密方案中使用),并且它也为类似输入产生相同的值,其中输入中几个字符的顺序被改变。