C++ 带if语句的嵌套for循环的时间复杂度

C++ 带if语句的嵌套for循环的时间复杂度,c++,c,big-o,C++,C,Big O,此代码的if语句如何影响此代码的时间复杂性 基于以下问题:,if语句中的for循环将运行n*n次。但在这段代码中,j超过i,因此一旦第二个循环运行,j=i^2。那么,第三个for循环的时间复杂性是什么呢?我知道第一个for循环运行n次,第二个运行n^2次,第三个运行n^2次,在触发时运行一定的次数。因此复杂性将由n*n^2(xn^2)给出,其中n是if语句为真的次数。复杂性不仅仅是O(n^6),因为if语句不是真的n次对吗 int n; int sum; for (int i = 1; i &l

此代码的if语句如何影响此代码的时间复杂性

基于以下问题:,if语句中的for循环将运行n*n次。但在这段代码中,j超过i,因此一旦第二个循环运行,j=i^2。那么,第三个for循环的时间复杂性是什么呢?我知道第一个for循环运行n次,第二个运行
n^2
次,第三个运行
n^2
次,在触发时运行一定的次数。因此复杂性将由
n*n^2(xn^2)
给出,其中
n
是if语句为真的次数。复杂性不仅仅是
O(n^6)
,因为if语句不是真的n次对吗

int n;
int sum;
for (int i = 1; i < n; i++)
{
  for (int j = 0; j < i*i; j++)
    {
      if (j % i == 0)
        {
          for (int k = 0; k < j; k++)
            {
              sum++;
            }           
        }       
    }   
}
intn;
整数和;
对于(int i=1;i
复杂性不仅仅是O(n^6),因为if语句不是真的n次对吗

不,不是

在最坏的情况下,它将是
O(n^5)
。它小于此值,因为
j%i
仅等于
0

第一个循环运行
n次。
第二个循环运行
O(n^2)
次。
第三个循环最多运行
O(n)


循环最糟糕的组合复杂度是
O(n)xo(n^2)xo(n)
,即
O(n^4)

j
i
的倍数时,
if
条件将为真;当
j
从0变为
i*i
时,这种情况会发生
i
次,因此
的第三个
循环只运行
i
次。总体复杂度为O(n^4)

for(int i=1;i
当j从
0
i*i
时,这种情况会发生
i
次,因此第三个for循环只运行
i
次。听起来不对。是不是应该是
i*i-i
times?@RSahu你在倒读。当
j
i
@RSahu的倍数时,
k
循环运行:从0到9²-1=80有多少个9的倍数?让我们数一数:0、9、18、27、36、45、54、63、72:总共9个。@AlexP,我明白你的逻辑了。谢谢你的澄清。@Ashwathama:第二个循环在外循环的每次迭代中运行O(n^2)次,是的。但控制第三个循环if的if条件为true,对于外部循环的每次迭代,只运行O(n)次。第三个循环每次运行O(n)次,因为从0到i²只有i的倍数。由于第二个循环输入了O(n)次,第三个循环输入了O(n^2)次。
for (int i = 1; i < n; i++)
{
  for (int j = 0; j < i*i; j++)       // Runs O(n) times
    {
      if (j % i == 0)                 // Runs O(n) × O(n^2) = O(n^3) times
        {
          for (int k = 0; k < j; k++) // Runs O(n) × O(n) = O(n^2) times
            {
              sum++;                  // Runs O(n^2) × O(n^2) = O(n^4) times
            }
        }
    }
}