导出以下代码的执行时间增长率(BigO)

时间:2014-04-21 18:48:48

标签: c++

这段代码的执行时间增长率大O是什么?

void doDiff(int setA[], int setB[], int sizeA, int sizeB)   {

   const int MAX = 10; 
   // validate setA and setB 
   if ((sizeA == 0) && (sizeB == 0))                    
         cout << "both sets are empty " << endl;    
   else
         cout << "symmetric difference: { " ;   

   for (int i = 0;  i <  sizeA;  i++ )            
       if (!member(setB, setA[i],sizeB))        
              cout << setA[i] << " ";           

   for (int i = 0;  i <  sizeB;i++ )            
       if (!member(setA, setB[i],sizeA))            
              cout << setB[i] << " ";                

   cout << "}" << endl;                 
}

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

当我计算此代码的大O时,我最终得到O(N*N*N) || O(N^3) 我不确定此代码的确切执行时间增长率。 请帮我。

提前谢谢

1 个答案:

答案 0 :(得分:3)

用问题填写答案似乎是不合适的,但由于这听起来像是家庭作业,我认为它们是一个更好的方法来实现目标(这是为了弄清楚它是如何工作的):

  1. member的“大O”是什么?这很重要,因为doDiff非常依赖它。
  2. doDiff拨打member多少次?
  3. 如果每次拨打member的时间都相同,member为O(X),doDiff拨打member Y次,那么“大” -O“doDiff