我是算法和大0的新手。这个函数的增长顺序是什么?
我做了println,f(10)运行了15次。 f(20)运行31次。
我看起来像log(N)*N/2
。那么它是logarithmic
或linearithmic
?
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;
}
答案 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)
正式进行,您获得:
答案 3 :(得分:0)
O(2 ^ lgn)应该是复杂度。指数函数的增量大于线性函数.Hen 2.2 ^ lgn = O(2 ^ lgn)而不是O(n)