Arrays 当i为外环且内环以j=i+开始时双环的时间复杂度;1.
我试图更清楚地了解我在下面写的算法的复杂性:Arrays 当i为外环且内环以j=i+开始时双环的时间复杂度;1.,arrays,loops,time,double,complexity-theory,Arrays,Loops,Time,Double,Complexity Theory,我试图更清楚地了解我在下面写的算法的复杂性: left = 1 right = 1 for i=0; i < array.len; i ++: j = i+1 for j; j < array.len; j++: right *= array[j] tmp[i] = array[idx] left *= array[idx] right = 1 return tmp left
left = 1
right = 1
for i=0; i < array.len; i ++:
j = i+1
for j; j < array.len; j++:
right *= array[j]
tmp[i] = array[idx]
left *= array[idx]
right = 1
return tmp
left=1
右=1
对于i=0;i
如果我们将数组大小定义为n,那么外循环为O(n),但内循环并不是一直迭代n-1次,只有在i=0时才迭代第一次
那么,复杂性是什么呢?
O(n)用于外环和
O(n-j)表示内环?
那么,可能是O(n(n-j))?哪个是O(n^2)
请帮忙。是的,O(n^2)是时间复杂度。第一个循环运行n次。第二个循环在第一个循环的每次迭代中运行n次。n*n=n^2你说得对:)注意“第二个循环每次迭代运行n次”–
j
从i+1开始,而不是0.ahh,是的,公平点。虽然(n)*(n-1)仍将被视为n^2。(n^2-n我们只是去掉了n)@knowKnothing“complete”big-O符号仍然是O(n^2)
。然而,内部循环的“精确”执行次数是n*(n-1)/2
@meowgoesthedog thx,我理解n*(n-1),但在这种情况下,1/2因子对我来说有点神秘。然而,我知道在某些情况下,比如从两端开始迭代数组start_idx和last_idx,以及开始迭代数组start_idx++和last_idx,会产生O(n/2)的复杂度。这是相似的吗?nvm,我相信类似的内循环迭代减半是由上面的j=I+1完成的。谢谢大家。@knowKnothing如果您不确定1/2因子的来源,请参阅。但它只是一个乘法常数因子,所以被O表示法丢弃。