简单的模式匹配算法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
简单的模式匹配算法_Brute-Force算法
在串的操作中,子串的定位操作Index_string(s,t),通常称之为模式匹配(其中:子串t称之为模式串)。其功能是:主串s=“c0c1...c n-1”中,去查找子串t=“t0t1...t m-1”,若找到则返回子串t在主串s中的位置,否则查找不成功,返回-1。
为了便于理解,我们举例进行说明。
1.例子
例如:主串s=”ababcabcacbab”,t=”abcac”。其匹配过程如图6-12所示。
第一趟匹配: i=2
a b a b c a b c a c b a b
a b c
j=2
第二趟匹配: i=1
a b a b c a b c a c b a b
a
j=0
第三趟匹配: i=6
a b a b c a b c a c b a b
a b c a c
j=4
第四趟匹配: i=3
a b a b c a b c a c b a b
a
j=0
第五趟匹配: i=4
a b a b c a b c a c b a b
a
j=0
第六趟匹配: i=10
a b a b c a b c a c b a b
a b c a c
j=5
图6-12 Brute-Force算法中串的匹配过程
2.算法思想
算法的基本思想是:分别设置计数指针i和j指示主串s和模式串t中当前正待比较的字符位置。从主串的第一个字符和模式的第一个字符比较,若相等,则继续逐个比较后续字符;否则从主串的下一个字符起再重新和模式串的字符比较。依次类推,直到模式串中的每个字符依次和主串中的一个连续的字符序列相等,则称匹配成功,函数值为和模式串中第一个字符相等的字符在主串中的序号,否则称匹配不成功。
这个算法简单,易于理解,但效率不高,主要原因是:主串指针i在若干个字符序列比较相等后只要有一个字符比较不等便需回溯。