有关字符串模式匹配BF算法的时间复杂度的问题?

tufengtao tufengtao 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
问题是:采用定长顺序存储结构,不依赖其他串操作的匹配算法,求子串位置的定位函数 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],循环会提前结束。请大家帮帮我?
...全文

相关推荐

评论 3
收藏 已收藏
分享
返回顶部
tufengtao
数据结构与算法 33,026 成员 35,334 内容