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

tufengtao 2006-11-06 04:47:59
问题是:采用定长顺序存储结构,不依赖其他串操作的匹配算法,求子串位置的定位函数 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],循环会提前结束。请大家帮帮我?
...全文
1016 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
LiChenYue 2006-11-18
  • 打赏
  • 举报
回复
你认为是O(m),也许是因为N的第一个字符就能和M配上,对吧?而书上的意思是N中指针不回退的情况下的最好情况,
而最坏情况是一个都配不上,就是N*M了!
LiChenYue 2006-11-07
  • 打赏
  • 举报
回复
不要管什么复杂度,一般程序设计根本没必要!
tufengtao 2006-11-06
  • 打赏
  • 举报
回复
????

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧