【问题标题】:What is order of complexity here?这里的复杂性顺序是什么?
【发布时间】:2020-05-11 19:55:18
【问题描述】:
   for(int i = n; i > 0; i/=3){
       for(int j = 0; j < i; j++){
           System.out.println("Hello");
       }
   }

O(n) 还是O(nlog n)

外部循环将运行 log3 n 次 - 因为迭代器被常数 3 分解。

因此,外部循环将被调用 log3 n

属于O(nlog n)

【问题讨论】:

    标签: algorithm data-structures time-complexity complexity-theory


    【解决方案1】:

    这部分n + n/3 + n/9 + ..... = n/3 (1 + 1/2 + 1/3 + ....)不正确。

    其实

    n + n/3 + n/9 + ..... = n( 1 + 1/3 + 1/9 +...)

    1 + 1/3 + 1/9 + ... = a / (1-r) 其中a = 1r = 1/3

    收敛到3/2

    因此复杂度为O(n*(3/2))O(n)

    实际上我会这样想:让我们假设外循环为您提供了您想要解决的问题的输入大小。 所以内部循环就像编写多个不同大小的 for 循环,如下所示:

    for ( k = 1 to n )
    
    for ( k = 1 to n/3 )
    
    for ( k = 1 to n/9 )
    
    ....
    

    如果您查看这些 for 循环,复杂性似乎会收敛到 O(n),因为 for 循环的数量取决于 n 并且是减少,但如果它是一些常数,例如 @987654334 @ 那就是O(n*k)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-28
      • 2011-11-23
      • 1970-01-01
      • 2013-10-31
      • 2014-08-06
      • 1970-01-01
      • 2012-09-17
      相关资源
      最近更新 更多