字符串匹配-KMP算法

字符串匹配-KMP算法

    • KMP算法思想:
    • 算法要点

KMP算法思想:

首先根据子串计算其每一位字符的部分匹配值,得到一个部分匹配表;接着进行比较-位移的比较步骤。其中比较为从左向右依次匹配。如果本轮已匹配字符长度为0,则位移为1,否则,位移的计算公式:本轮比较中已匹配的字符串长度 - 最后一位已匹配字符的部分匹配值。

部分匹配值的计算说明:

首先,计算对象是:对这个字符串从第一位开始,计算每个子集的部分匹配表。例如ABCDAB,需要计算A,AB,ABC,ABCD,ABCDA,ABCDAB这几个子串的部分匹配表。

其次,计算方法是:比如ABCDA,它的所有前缀是:A AB ABC ABCD,它的所有后缀是:A DA CDA BCDA,二者重合的部分只有A,所以ABCDA的部分匹配值是1,称整个字符串ABCDAB中的第二个A的部分匹配值为1.

算法要点

一个基本事实是,当空格与D不匹配时,你其实知道前面六个字符是"ABCDAB"。KMP算法的想法是,设法利用这个已知信息,不要把"搜索位置"移回已经比较过的位置,继续把它向后移,这样就提高了效率。

你可能感兴趣的:(算法)