我应该如何分析两种不同代码的时间复杂度分析?
sum=0;
for(i=1; i<=n; i++)
for(j=1; j<=n; j*=2)
sum++;
如果我将外循环更改为内循环会有所不同吗?
sum=0;
for(j=1; j<=n; j*=2)
for(i=1; i<=n; i++)
sum++;
他们都是O(nlogn)吗?
编辑:第二个代码是否会导致几何系列,因为内部循环的数量似乎受到外循环的影响?如果是,那么它不是O(nlogn)吗?
答案 0 :(得分:0)
它们的复杂度等于O(n log n)。
请注意,sum ++是O(1)操作。
这是因为每次迭代加倍(第一个代码中的j和第二个代码中的i)将仅迭代log n次。
这里,由于循环变量并不依赖于n,因此将外循环更改为内循环不会产生任何差异。
编辑(基于OP&#39;编辑):
我几乎没有得到几何系列的意思。但是,如果您正在谈论代码的数学行为,我必须补充说,它不是几何系列,就像外循环的每次迭代一样,内循环迭代n次。
因此,对于log n外循环迭代,代码的复杂度= O(log n * n * 1)= O(n log n)。
此外,内环不会受到外环的影响,因为它完全依赖于n。
答案 1 :(得分:0)
我如何提出对数:
来源:http://faculty.kfupm.edu.sa/ics/jauhar/ics202/Unit03_ComplexityAnalysis1.ppt,幻灯片12。