下面的方法的运行时如何是O(N)而空间复杂度是O(1)?

时间:2017-01-11 14:12:09

标签: arrays algorithm search data-structures

任何人都可以解释下面描述的给定问题的方法如何在O(N)时间和O(1)空间中运行?

问题:给定2个排序数组,找到共同的元素数。数组长度相同,每个都有不同的元素。

以下列2个阵列为例:

A: 13, 27, 35, 40, 49, 55, 59
B: 17, 35, 39, 40, 55, 58, 60
  1. 在B中进行A [0] = 13的线性搜索。从B [0]开始= 17.停止在B [0] = 17.未找到
  2. 在B中进行A [1] = 27的线性搜索。从B [0]开始= 17.停止在B [1] = 35.未找到
  3. 在B中进行线性搜索,A [2] = 35.从B [1] = 35开始。停在B [1] = 35.找到
  4. 在B中进行线性搜索,A [3] = 40.从B [2] = 39开始。停在B [3] = 40.找到
  5. 在B中进行线性搜索,A [4] = 49.从B [3] = 40开始。停在B [4] = 55.找到
  6. 我很困惑我们正在做一个线性循环的部分,以获得A的所有元素已经制作O(N)时间,然后再次在B中进行线性搜索以找到元素。 B中的班轮搜索正在最后一个停止的地方。这不会使给定方法的时间复杂度为O(N ^ 2)吗?如果没有,为什么?

1 个答案:

答案 0 :(得分:5)

这是Merge Algorithm的变体,除了输出序列正在构建之外,您使用线性搜索将列表推进到下一个位置,而不是一次只传递一个元素

如果N是两个列表中元素的总数,则合并时间为O(N),空间中为O(N)。空间要求来自存储输出序列的需要,而算法不会这样做。因此,您的算法在时间上保持为O(N),并在空间要求中变为O(1)。