算法运行时间分析

时间:2015-10-23 04:51:44

标签: java c++ algorithm runtime

大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;

        }

    }
}

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)