合并两个大小为n和m

时间:2016-06-28 21:15:31

标签: arrays merge big-o

类似于:Time complexity for merging two sorted arrays of size n and m但未分类。

我正在试图弄清楚这次行动的时间复杂性。

您有两个不同大小的数组,您总是合并到更大的数组中。所以 n总是大于m 。您正在基于每个数组元素的单个属性进行合并,每次合并到Array 1时,都会从Array 2中移除该元素,从而缩短Array 2

Big O符号会是什么?

3 个答案:

答案 0 :(得分:1)

如果log(n) > m,最好进行愚蠢的线性搜索,并且O(m * n)复杂度为O(n log n)

否则,对数组1进行排序,然后您可以快速查找并将其保存在O(m log n)中(仅限排序时间)。插入仍然是if (results != null) ,可能占主导地位。

答案 1 :(得分:1)

对两个数组进行排序。可以假设O(nlogn + mlogm) = O(nlogn)(因为n > m),但如果键是整数或具有您可以利用的其他属性,则可能更接近{{1的理论下界对于排序部分。

然后,对于合并,您只需花费O(n + m) = O(n),因为您只需要扫描一次数组以合并已排序的数组。

换句话说,排序所需的时间占主导地位,但只有在您选择采用此算法时才会占用。

答案 2 :(得分:0)

在我看来,您必须为每个 n 线性搜索 m 。平均而言,您将在中途找到 m 中的适当位置。这使你的复杂性

O(mn)

正如评论中所提到的,虽然操作次数接近n * m / 2,但是大O符号忽略了线性常数。

我不认为Knuth会赞同美学,但至少你会明白这一点。 :-)