有关字符串模式匹配BF算法的时间复杂度的问题?
问题是:采用定长顺序存储结构,不依赖其他串操作的匹配算法,求子串位置的定位函数 Index(S, T, pos)
//这是算法的实现
int Index(SString S, SString T, int pos)
{ // T是非空串,也称为模式,1<=pos<=S的长度。
// 若主串S中存在和模式T相同的子串,则返回它在主串
// S中第pos个字符之后第一次出现的位置;否则返回0。
i = pos; j = 1;
while(i<=S[0] && j <= T[0]){
if(S == T[j]) { ++i; ++j;} // 继续比较后续字符
else { i = i-j+2; j =1;} // 指针后退重新开始匹配
}
if(j > T[0]) return i-T[0]; // 匹配成功
else return 0; // 匹配不成功
}
假设n = StrLength(S);m = StrLength(T);
它(参考书)说:“最好情况的复杂度为O(n+m);最坏情况的复杂度为O(n*m)”。这是怎样算出来的呢?按照我的理解,对于这道题目,它的最好情况的复杂度应为O(m),而最坏的情况为也不应该是O(m*n),而应是"某个数(小于n)*m",因为i会大于S[0],循环会提前结束。请大家帮帮我?
//这是算法的实现
int Index(SString S, SString T, int pos)
{ // T是非空串,也称为模式,1<=pos<=S的长度。
// 若主串S中存在和模式T相同的子串,则返回它在主串
// S中第pos个字符之后第一次出现的位置;否则返回0。
i = pos; j = 1;
while(i<=S[0] && j <= T[0]){
if(S == T[j]) { ++i; ++j;} // 继续比较后续字符
else { i = i-j+2; j =1;} // 指针后退重新开始匹配
}
if(j > T[0]) return i-T[0]; // 匹配成功
else return 0; // 匹配不成功
}
假设n = StrLength(S);m = StrLength(T);
它(参考书)说:“最好情况的复杂度为O(n+m);最坏情况的复杂度为O(n*m)”。这是怎样算出来的呢?按照我的理解,对于这道题目,它的最好情况的复杂度应为O(m),而最坏的情况为也不应该是O(m*n),而应是"某个数(小于n)*m",因为i会大于S[0],循环会提前结束。请大家帮帮我?
...全文
相关推荐
模式匹配—BF算法和KMP算法
模式匹配是计算机科学中一种重要的字符串处理技术,广泛应用于文本搜索、数据分析等领域。在文本处理中,我们常常需要在一个长字符串(主串)中查找一个短字符串(模式串)是否出现,这就是模式匹配问题。
字符串的模式匹配详解--BF算法与KMP算法
**KMP算法**则是对BF算法的一种优化,解决了BF算法中不必要的回溯问题。KMP算法的关键在于构造了一个名为`next[]`的数组,它记录了模式串P的每一个前缀和后缀的最大公共长度。
字符串的模式匹配详解–BF算法与KMP算法
本文主要探讨了两种常见的字符串模式匹配算法:BF(Brute Force)算法和KMP(Knuth-Morris-Pratt)算法。BF算法是一种基础的逐字符匹配方法,其基本思想是通过比较目标串S和模
c语言 字符串模式匹配BF实验
**字符串模式匹配BF算法详解**在信息技术领域,字符串模式匹配是一项基本且重要的任务,它用于在文本中查找是否存在特定的子串。
BF算法和KMP算法
在最坏情况下,BF 算法的时间复杂度将很高,特别是当目标字符串很长时。


