以下代码段的时间复杂度以及如何计算它。
function(int n){
for(int i = 1 ; i<=n ; i++){
for(int j=1 ; j<=n; j+=i){
System.out.println("*");
}
}
答案 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)。