蛮力法字符匹配(BF算法)
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
应用举例:设文本 S=“abcabcacb”,模式 T=“abcac”, BF算法匹配过程如图:
第一趟匹配,i=4,j=4时失败
a
b
c
a
i回溯到1,j回溯到0;来自abc
a
第二趟匹配,i=1,j=0时失败
0
b
c
a
i回溯到2,j回溯到0;
a
b
c
第三趟匹配,i=2,j=0时失败
a
b
c
a
i回溯到3,j回溯到0;
若不相等,从文本S的第二个字符开始和模式T的第一个字符比较,
重复上述过程,若模式T中的字符比较完毕,则匹配成功;
若文本S中的字符全部比较完毕,则匹配失败。
2021/4/9
2
蛮力法字符匹配(BF算法)
思想图解:
下一次开始位置
本趟开始位置
回溯 i
si
…
……
回溯
tj
模式T
j
2021/4/9
文本S
3
蛮力法字符匹配(BF算法)
蛮力法字符匹配
2021/4/9
BF算法
1
蛮力法字符匹配(BF算法)
问题描述:给定一个n个字符组成的串[称为文本],一个m个字符组成的串 [称为模式], 从文本中寻找匹配模式的子串。
算法分析: 用S表示文本,T表示模式。本题应用蛮力法解决的过程是:
从文本S的第一个字符开始和模式T的第一个字符比较,
若相等,继续比较二者的后续字符;
5
效率分析:假设在Si处匹配成功,则i-1次不成功匹 配中共比较(i-1)*m次,第i次成功匹配 中比较m次,则共比较i*m次。可以得 出平均比较次数m(n-m+2)/2,一般 m<<n,则最坏情况下时间复杂性为 O(m*n)。
2021/4/9
END
6
感谢您的阅读收藏,谢谢!
i=0; j=0; index=0;
while(S[i]!='\0'&&T[j]!='\0')
{ if(S[i]==T[j]){ i++;j++; }
else{ index++;i=index;j=0; }
}
if(T[j]=='\0') return index+1;
else return 0;
}
2021/4/9
a
b
第四趟匹配,i=8,j=5,模式T中
a
b
c
a
字符全部匹配完毕,匹配成功
a
b
c
a
c
c
\0
b
c
a
c
a
c
\0
b
c
c
a
b
c
b
c
a
c
c
\0
a
c
a
c
b
\0
b
\0
b
\0
b
\0
\0
2021/4/9
4
蛮力法字符匹配(BF算法)
核心代码:
int BF(char S[],char T[])
{
int i,j,index;