给定代码的时间复杂度

时间:2014-02-12 14:49:41

标签: c++ time-complexity

有人能告诉我波纹管代码的复杂性。

    std::cin>>n1;
    int ctr=0;
    for(int i=2;i<=n1;i++)
    {
      if(i>=n/2&&ctr==0)
      {
        cout << " You entered a prime no";
        break;
       }
    else if(n1%i==0)
      {
        ctr++;
        cout<<i<<" ";
        n1/=i;
      }
}

有人可以建议如何计算涉及多个if-else条件的此类循环的复杂性?

3 个答案:

答案 0 :(得分:2)

内循环是O(1)。外循环的复杂性取决于代码对n的作用,并且您没有显示代码,因此它可以是任何代码。

关于一般准则:渐近复杂性始终与数量有关。通常,这被视为输入大小(无论对于要解决的问题意味着什么)并且表示为n。在你的情况下,它很可能是变量n,因为它用于循环停止条件。

一旦知道了您想要复杂性的数量(n),就很简单了。不依赖n的操作是O(1)。对O(f)的每个值执行n工作量的操作为O(n * f),其中f确实可以是n的函数。递归会变得更棘手,但这是基本的概述。

答案 1 :(得分:1)

int n;
std::cin >> n;

// O(oo) e.g. O(infinite)
while( n > 0 ) {
    // for loop is O(1)
    for(int i = 1 ; i <= 9 ; i++) {
       if( n % i == 0) {
           //piece of code involving O(1)complexity.
       }
    }
    // this makes the while loop O(1)
    if ( n == 10000000000000 ) {
        break;
    }
}

此算法为O(1)

答案 2 :(得分:0)

for循环的复杂性是O(n),其中n是迭代次数......

这里n=9,但结论是循环一般是稳定的(O(1))并且与迭代次数无关

是错误的。