确定Big-O复杂性

时间:2014-09-17 21:46:41

标签: c big-o

我在下面有一些嵌套的while循环代码。我认为外部while循环的复杂性,但我不确定如何为内部循环,因为它有&&。有人可以向我解释如何确定内循环的复杂性吗?

int result = 0;
int i = 0;
while (i < n / 2){                // O(log N)
    result += arr[i];
    i += 1;
    while (i >= n / 2 && i < n){  //Not sure how the parameters change it. O(log N) ? 
        result += arr[i];
        i += 1;
    }
}
printf("%d\n", result);

2 个答案:

答案 0 :(得分:4)

外循环递增直到i =(n / 2)-1。下一个i + = 1将其置于i = n / 2然后内循环运行直到i = n。外部循环不会进行另一次迭代。

以下内容相同。

while (i < n / 2){
    result += arr[i];
    i += 1;    
}
// i = n / 2
while (i < n){
    result += arr[i];
    i += 1;
}

O(n)+ O(n)= O(n)

答案 1 :(得分:2)

这是编写代码的另一种方式:

int result = 0;
int i = 0;
while (i < n) {
    result += arr[i++];
}
printf("%d\n", result);

所以它显然是O(n)或线性时间。