上一部分在这里
部分匹配表
- 目的是为了让这个算法对于A中的每个字符都只匹配一次。
- 对于B中的每一个字符x,查找x’使得B[1..x]中的前x’个字母和后x’个字母完全相等。这样就可以实现直接转移,重新开始匹配的操作。
- 显然这只和B串有关,因此可以预处理出T[x]表示B[x+1]无法匹配时,最大的x’的值。
- 对于T[x+1],如果B[T[x]+1]==B[x+1],则T[x+1]=T[x]+1,否则一直后退,知道满足条件为止。
- 惊奇的发现这也是一个往回跳的过程!
复杂度分析
- 运用匹配算法是的分析法,可以看出算部分匹配表的复杂度是O(k)的,其中k是B的长度
- 因此总复杂度是O(n*k)
代码
1 |
|
参考资料
终于填掉这个坑!开心!