是否有一种(广为人知的)字符串哈希函数,可以由s的子集的哈希值计算得出。 例如:
哈希(0到x)等于哈希(0到x/2)加哈希(x/2到x) // 加或任何其他数学运算
我不认为有这样的“哈希”函数。当然,数学函数是存在的...但哈希函数的目的是使哈希尽可能地独立于条目,以便哈希尽可能随机。
如果你仔细想一下,你的哈希函数从一开始就存在缺陷......毕竟我可以计算:
Hash("password") = Hash("pass") + Hash("word")
然后
Hash("word") = Hash("wo") + Hash("rd")
等等...最终递归构建将等于递归构造......这对于哈希函数来说是不好的。
有许多哈希函数可以解决您的问题。在我看来,最好的,并且适用于大多数应用程序的是类似于此处定义的内容:
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))