1. hash算法简化,比如取每个字符相加,
2. key长度len, 从0开始,取前len个字符hash
3. while (hash不一致 || 逐个字符比较不一致) && 没到字符串末尾
5. hash减掉当前字符,加上len+1位置字符
---------------------
3/20/2017
又想了一下,还可以改进:
相加的方法比较粗糙,基本上只有一个有效byte, 对于ab, ba很容易误判
我们可以利用寄存器长度多放几个字符,比如64位cpu, 一次可以放8个字符。
还有,hash一样对于海量数据来说是很容易发生的事情,可以引入两个或者更多的hash,计算量+1, 而冲突概率则减少了N倍。
Hash1: for(i=0;i
匹配的时候:
临时t_hash1=t_hash1>>>8+str[j]<<
这里用一个整型比较替代字符串比较,复杂度O(M+N), 需要遍历
对于长样本字符串,KMP也是个不错选择,可以根据样本尽量长的往前跳