如何找到算法的时间复杂性

时间:2017-02-12 13:58:26

标签: algorithm runtime pseudocode

我应该找到这个算法的时间复杂度,但我不确定我是否完全理解如何解决这个问题。任何人都可以帮我解释如何找到这个算法的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;

我要求的是如何处理像这样的问题的解释。

1 个答案:

答案 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)