Time complexity 内部循环是如何执行的;“不适用”;时代?
我对代码片段的时间复杂性有疑问,并且不太理解给出的解决方案Time complexity 内部循环是如何执行的;“不适用”;时代?,time-complexity,big-o,asymptotic-complexity,Time Complexity,Big O,Asymptotic Complexity,我对代码片段的时间复杂性有疑问,并且不太理解给出的解决方案 function (n) { for(int i =0 ; i < n ; i ++){ for(int j = 0 ; j <= n ; j += i){ printf("*"); } 函数(n){ 对于(int
function (n) {
for(int i =0 ; i < n ; i ++){
for(int j = 0 ; j <= n ; j += i){
printf("*");
}
函数(n){
对于(int i=0;i 对于(int j=0;j有两个循环,一个是递增的i
,一个是递增的j
给定固定的i
,对于j
循环的每次循环,j
增加i
,直到j
达到n
因此,每次迭代中j
的值为:
j
j + i
j + 2i
...
j + (n/i - j/i)i
正如您所看到的,它运行O(n/i)次。您确定这是正确的代码吗?内部循环变量(j
)在第一个循环中,i
是零,因此j
永远不会改变,这个循环也永远不会终止。j
将随着j
的增加而改变,而内部循环在j>n
时终止。上面的代码是正确的。如果你看代码,你会看到这一点j
没有递增。表达式j+=i
为外部循环的第一次迭代将0
添加到j
(i
初始化为i=0
).j
将永远不会改变,循环也永远不会终止。非常感谢澄清了这个疑问。但我有一个疑问。为什么最后的迭代不能是j+ni
?然后它运行O(n)次。