[英]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 + 2 + ... + n = n(n+1)/2 = n*n/2 + n/2 -> O(n**2)
n*n -> O(n**2)
所以第二个循环的速度是第一个循环的两倍,而渐近是相同的
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.