繁体   English   中英

这个带乘法的嵌套循环的时间复杂度是多少?

[英]What time complexity is this nested loop with multiplication?

educative.io 认为以下代码的复杂度为 log 2 (n!),因为var对于 n 的每个值都会增加。

但是,我的同事和我认为,因为var总是< n ,所以它不可能是 log2(n!) 因为它永远不会比 while 循环刚刚运行n花费更多的时间。 如果在 while 谓词中使用n则时间复杂度为 n*log 2 (n)。

public static void main(String[] args) {
    int n = 10;   

    for (int var = 0; var < n; var++) {   
      int j = 1;  
      while(j < var) { 
        j *= 2;  
      }
    }
}

你们都是对的。 首先,为什么它是 O(log n!) 的情况:

  • 如果将每个单独迭代的成本相加,则总运行时间为 O(log 1 + log 2 + ... + log n)。

  • 根据对数乘积法则,log a + log b = log a×b。

  • 因此,O(log 1 + log 2 + ... + log n) = O(log 1×2×...×n) = O(log n!)。

一旦建立,就可以证明O(log n!) = O(n log n) 它们实际上是相同的复杂度类。

你应该考虑这个陈述,你们都是对的:

O(n*lg(n))=O(lg(n!))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM