KMP算法
KMP
对于字符串匹配比较快速的算法包括了KMP, BM算法等等。在这里详细讲解一下KMP算法。KMP算法应该说非常的优雅,但是由于不是非常容易被世人所理解,所以它的普及程度远没有BM算法广泛,当然最主要的原因是在性能上有一点的确定,相对于BM算法。
KMP算法是一种在字符串匹配过程中充分利用已经匹配过得字符串信息,从而没有必要再去回溯匹配的算法(传统的字符串匹配算法,一旦失配,机会针对模式串,从头开始匹配,但是在之前匹配成功的字符串的一些信息是已知的,在这里并没有充分的利用上)。KMP算法的核心思想是,最大相等字符串前后缀。有的地方说这是前后缀对称,并且解释这里的堆成不是传统意义上的堆成,实际上就是相等。对于这个最大前后缀,我们使用next数组来进行记录。
next[i],i=0,1,2,...,N-1.这里的next[i]表示str[0,...,i]中的最大相等前后缀的长度。
这里的关键是如何求得这个next数组?
从上面的图像可以看出,这种前后缀的子结构性质。因此在当前的后缀位置插入一个节点就等价于从其前缀位置进行插入;前缀又可以有子前缀和子后缀,可以进行递归的判断!
参考:
[1] http://www.cnblogs.com/c-cloud/p/3224788.html
posted on 2015-06-06 20:18 lightblueme 阅读(188) 评论(0) 编辑 收藏 举报