这个算法的复杂性(大O)是多少?

时间:2011-04-15 18:15:02

标签: algorithm complexity-theory big-o

此算法查看字符串并尝试查找另一个字符串。我猜,逻辑很简单。虽然,我需要帮助发现它的复杂性。

int find(string mString, string lookUp)
{
    int i, z, j, m = mString.size(), n = lookUp.size(), broken = 0, st = 0;
    for(j = 0, i = 0; i < m; i++)
    {
        if(mString[i] == lookUp[j])
        {
            if(broken)
            {
                //go back and see if we're on the good path
                broken = 0;
                for(z = 0; z < j; z++)
                {
                    if(broken) break;
                    if(mString[i-z] == lookUp[j-z])
                        broken = 0;
                    else
                        broken = 1;
                }
                if(!broken) st = i - j + 1;
            }
            if(j + 1 != n)
                j++;
        }
        else
            broken = 1;
    }
    return st;
}

有人可以帮帮我吗?

谢谢。

2 个答案:

答案 0 :(得分:2)

在处理big-O和循环时,我问自己这个问题:

  

每个循环最多可以运行多少次?

在您的示例中,

  1. 外部循环最多只运行一次。
  2. 内循环最多只运行一次。
  3. 对于外循环的每次迭代,内循环最多将运行`n`次
  4. 这有助于澄清您的想法吗?

答案 1 :(得分:0)

O(n ^ 2)是该算法的最终复杂性。