我无法弄清楚此代码的时间复杂性:
public static void myfun1 (int n) {
System.out.println("n = " + n);
for (int k = 1; k <= n / 2; k++){
System.out.println(k);
for(int m = 1; m <= k; m++){
System.out.println(k + ", " + m);
}
}
}
public static void main(String[] args){
myfun1(8);
}
当我为n = 8运行它时,输出如下:
我认为第一个循环将运行(n / 2)并且我必须将它乘以内循环。我遇到麻烦的是内循环。通常我会假设两个嵌套循环是(n ^ 2)但我觉得第一个循环中的n / 2是正确的但我不确定内循环是如何与它相关的。我看到从每个k的输出中有m个循环完成我的m。出于某种原因,我的大脑无法用n来翻译这种关系。有人可以给我一些指导吗? 提前谢谢。
答案 0 :(得分:1)
您的内循环第一次运行1次
第二次2次......最多n/2
因此它的运行方式类似于从1到n/2
= ((n/2+1)*n)/4
的整数之和
(8,它运行10次,添加一个计数器以确保)
因此,复杂性是O(n ** 2)。