示例代码的时间复杂度

时间:2013-06-05 14:27:38

标签: complexity-theory

我一直在努力计算项目的时间复杂度。有人可以指导我如何计算复杂性,如果循环是这样的。

while (k < K){

    for( int i=0; i<M; i++){

        // if condition
        // sets i = dp
    }

    for(int i=dp; i<M; i++){

        for(int j=0; j<=i; j++){

            // single stmt
        }

        // if else condition
        function call(); // assume this has complexity of N
    }
    k++;
}

请提供一些有关如何识别存储空间复杂性的建议。

3 个答案:

答案 0 :(得分:1)

此代码的完整性为K* (M+(M*((M*M)/2+(M/2)+N))

  K-times for while loop
  M-times for first for loop
  M*((M*M)/2+(M/2)+N) - for nested for loop

你的嵌套for循环产生半矩阵示例

  1
  11
  111
  1111

由于全矩阵复杂度为M*M,因此半矩阵将为(M*M)/2   +我们采取整个对角线,我们必须添加(M/2)

答案 1 :(得分:1)

时间复杂度由代码执行的迭代次数计算。因此,当我们剖析代码时,有一个顶级循环将迭代K次,因此开始的复杂性是K.然后在该循​​环内有多个循环,每个嵌套循环复杂性将乘以顶级循环。所以在顶级循环中,我们有两个for循环,一个具有复杂度M,另一个具有嵌套循环,使得该循环的复杂性为M * j。 N为被调用的函数所以将整个代码的复杂性加在一起是 K *(M +(M *(j + N)))

  • K - &gt;首先是顶级循环
  • M - &gt;对于第一个嵌套循环
  • M *(j + N) - >对于第二个嵌套循环,它包含一个嵌套循环和一个函数调用

答案 2 :(得分:0)

此代码的完整性为K *(M +(M *(M + N)),它是最大可能性。

但仍然按照你的代码,它还取决于dp设置为什么,可以降低复杂性。

那么它可以是

此代码的复杂度为 K *(M +(M *((M-dp)+ N))。