顺序串— KMP模式匹配算法-1(补充)
Posted 超浪*牛
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了顺序串— KMP模式匹配算法-1(补充)相关的知识,希望对你有一定的参考价值。
补充上一篇“串”笔记博文:
字符串的朴素模式匹配算法到底低效在哪?
主串是S=“abcdefgab”,
匹配串T=“abcdex”
- 用前面的朴素模式匹配算法的话,前5个字母两串完全相等,直到第六个时‘f’与‘x’不相等:
再按照这个算法的话,结合上图流程,我们会知道其实T串“abcdex”的首字母‘a’与之后面的‘bcdex’中的任何一个字符均不相等(*理解KMP算法的关键思想,但是注意这里是前提,判断后面再讲* ),那你想‘a’不与自己后面的子串中的任意一个字符相等,那么对于T中的‘a’则不可能与串S中的第2位到第5位的字符相等。那么这个朴素模式匹配算法中的2,3,4,5步骤判断就是多余的!
有人就会问,如果T串后面也含有首字母‘a’的字符怎么办?
假设S= “abcabcabc”
T = “abcabx”
对于前五个字符的判断是完全相等的,第六个字符不等。
如图,根据前面的经验,朴素算法的②③步骤都是多余的,而对于④⑤,在步骤①时就被计算过,是相等的(T中的1,2位与后面的4,5位相等,而4,5在第一次判断时就比较过是相等的)那么在KMP模式匹配算法中,对于首字母相等的字符,也省略一部分不必要的判断步骤。
对比这两个例子,朴素的模式匹配算法中不断地回溯来完成比对,而我们分析发现,其实这种回溯是可以不需要的——正所谓好马不好回头草,KMP模式匹配算法就是让这没必要的回溯不发生。从而提高对比效率。
以上是关于顺序串— KMP模式匹配算法-1(补充)的主要内容,如果未能解决你的问题,请参考以下文章