C++ 带if语句的嵌套for循环的时间复杂度
此代码的if语句如何影响此代码的时间复杂性 基于以下问题:,if语句中的for循环将运行n*n次。但在这段代码中,j超过i,因此一旦第二个循环运行,j=i^2。那么,第三个for循环的时间复杂性是什么呢?我知道第一个for循环运行n次,第二个运行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
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
}
}
}
}