如何计算大O执行增长率?

时间:2014-04-27 20:34:14

标签: time-complexity big-o

我只是想知道这个代码的Big O执行增长率的分解,我已经尝试计算它但是我得到了for循环错误。所以我现在完全陷入困境。

     void doInter(int setA[], int setB[], int sizeA, int sizeB)
  {
      const int MAX = 10;
      int sizeR;
    int results [MAX];

   // validate sizeA and sizeB
   if ((sizeA == 0) || (sizeB == 0))
   {
          cout << "one of the sets is empty\n";
   }

   // save elements common to both sets
   for (int i = sizeR = 0; i <  sizeA; i++ )
   {
       if (member(setB, setA[i],sizeB))
       {
          results[sizeR++] = setA[i];
       }
   }

   {
        cout << results[i] << " ";
   }                                                   
   cout << "}" << endl;
  }



  bool member (int set[], int n, int size)
 {
   for (; size > 0; --size)
   {
       if (set[size-1] == n)
       {                                               
          return true;
       }
   }
  return false;                                       
  }

1 个答案:

答案 0 :(得分:1)

此代码的复杂性为O(sizeA * sizeB)。计算相对容易 - 首先计算内部函数member的复杂性 - 这是一个单循环,在最坏的情况下,它将执行sizeB次迭代。现在在外部函数中,您可以在大小为sizeA的循环中调用此函数。因此总体复杂性是两个复杂性成倍增加。关于这两个周期,剩下的操作相对简单。

此外,很容易看到实现这种复杂性的示例 - 使用两个没有共同元素的数组。