基本概念:
模式匹配是对字符串的一种非常重要的操作,假设被匹配的正文字符串是 text,模式串是pattern,则模式匹配的任务就是在text中找出所有的pattern, 给出pattern在text中的位置。
例如:text是“cdghcdghhcdr”,pattern是“cd”, 则答案是0,4,9(下标计数从0开始)
简单字符匹配:
第1轮:
用pattern的第1个字符与text的第1个字符比较,不等就结束,相等就
用pattern的第2个字符与text的第2个字符比较,不等就结束,相等就 ……
第2轮:
用pattern的第1个字符与text的第2个字符比较,不等就结束,相等就
用pattern的第2个字符与text的第3个字符比较,不等就结束,相等就 ……
……
这种做法非常直观,实际上就是把模式串pattern放到正文text的各个位置逐 一匹配,假设text、pattern的长度分别是m、n,则上述做法总共有m轮,每一轮 比较n次,所以该算法的时间复杂性是O(mn)。
KMP模式匹配:
简单匹配法在一次字符比较失败后,只是向前移动一个位置,丢掉了由前面 已做过的字符匹配的信息,当模式串pattern后面部分与前面部分有重复(匹配 )时,一次可以移动多个位置。
考虑如下例子:
表1
位置i | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
正文text | c | a | g | a | c | a | g | a | c | a | g | a | t | a | ||
模式pattern | a | g | a | c | a | g | a | t | a |
时间: 2024-11-08 19:13:36