【问题标题】:analysis of algorithm run time算法运行时间分析
【发布时间】:2015-10-23 04:51:43
【问题描述】:

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

        }

    }
}

【问题讨论】:

标签: java c++ algorithm runtime


【解决方案1】:

targetwhile 循环中的进展是:

1 2 4 8 ... 2^P

您需要log(2, n) 步骤——即n 中的log 在基础2 中。那个循环是O(log n)

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多