这个功能的增长顺序是什么?

时间:2014-05-21 20:56:57

标签: time-complexity big-o

我是算法和大0的新手。这个函数的增长顺序是什么?

我做了println,f(10)运行了15次。 f(20)运行31次。

我看起来像log(N)*N/2。那么它是logarithmiclinearithmic

   static long f (long N) {
        long sum = 0;
        for (long i = 1; i < N; i *= 2)
            for (long j = 0; j < i; j++)
                sum++;
        return sum;
    }

4 个答案:

答案 0 :(得分:0)

内环j计数i次 - &gt; max是n

外循环从0到n计数,每次乘以2,所以它是lgn次。

所以总数为o(nlgn)

答案 1 :(得分:0)

运行时为O(n)。要看到这一点,请注意内循环在第一次迭代时运行1次,在下一次迭代时运行2次,在下一次迭代时运行4次,更通常在2 上运行2次 i 次我迭代。外循环在lg n次迭代后停止,因为它保持加倍,因此完成的总工作是

  

1 + 2 + 4 + 8 + ... + 2 lg n

这是sum of a geometric series并计算出2 lg n + 1 - 1 = 2·2 lg n - 1 = 2n - 1 = O (n)的

希望这有帮助!

答案 2 :(得分:0)

正式进行,您获得:

enter image description here

答案 3 :(得分:0)

O(2 ^ lgn)应该是复杂度。指数函数的增量大于线性函数.Hen 2.2 ^ lgn = O(2 ^ lgn)而不是O(n)