哈希函数的解释为维基百科 http://en.wikipedia.org/wiki/Rolling_hash
它说:“a 和 n 的选择对于获得良好的散列至关重要;”并引用了一篇感觉不相关的线性同余生成器文章。我无法弄清楚这些值是如何选择的。有什么建议么?
该算法的基础是次数最多的非零多项式d最多有d零。每个长度-k字符串有其自己关联的次数多项式k- 1,我们通过减去相关字符串的多项式并评估来筛选可能的匹配项a。如果字符串相等,则结果始终为零。如果字符串不相等,则结果为零当且仅当a是多项式差的零点之一(这是对素性要求提出的事实n,作为整数 modn否则就不是一个字段)。
至少在理论上,我们想要a是随机的,这样不经意的对手就不能以任何频率制造误报。如果我们不希望遇到麻烦,那么选择可能会更好a从而乘以a很便宜(例如,二进制展开a有少量的 1 位)。然而,某些选择对于典型的字符串集来说是不好的(例如,a= 1).我们想要n足够大以避免误报(概率(k - 1)/n)是随机的,但足够小,并且最好是特殊形式,以便模计算有效。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)