大(O)表示法 - 哪一个是正确的

时间:2018-06-14 15:08:57

标签: algorithm sorting big-o

我正在尝试学习大(O)符号。在线搜索某些文章时,我遇到了两篇不同的文章AB

严格来说,就循环而言 - 似乎他们几乎拥有相同的流程。 例如

[A]的代码如下(在JS中完成)

function allPairs(arr) {
    var pairs = [];
    for (var i = 0; i < arr.length; i++) {
        for (var j = i + 1; j < arr.length; j++) {
            pairs.push([arr[i], arr[j]]);
        }
    }

    return pairs;
}

[B]的代码如下(在C中完成) - 整个代码为here

  for(int i = 0; i < n-1 ; i++) {
    char min = A[i]; // minimal element seen so far
    int min_pos = i; // memorize its position
    // search for min starting from position i+1
    for(int j = i + 1; j < n; j++) 
      if(A[j] < min) {
        min = A[j];
        min_pos = j;
      }
    // swap elements at positions i and min_pos
    A[min_pos] = A[i];
    A[i] = min;
  } 

网站A上的文章提到时间复杂度为O(n ^ 2),而网站B上的文章提到其O(1/2·n2)。

哪一个是对的?

由于

2 个答案:

答案 0 :(得分:3)

假设O(1/2·n2)表示O(1/2·n ^ 2),则两个时间复杂度相等。请记住,Big(O)表示法并不关心常量,因此两种算法都是O(n ^ 2)。

答案 1 :(得分:2)

你没仔细阅读。 B条说算法执行大约N²/ 2比较,然后解释这是O(N²)。