有人可以解释为什么以下方式计算以下代码复杂度: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))
;
答案 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 )