两段代码的时间复杂度

D_R

我们有2段代码:

int a = 3; 
while (a <= n) {
    a = a * a;
}

和:

public void foo(int n, int m) { 
    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.print(k + "\t" + j); 
        System.out.println(); 
    } 
}

它们的时间复杂度是多少?我认为第一个是:O(logn),因为它以2的幂次方逐渐发展到N。
所以也许是O(log 2 n)?

我相信的第二个是:O(nlog2n),因为它以2的跳转进行,并且也在外循环上运行。

我对吗?

米哈伊洛·格兰尼克

我相信,第一个代码将在O(Log(LogN))时间运行。用这种方式很容易理解

  1. 在第一次迭代之前,您拥有3的力量1
  2. 第一次迭代后,您拥有3的力量2
  3. 第二次迭代后,您拥有3的力量4
  4. 第三次迭代后,您拥有3的力量8
  5. 第四次迭代后,您的3的幂为16,依此类推。

在第二个代码中,第一段代码将以O(LogM)时间工作,因为每次都将i除以3。第二段代码C倍(在您的情况下C等于100)将执行O(LogN)操作,因为您每次将j乘以2,所以它在O(CLogN)中运行,并且复杂度为O(LogM + CLogN) )

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章