有人可以帮我弄清楚运行时的复杂性:
public void f(int m,int n){
int i = m;
while(i > 100){
i = i / 3;
}
for(int k = i; k >= 0; k--){
for(int j = 1; j < n; j *= 2){
System.out.println(k + "/t" + j);
}
System.out.println();
}
}
while部分我真的不知道如何处理...我认为嵌套循环是o(in)因为外循环运行i次而内循环运行n / 2次,但我有了感觉我错了。 如果你能告诉我你是如何得到答案的,以及如何处理这样的问题 谢谢
答案 0 :(得分:0)
不,嵌套for循环的运行时间为O(i*logN)
,因为我们每次迭代都会乘以j
而不是+
。 i
是一个小于100的常数值
所以嵌套for循环的总运行时间是
O(i * logN) <= O(100 * logN) = O(logN)
while循环运行了多少次?类似地,每次迭代它除以3,因此while循环的总运行时间为O(logM)
(基数是常数,所以它并不重要,请参阅Big O notation Log Base 2 or Log Base 10)
因此,Big O表示法中此函数的运行时复杂性为
O(logM + logN)