我应该找到这个算法的时间复杂度,但我不确定我是否完全理解如何解决这个问题。任何人都可以帮我解释如何找到这个算法的big-O表示法中的大写复杂性吗?
给出一个整数的数组A [1,...,n]
i := 1;
x := 0;
while(i <= n)
j := 1;
x := x+A[i];
while(j > 0)
y := x/(2*j);
j = j/2; //Assume here that this returns the floor of the quotient
i = 2*i;
return y;
我要求的是如何处理像这样的问题的解释。
答案 0 :(得分:0)
由于 j 在内循环开始之前始终设置为1,然后在整数除法处变为0,因此内循环将始终只运行一次。因此,可以像这样看到代码,消除对变量 j 的操作,这不会影响总体时间复杂度:
i := 1;
x := 0;
while(i <= n)
x := x+A[i];
y := x/2;
i = 2*i;
return y;
当 i 将经历2的幂序列时,剩余的循环将迭代 1 + floor(log(n))次。
假设算术运算在恒定时间内执行,时间复杂度为 O(log n)。