显示函数

时间:2016-11-06 17:15:16

标签: java algorithm performance time-complexity

我有以下代码

int sum = 0; 
for (int i = 1; i <= n; i = i*2) 
{ 
   for (int j = 1; j <=n; ++j) 
   { 
       ++sum;
    }
}

我有以下分析,即使答案是正确的,根据某些人的说法是错误的,但我不明白为什么。

所以,我做了以下,

n = 1; i = 1; j is being executed 1 time  
n = 2; i = 2; j is being executed 2* 1 time  
n = 3; i = 4; j = 4 * 3 times  
n = 4; i = 8; j = 8 * 4 times  
n = 5; i = 16; j = 16 * 5 times  
......  
n = k; i = 2^k; j = n * 2^k times  

因为2 ^ k是log(n)

该函数的增长顺序是nlog(n),它是线性增长率。

我在分析中做错了什么?如果我有任何错误,请告诉我,因为这让我很困惑。谢谢!我想将这个分析应用于更复杂的嵌套循环,但在我这样做之前,我需要知道我做错了什么。

更新:我花了很多时间自己试图找出我的分析错误的原因。感谢@YvesDaoust,我想我已经开始多了解它了。

1 个答案:

答案 0 :(得分:0)

内循环的主体执行n次。

对于从1到n的2的所有幂,执行外循环的主体,并且它们大约是log2(n),因此全局复杂度

O(n.log(n))