有关字符串模式匹配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],循环会提前结束。请大家帮帮我?