while的运行时复杂性和组合的嵌套

时间:2015-08-20 07:10:36

标签: time-complexity complexity-theory

有人可以帮我弄清楚运行时的复杂性:

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次,但我有了感觉我错了。 如果你能告诉我你是如何得到答案的,以及如何处理这样的问题 谢谢

1 个答案:

答案 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)