我无法找出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错了,该如何计算并纠正我
答案 0 :(得分:1)
简短答案:如果“ 某些陈述”在恒定时间内运行,则算法B 在 O(n)<中运行< / em>。
让我们先分析一下内循环:
for(j=0; j<i; j++)
some statement
由于j
从0
(包括)迭代到i
(不包括),因此这意味着它将执行i
操作。
现在我们可以分析外部部分了
for(i=n; i>=1; i/=2)
// i operations
这里i
从n
开始,每次除以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)。