首页
学习
活动
专区
圈层
工具
发布

计算大O
EN

Stack Overflow用户
提问于 2014-10-07 14:16:41
回答 2查看 89关注 0票数 0

我是编程新手,我正在试图弄清楚如何计算算法的大O。例如:

代码语言:javascript
复制
int selectkth(int a[], int k, int n){
    int i, j, mini, temp;
    for(i=0, i < k, i++){
      mini = i;
      for(j = i+1; j < n; j++)
       if(a[j] < a[mini])
         mini = j;
         temp = a[i];
         a[i] = a[mini];
         a[mini] = temp;
         }
      return a[k-1];
    } 

我知道这里有9个步骤,嵌套循环应该相乘在一起。当我第一次尝试的时候,我得到了O(n^2),但我不认为这是正确的。有没有人能解释一下,对于像我这样的菜鸟,如何以一种简单的方式正确计算Big O?任何解释都会有帮助,或者是你自己的例子。谢谢:)

EN

回答 2

Stack Overflow用户

发布于 2014-10-07 14:21:26

o(n^2)是正确的。代码中运行时间的最大因素是两个嵌套循环。另一件事就是处理变量--你不需要担心。这里的大O实际上是k_n=n_n=n*2=O(n^2),它是数组的长度。K乘以n。

票数 0
EN

Stack Overflow用户

发布于 2014-10-07 14:33:11

代码语言:javascript
复制
For outer loop, there k iteration
for inner loop: 
For iteration #1 : n  times array manipulation
For iteration #2 : n - 1 times array manipulation
.
.
For iteration #k : n - k times array manipulation

total array manipulation = n + (n-1) + ..... + (n -k)
= n(n+1) / 2 - k(k+1) /2
=~(n*2 - k*2)

= ~(n*2) // if n is very very greater than k
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26229657

复制
相关文章

相似问题

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