大O运行时间是多少?我对while循环运行时很困惑。我知道两个for循环的运行时间都是O(n)。
cin >> n >> min >> max;
for(int i = min; i < n; i++) {
for(int j = 1; j < max; j++) {
total = 1;
while(total < n) {
total = total *2;
}
}
}
答案 0 :(得分:3)
target
循环中while
的进展为:
1 2 4 8 ... 2^P
您需要log(2, n)
个步骤 - 即基座log
中的n
2
。该循环为O(log n)
。
答案 1 :(得分:1)
首先,看起来你忘了戴牙箍了。我是你的代码,因为它是整个循环不在嵌套的for循环中。实际上,我们有一个无意义的嵌套for循环,只需将total设置为1,然后是一个独立的while循环。第一个的复杂度是O((n - min)* max),第二个是O(log(n))。总时间复杂度是这些的总和。
你的真正含义可能是:
for(int i = min; i<n; i++) {
for(int j =1; j< max; j++) {
total = 1;
while(total < n) {
total = total *2;
}
}
}
这里,我们在嵌套的for循环中有整个循环。时间复杂度是我们之前计算的倍数,因此O((n - min)* max * log(n))。如果min和max是常数,那么我们可以减少到O(n log n)