Algorithm 如何找到上述代码的时间复杂度 对于(i=0;i

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)值乘以以获得总时间


希望这会有所帮助!

上述代码的时间复杂度为: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。如果你认为不是,我在上面清楚地说明了我的解释