交集算法可以执行的最大比较次数是多少?

时间:2019-01-30 19:08:50

标签: arrays sorting time-complexity intersection

所以我下面有这个算法,可以在两个SORTED数组中找到共同的元素。鉴于两个数组分别具有m和n个长度,我需要找到此算法要进行的最大比较。

int printIntersection(int arr1[], int arr2[], int m, int n) 
{ 
  int i = 0, j = 0; 
  while (i < m && j < n) 
  { 
    if (arr1[i] < arr2[j]) 
       i++; 
    else if (arr2[j] < arr1[i]) 
       j++; 
    else /* if arr1[i] == arr2[j] */
    { 
       cout << arr2[j] << " "; 
       i++; 
       j++; 
    } 
  } 
}

我认为该算法的复杂度为O(m + n)。如果我错了纠正我。那么,比较的最大数量是m + n还是m * n?还是没有?

1 个答案:

答案 0 :(得分:1)

最坏的情况是,如果n> m,则第一个(m-1)个元素相等,而最后一个元素arr1[m - 1]大于arr2的所有其余元素。然后,第一个if将始终失败,代码将必须通过arr2的所有元素,从而进行(2 * n)个比较。

但是Big O表示法并不表示确切的操作数,而是表示rate of its growth。在这些术语中,该算法相对于整个输入的长度仍然是线性的,写为O(n)。