算法运行时间分析

analysis of algorithm run time

本文关键字:运行时间 算法      更新时间:2023-10-16

大0运行时间是多少?我最困惑的是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;
        }
    }
}

targetwhile环中的级数为:

1 2 4 8 ... 2^P

你需要log(2, n)步骤-即2nlog。这个循环是O(log n)

首先,看起来您忘记放大括号了。我是你的代码,事实上,整个循环并不在嵌套的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)