在Mergesort算法中,合并函数将两个排序的输入作为输入 大小相等的数组。但是,合并算法可以 也可用于合并两个大小不同的排序数组。 假设两个数组A和B分别具有3和1000的大小 两者都按升序排序。什么是最坏的情况 合并的关键比较数量?证明你的答案。
我在想,假设1000号阵列的第一个999元素小于3号阵列头部的元素。然后假设所有3个元素都小于1000个数组的最后一个元素。我应该能够进行1002次比较。这是最大的比较吗?我可以采取什么方法来解决它。现在我只是猜测一些价值观。
答案 0 :(得分:1)
是O(n + m)。最糟糕的是,每个阵列的每个元素都会被比较。
您可以查看使用类似问题Time complexity for merging two sorted arrays of size n and m描述的算法。最好的情况是你花了很多时间在'复制休息'部分,最坏的情况是你必须提前两个阵列的计数器直到全长。随意提出更具体的问题。
您可以通过考虑特定数据集来计算特定数字。例如。适用于A{1001,1002,1003}
和B{1,2, ..., 999, 1005}
。最糟糕的情况是通过对最后一个元素(即严格的数字是n + m-1)进行“复制休息”来实现。
999 comparisons: A{1001} vs B{1,..,999} -> B elements merged
1 comparison: A{1001} vs B{1005} -> A merged
1 comparison: A{1002} vs B{1005} -> A merged
1 comparison: A{1003} vs B{1005} -> A merged
我们已经完成了A,并且使用'copy rest'片段合并了B的最后一个元素