计算大O.

时间:2014-10-07 06:16:41

标签: c++ big-o

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

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吗?任何解释都将有助于您自己的例子。谢谢:))

2 个答案:

答案 0 :(得分:0)

o(n ^ 2)是正确的。代码中运行时间的最大因素是两个嵌套循环。其他的东西只是处理变量 - 你不必担心。这里的大O实际上是k n = n n = n * 2 = O(n ^ 2) 它是数组的长度。 k倍n。

答案 1 :(得分:0)

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