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))