Time complexity 循环的时间复杂性 外部循环执行n次,而内部循环执行?所以总的时间是n*。

Time complexity 循环的时间复杂性 外部循环执行n次,而内部循环执行?所以总的时间是n*。,time-complexity,Time Complexity,我需要学习求和吗?如果需要,还有什么书可以参考吗? for(int i=1;i<=n;i++) for(int j=1;j<=n;j+=i) printf("*"); 对于(int i=1;i这个问题可以通过检查来解决: n = 16 i | j values | # terms 1 | 1, 2, ..., 16 | n 2 | 1, 3, 5, ..., 16 | n / 2 .. | ..

我需要学习求和吗?如果需要,还有什么书可以参考吗?

for(int i=1;i<=n;i++) 
  for(int j=1;j<=n;j+=i)
    printf("*");

对于(int i=1;i这个问题可以通过检查来解决:

n = 16

i  |  j values         | # terms
1  |  1, 2, ..., 16    | n
2  |  1, 3, 5, ..., 16 | n / 2
.. |  ..               | n / 3
16 |  16               | n / n
在上表中,
i
是外循环值,
j值
表示内循环的迭代次数。通过检查,我们可以看到循环将采用
n*(1+1/2+1/3+…+1/n)
steps。这是一个有界谐波级数。如图所示,上述表达式在
n
方面没有闭合形式。但是,如图所示,有一个上界
O(n*ln(n))


因此,您的两个循环的运行时间是
O(n*ln(n))

我相信它的时间复杂性是
O(n*log(n))


让我们选取一些任意的自然数i,看看对于给定的i,内部循环需要多少步。对于这个i,从j=1到j,
printf()需要多少次
run,给定一个特定的值
n
?这就是这对嵌套循环的时间复杂度。@OllieJones那么你是说对于给定的值k,时间复杂度将是O(k).假设n=5,内部循环对i=1执行5次,迭代i到2,内部循环执行3次,现在i=3内部循环执行2次,i=4内部循环执行2次。它随i而变化。我认为它打印地板(n/1)+地板(n/2)+地板(n/n)时间。在我看来,运行时间就像一个调和数。这似乎表明没有封闭形式。
summation =  1 + (1+i) + (1+2i) + ... (1+ki) 
numsteps = n/1 + n/2 + n/3 + ... n/n
         = n(1 + 1/2 + 1/3 + ... 1+n)
numsteps = n(ln(n))