【问题标题】:Difference of complexity between double nested for loops? (Java)双嵌套for循环之间的复杂性差异? (爪哇)
【发布时间】:2013-08-19 20:46:02
【问题描述】:

这两个嵌套的 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
    }
}

【问题讨论】:

    标签: java performance for-loop time


    【解决方案1】:

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

    O(N^2)
    

    您可以用图形来思考:想象一个正方形,每边有 N 个单位。第二个循环访问所有单位正方形;

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

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

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

    【讨论】:

      【解决方案2】:

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

      1. 第一个循环:1 + 2 + ... + n = n(n+1)/2 = n*n/2 + n/2 -&gt; O(n**2)
      2. 第二次循环:n*n -&gt; O(n**2)

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

      【讨论】:

        猜你喜欢
        • 2016-06-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-18
        • 1970-01-01
        相关资源
        最近更新 更多