给定代码的时间复杂度

Time complexity of the given code

本文关键字:时间复杂度 代码      更新时间:2023-10-16

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

    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条件的此类循环的复杂性吗?

内部循环O(1) 。外循环的复杂性取决于代码对n做什么,而你没有显示代码,所以它可以是任何东西。

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

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

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)

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

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