KMP

来源:互联网 发布:大数据及可视化技术 编辑:程序博客网 时间:2024/05/01 15:32
最近经常被考strstr,今天总是下了决心学习kmp,还比较复杂啊,现在把学习笔记写下来供以后参考:
1.关键想法:不需要回溯主串,只需要在匹配串中找到重复串即可。
即当主串A的指针为i, 匹配串B的指针为j,此时A[i] != B[j],到我们知道A[i - 1] = B[j - 1]...所以为了不回溯i,我们需要找到一个新的j1,使得B[1...j1-1] = B[j-j1...j-1] = A[i - j1,i-1],然后我们就可以放心地比较i与j1,这样就不需要回溯i了,B[1...j1-1] = B[j-j1...j-1] = A[i - j1,i-1]等式中先观察到B[j-j1...j-1] = A[i - j1,i-1]这个事实,然后根据这个事实得出只要在字串中找到B[1...j1-1] = B[j-j1...j-1]这样的j1,则不要回溯i,高明!
2.B[1...j1-1] = B[j-j1...j-1]的求法:当然也能在串行的事件内做出,假设已经求得p[1].....p[j] ,计算p[j + 1]根据p[B[i]] where B[i] = B[j]来计算的。
原创粉丝点击