首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >确定Big-O复杂性

确定Big-O复杂性
EN

Stack Overflow用户
提问于 2014-09-18 05:46:41
回答 2查看 73关注 0票数 0

我下面有一些代码,其中包含一个嵌套的while循环。我估计了外部while循环的复杂性,但我不确定如何处理内部循环,因为它有一个&&。有人能给我解释一下如何确定内循环的复杂度吗?

代码语言:javascript
复制
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);
EN

回答 2

Stack Overflow用户

发布于 2014-09-18 05:58:03

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

以下内容将是等效的。

代码语言:javascript
复制
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)

票数 4
EN

Stack Overflow用户

发布于 2014-09-18 06:00:23

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

代码语言:javascript
复制
int result = 0;
int i = 0;
while (i < n) {
    result += arr[i++];
}
printf("%d\n", result);

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25900871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档