繁体   English   中英

双嵌套for循环之间的复杂性差异? (Java)

[英]Difference of complexity between double nested for loops? (Java)

这两个嵌套的for循环在性能和复杂性方面有什么区别?

for(int i = 0; i < l.length; i++) {
    for(int j = 0; j <= i; j++) {
        //do something
    }
}

和:

for(int i = 0; i < l.length; i++) {
    for(int j = 0; j < l.length; j++) {
        //do something
    }
}

第一个循环的速度大约是第二个循环的两倍,但是就渐近时间复杂度而言,它们是相同的:

O(N^2)

您可以从图形上进行思考:想象一个正方形,每边有N个单位。 第二个循环访问所有单位平方。

######
######
######
######
######
######

第一个循环访问属于覆盖正方形一半的三角形的点:

#
##
###
####
#####
######

两个循环具有相同的渐近行为-O(n ** 2)

  1. 第一个循环: 1 + 2 + ... + n = n(n+1)/2 = n*n/2 + n/2 -> O(n**2)
  2. 第二个循环: n*n -> O(n**2)

所以第二个循环的速度是第一个循环的两倍,而渐近是相同的

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM