循环相关的时间复杂度

时间:2015-04-26 07:52:12

标签: algorithm loops time-complexity complexity-theory probability

string str = "abcdefghijklmnopqrstuvwxyz";
int sum = 0;
for(int i=0; i<str.length; i++)
{
    int val = str[i];
    while(val > 0)
    {
       sum = val % 62;
       val = val / 62;
    }
}

我知道父循环执行n + 1次,子循环执行(val)^(1/62)次。对于父循环时间复杂度将是O(n)但是没有找到计算子循环的方法。那么,上述计划的时间复杂度是多少?。

提前致谢。

1 个答案:

答案 0 :(得分:3)

将字符串的长度写为n。

n = str.length();

现在,外部for循环遍历String的整个长度,即 n 次。因此,外部for循环复杂度为O(n)。

谈到子循环,内部while循环执行(val)^(1/62)次。因此,您可以将内部循环复杂度视为 O(log 62 val)

所有其他陈述都需要时间复杂度。

因此,净时间复杂度= O(n * log 62 val)

最后一步是因为: -

  

如果f1(n)= O(g1(n))且f2(n)= O(g2(n)),则f1(n)* f2(n)= O(g1(n)   * g2(n))

如评论中Edward Doolittle所述,您可以将其缩减为 O(n * log 2 val),因为日志库可以转换为基数2只有一个恒定的除法(通过 log 2 62 )。