3.1 KMP算法综述
KMP算法是一个非常优秀的模式匹配算法,其对于任何模式和目标序列,都可以在线性时间内完成匹配查找﹐而不会发生退化,其时间复杂度为o ( mtn)。该算法相对于普通匹配算法的改进在于:每当一趟匹配过程中出现字符比较不等时,不许回溯指针i,而是利用已经得到的部分匹配的结果将模式向右滑动尽可能远的一段距离后,继续进行比较。
3.2 next数组的计算
正确求得next数组是实现KMP算法的关键,它决定了在匹配过程中出现字符不等时,模式串应该向右滑动的距离。next 数组定义如下:
求得next数组后,匹配按照如下方式进行:假设指针﹔和j分别指示主串和模式串中正待比较的字符,令i初值为pos,j的初值为l,若在匹配过程中对应位置字符相等,则i和j增1﹔如果出现不相等的情况,则j退到nextlj的位置继续进行比较。
3.3一行多次匹配的实现
由于原始的MP算法在完成一次模式匹配后会推出算法,想要实现一行多个的模式匹配,需要设计结构存储每一行模式匹配中,模式串出现的位置。因此定义数组linepos[20]来存储模式串在每一行出现的位置。
, 相关下载链接:
https://download.csdn.net/download/qq_52019496/88618913?utm_source=bbsseo