Arrays 合并两个排序数组的最佳情况是什么?

Arrays 合并两个排序数组的最佳情况是什么?,arrays,merge,time-complexity,Arrays,Merge,Time Complexity,我知道合并两个排序数组需要O(m+n)时间,其中m和n是两个数组的长度 最大比较次数为(m+n-1) 但我学校的一位老师说,只有一般和最坏的情况需要O(m+n)时间。最好的案例需要O(1)个时间 在这里,我无法理解最好的情况是如何取O(1)。 请给出最佳情况,以及回答时如何使用O(1)时间。让我们先考虑确定两个排序集合中元素正确顺序的最佳情况复杂度(不必担心它们是如何存储的)。 如果第一个集合中的最后一个元素小于第二个集合中的第一个元素,则只需进行一次比较即可确定正确的顺序。第二盘只需在第一盘结

我知道合并两个排序数组需要O(m+n)时间,其中m和n是两个数组的长度

最大比较次数为(m+n-1)

但我学校的一位老师说,只有一般和最坏的情况需要O(m+n)时间。最好的案例需要O(1)个时间

在这里,我无法理解最好的情况是如何取O(1)。
请给出最佳情况,以及回答时如何使用O(1)时间。

让我们先考虑确定两个排序集合中元素正确顺序的最佳情况复杂度(不必担心它们是如何存储的)。 如果第一个集合中的最后一个元素小于第二个集合中的第一个元素,则只需进行一次比较即可确定正确的顺序。第二盘只需在第一盘结束时“钉上”。(大多数实现都是从两个集合的前面开始的,但您可以在排序的开头将其作为“特殊情况”检查来编写。)

由于这种情况下只进行一次比较,因此无论数组中的元素数量如何,在最佳情况下确定正确的顺序是O(1)


现在,回到元素存储在数组中的问题

在许多语言中,数组一经创建就无法调整大小——合并两个数组需要分配第三个数组,该数组的大小足以包含所有元素。如果是这种情况,则保证至少执行
m+n
操作,因为必须将所有元素复制到新数组中

即使第一个数组中的一个可以调整大小以容纳其他元素,所有这些元素仍然必须从第二个数组复制到第一个数组-这仍然是
n
操作


因此,虽然可以在恒定数量的比较中确定正确的顺序,但在最好的情况下,移动元素的工作量仍然会产生O(n)。

你确定他说的是数组,而不是链表吗?是的。。谈到了ArrayShanks BJ Myers。这意味着,如果使用辅助数组,合并两个排序数组将不会有O(1)时间复杂度。但我相信,如果我们使用链接列表,那么我们可以根据您的最佳情况实现O(1)复杂度。