如何查找以下代码段的时间复杂度

时间:2016-08-12 09:56:09

标签: time-complexity big-o

以下代码段的时间复杂度以及如何计算它。

 function(int n){
        for(int i = 1 ; i<=n ; i++){
            for(int j=1 ; j<=n; j+=i){
                System.out.println("*");
        }
    }

1 个答案:

答案 0 :(得分:1)

让我们考虑完成的总工作。正如你在评论中提到的那样,内环在i = 1时运行n次,然后在i = 2时运行n / 2次,然后在i = 3时运行n / 3次等(忽略舍入误差)。这意味着完成的工作总量为

  

n + n / 2 + n / 3 + n / 4 + ... + n / n

     

= n(1 + 1/2 + 1/3 + 1/4 + ... + 1 / n)

括号中的术语是nth harmonic number,表示为H n ,因此整体工作大致为nH n 。已知H n =Θ(log n),因此总工作为Θ(n log n)。