二次时间复杂度:为什么以下代码以这种方式计算?

时间:2017-01-09 18:10:19

标签: python python-2.7 time-complexity

有人可以解释为什么以下方式计算以下代码复杂度:1 + 2 + 3 + 4 + ... +(n-2)+(n-1)+ n = O(n ^ 2)

DataStream
   .pipeline(
       request.get('http://example.com/api'),
       JSONStream.parse('attributes.items.*')
   )
   .filter((item) => item.attibute)  // filter out ones without attribute
   .reduce((acc, item) => {
       acc[item.attribute] = item.value;
       return acc;
   .then((result) => request.put('http://example.com/api2', result))
;

1 个答案:

答案 0 :(得分:8)

它不是O(n)而是O(n 2 )。这是因为你有两个循环,外部循环从0迭代到n,内部循环从0到一次性变量大小(i)在每次迭代中,它将生成以下范围:

range(0,0+1) # 1 iteration 
range(0,1+1) # 2 iteration
range(0,2+1) # 3 iteration
   ...

因此,最后,你将有1 + 2 + 3 + ... + n次迭代,其复杂性计算为fllows:

n *(n + 1)/ 2 = 1/2 n 2 + 1 / 2n = O(n 2