我该如何分析两种不同代码的时间复杂度分析?

时间:2016-10-02 17:04:33

标签: loops time-complexity big-o complexity-theory

我应该如何分析两种不同代码的时间复杂度分析?

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

2 个答案:

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

第一个片段:

enter image description here

第二个片段:

enter image description here

我如何提出对数:

enter image description here

来源:http://faculty.kfupm.edu.sa/ics/jauhar/ics202/Unit03_ComplexityAnalysis1.ppt,幻灯片12。