嵌套循环时间复杂度for(i = n; i> 0; i / = 2)VS for(i = n; i> 0; i / = 2)for(j = 0; j <i; j ++)

时间:2019-06-13 13:58:52

标签: java data-structures time-complexity big-o

我无法找出Algo A和Algo B的时间复杂度,请帮帮我!!

算法A:

for(int i=n; i>=1; i/=2)
    some statement  

如果我没记错,

i = n;
i = n / 2 to the power of 1;
i = n / 2 to the power of 2;
i = n / 2 to the power of 3;
i = n / 2 to the power of 4;
.................
.................
i = n / 2 to the power k;

Algo A terminate when,

n / 2 to the power of k < 1
Therefore k = log n, Algo A take logn time;

算法B:

for(i=n; i>=1; i/=2)
   for(j=0; j<i; j++)
      some statement

伙计们,我无法找出Algo B的时间复杂度,因此如果我对Algo A错了,该如何计算并纠正我

1 个答案:

答案 0 :(得分:1)

简短答案:如果“ 某些陈述”在恒定时间内运行,则算法B O(n)<中运行< / em>。

让我们先分析一下内循环:

for(j=0; j<i; j++)
    some statement

由于j0(包括)迭代到i(不包括),因此这意味着它将执行i操作。

现在我们可以分析外部部分了

for(i=n; i>=1; i/=2)
    // i operations

这里in开始,每次除以2,并且每次迭代,我们执行i个任务。

因此,这意味着任务总数为:

 n + n/2 + n/4 + n/8 + ... + 1

以上是已知序列:

 m
---
\          -k           -m
/     n * 2     = (2 - 2  ) n
---
k=0

此处k的范围是 0 log 2 n ,因此指令总数为 (2-2 log 2 n )×n (2-1 -n)×n ,因此 2×n-1 。我们可以将其简化为 O(n)