Algorithm 如何找到上述代码的时间复杂度 对于(i=0;i
上述代码的时间复杂度为:n x n x n=n^3+1+1=n^3+2,用于3个循环加上两个常数。由于n^3的增长率最大,可以忽略常量值,因此时间复杂度为n^3 注:将每个循环取为(n),并将每个循环中的(n)值乘以以获得总时间Algorithm 如何找到上述代码的时间复杂度 对于(i=0;i,algorithm,time-complexity,nested-loops,Algorithm,Time Complexity,Nested Loops,上述代码的时间复杂度为:n x n x n=n^3+1+1=n^3+2,用于3个循环加上两个常数。由于n^3的增长率最大,可以忽略常量值,因此时间复杂度为n^3 注:将每个循环取为(n),并将每个循环中的(n)值乘以以获得总时间 希望这会有所帮助!上述代码的时间复杂度为:n x n x n=n^3+1+1=n^3+2,用于3个循环加上两个常量。由于n^3的增长率最大,可以忽略常量值,因此时间复杂度为n^3 注:将每个循环取为(n),并将每个循环中的(n)值乘以以获得总时间 希望这会有所帮助!来自
希望这会有所帮助!上述代码的时间复杂度为:n x n x n=n^3+1+1=n^3+2,用于3个循环加上两个常量。由于n^3的增长率最大,可以忽略常量值,因此时间复杂度为n^3 注:将每个循环取为(n),并将每个循环中的(n)值乘以以获得总时间 希望这会有所帮助!来自以下问题: 因为j小于k,不小于n 这是完全错误的,我想这是让你陷入困境的假设。我们知道k可以取什么值。在你的代码中,它的范围是1到n(包括)。因此,如果j小于k,它也小于n 从评论中: 我知道唯一的输入是n,但在第二个for中,依赖于k,而不是n 如果一个变量依赖于任何东西,它取决于输入。
j
依赖于k
,而它本身依赖于n
,这意味着j
依赖于n
但是,这还不足以推断复杂性。最后,您需要知道调用了多少次printf
不管发生什么情况,外部for循环都会执行n次。我们可以考虑这一点
内部for循环的执行次数取决于k,k在while循环中被修改。我们知道k只取1到n之间的每个值一次。这意味着内部for循环将首先执行一次,然后执行两次,然后执行三次,依此类推,直到n次
因此,丢弃外部for循环,printf
被称为1+2+3+…+n
次。这个总和是众所周知且易于计算的:1+2+3+…+n=n*(n+1)/2=(n^2+n)/2
最后,调用printf
的总次数是n*(n^2+n)/2=n^3/2+n^2/2=O(n^3)
。这就是您的时间复杂性
关于这类代码的最后一点注意事项。一旦您多次看到相同的模式,您就会快速开始识别所涉及的复杂性。然后,当您看到带有因变量的嵌套循环时,您立即知道每个循环的复杂性是线性的
例如,在下面的例子中,f
被称为n*(n+1)*(n+2)/6=O(n^3)
次
for(i=0; i<n; i++) // time complexity n+1
{
k=1; // time complexity n
while(k<=n) // time complexity n*(n+1)
{
for(j=0; j<k; j++) // time complexity ??
printf("the sum of %d and %d is: %d\n",j,k,j+k); time complexity ??
k++;
}
(i=1;i来自问题:
因为j小于k,不小于n
这是完全错误的,我想这是让你陷入困境的假设。我们知道k可以取什么值。在你的代码中,它的范围是1到n(包括)。因此,如果j小于k,它也小于n
从评论中:
我知道唯一的输入是n,但在第二个for中,依赖于k,而不是n
如果一个变量依赖于任何东西,它取决于输入。j
依赖于k
,而它本身依赖于n
,这意味着j
依赖于n
但是,这还不足以推断复杂性。最后,您需要知道调用了多少次printf
不管发生什么情况,外部for循环都会执行n次。我们可以考虑这一点
内部for循环的执行次数取决于k,k在while循环中被修改。我们知道k只取1到n之间的每个值一次。这意味着内部for循环将首先执行一次,然后执行两次,然后执行三次,依此类推,直到n次
因此,丢弃外部for循环,printf
被称为1+2+3+…+n
次。这个总和是众所周知且易于计算的:1+2+3+…+n=n*(n+1)/2=(n^2+n)/2
最后,调用printf
的总次数是n*(n^2+n)/2=n^3/2+n^2/2=O(n^3)
。这就是您的时间复杂性
关于这类代码的最后一点注意事项。一旦您多次看到相同的模式,您就会快速开始识别所涉及的复杂性。然后,当您看到带有因变量的嵌套循环时,您立即知道每个循环的复杂性是线性的
例如,在下面的例子中,f
被称为n*(n+1)*(n+2)/6=O(n^3)
次
for(i=0; i<n; i++) // time complexity n+1
{
k=1; // time complexity n
while(k<=n) // time complexity n*(n+1)
{
for(j=0; j<k; j++) // time complexity ??
printf("the sum of %d and %d is: %d\n",j,k,j+k); time complexity ??
k++;
}
对于(i=1;i首先,简化代码以显示主循环。因此,我们有一个结构:
for (i = 1; i <= n; ++i) {
for (j = 1; j <= i; ++j) {
for (k = 1; k <= j; ++k) {
f();
}
}
}
for(int i=0;i 对于(int k=1;k首先,简化代码以显示主循环。因此,我们有一个结构:
for (i = 1; i <= n; ++i) {
for (j = 1; j <= i; ++j) {
for (k = 1; k <= j; ++k) {
f();
}
}
}
for(int i=0;i 对于(int k=1;k复杂度在哪种情况下,最好的,最差的,等等?@WaqasShabbir这有什么关系?据我所知,唯一的输入是n
。最糟糕的复杂度。我知道唯一的输入是n,但第二个for取决于k,而不是n。它将是n*n
,最后一个循环也通过k
complete与n
相关xity在哪种情况下,最好的,最坏的,等等?@WaqasShabbir这有什么关系?据我所知,唯一的输入是n
。最糟糕的复杂性。我知道唯一的输入是n,但在第二个for中取决于k,而不是n。它将是n*n
,最后一个循环也通过k
与n
相关。时间复杂性非常大从n^3+2
,即使它是O(n^3)
。此外,这并不能解释为什么将最内部的循环复杂性设为O(n)
“将每个循环设为(n)”?为什么?请解释。最里面的循环取决于k。你的答案是正确的。请正确解释答案背后的原因…@User\u Targaryen。如果你认为不是,我在上面清楚地说明了我的解释