串的模式匹配算法——BF算法及其复杂度
2017-12-29 13:28
281 查看
S串为主串,T为待匹配串,用i、j分别指示S和T中的字符位置,i、j初值均为0。
算法步骤:(1)若当前比较的字符是s【i】==T【j】,则继续向后比较,执行(i++,j++);
(2)若当前正在比较的字符不匹配呢?那么j回溯到位置0(即令j=0),i呢?回溯到主串的i-j+1处
0 1 2 3 4 5 6 7
a b a b c a b d i=2
a b d j=2
a b d j=2;i=7(匹配完成) j=3;i=8
(3)如何判定什么时候能继续比较,什么时候匹配完成呢?
显然,匹配操作要求S串和T串都没到串尾,用语句(i
设S长n,T长m
最好时间复杂度:
最好情况下,在主串第i个位置匹配成功,最好情况下前i-1次每次第一次匹配就失配,前i-1趟比较i-1次,总共进行i-1+m次比较,i可以是从位置1到n-m+1的任何位置:
1/(n-m+1)∑i-1+m=1/2(n+m)
最坏时间复杂度:
最坏情况下,前i-1次每次比较m次才确定失配,前i-1次共比较(i-1)*m,总共比较(i-1)*m+m次,
1/(n-m+1)∑i*m=1/2m*(n-m+2)
用BF算法,每次匹配不成功,主串都要回到i-j+1位置处重新比较,可显然这个回溯操作可以跳过,S与T失配前的i-j——i位与T的前j-1位相同,那么通过T自己匹配自己,我们能否知道S和T匹配过程中可以跳几位呢?
算法步骤:(1)若当前比较的字符是s【i】==T【j】,则继续向后比较,执行(i++,j++);
(2)若当前正在比较的字符不匹配呢?那么j回溯到位置0(即令j=0),i呢?回溯到主串的i-j+1处
0 1 2 3 4 5 6 7
a b a b c a b d i=2
a b d j=2
a b d j=2;i=7(匹配完成) j=3;i=8
(3)如何判定什么时候能继续比较,什么时候匹配完成呢?
显然,匹配操作要求S串和T串都没到串尾,用语句(i
#include "stdafx.h" #include<iostream> #include<string> using namespace std; int BF_match(string &s1, string &s2) //"BF算法" { int i = 0, j = 0; int N1 = s1.size(), N2 = s2.size(); while (i <N1&&j < N2) { if (s1[i] == s2[j]) { i++; j++; } else { i = i - j + 1; j = 0; } } if (j >= N2) return (i-N2+1); return 0; } void main() { string s1, s2; cin >> s1; cin >> s2; int p; p = BF_match(s1, s2); cout << p; system("pause"); }
设S长n,T长m
最好时间复杂度:
最好情况下,在主串第i个位置匹配成功,最好情况下前i-1次每次第一次匹配就失配,前i-1趟比较i-1次,总共进行i-1+m次比较,i可以是从位置1到n-m+1的任何位置:
1/(n-m+1)∑i-1+m=1/2(n+m)
最坏时间复杂度:
最坏情况下,前i-1次每次比较m次才确定失配,前i-1次共比较(i-1)*m,总共比较(i-1)*m+m次,
1/(n-m+1)∑i*m=1/2m*(n-m+2)
用BF算法,每次匹配不成功,主串都要回到i-j+1位置处重新比较,可显然这个回溯操作可以跳过,S与T失配前的i-j——i位与T的前j-1位相同,那么通过T自己匹配自己,我们能否知道S和T匹配过程中可以跳几位呢?
相关文章推荐
- BF算法(朴素的模式匹配算法)
- 串的模式匹配算法---Horspool及其实现
- 字符串的匹配模式:朴素的模式匹配算法(BF算法)
- 4.3串的模式匹配算法(BF算法)
- 串的模式匹配算法:BF算法与KMP算法
- 【数据结构与算法】模式匹配——从BF算法到KMP算法(附完整源码)
- 【数据结构与算法】模式匹配——从BF算法到KMP算法(附完整源码)
- 9.KMP模式匹配算法实现o(n)复杂度的匹配
- 数据结构19: BF算法(普通模式匹配算法)
- 串的模式匹配算法(BF算法和KMP算法)
- 串的模式匹配算法(求子串位置的定位函数,适合一般字符串定位)
- AC 多模式匹配算法
- KMP字符串模式匹配算法实现(php)
- 大话数据结构十:字符串的模式匹配(BF算法)
- KMP 快速模式匹配算法
- KMP模式匹配算法中next和nextval数组的快速求解
- 模式匹配小算法
- 字符串多模式精确匹配(脏字/敏感词汇搜索算法)——TTMP算法 之理论如此
- 字符串模式匹配算法——BM、Horspool、Sunday、KMP、KR、AC算法一网打尽
- Bruce force 普通模式匹配算法