【问题标题】:What is the worst-case number of key comparisons of merge?合并的关键比较的最坏情况数是多少?
【发布时间】:2016-10-02 11:47:20
【问题描述】:

在 Mergesort 算法中,merge 函数将两个已排序的 大小大致相等的数组。但是,合并算法可以 也可用于合并两个大小非常不同的排序数组。 假设两个数组 A 和 B 的大小分别为 3 和 1000,并且 两者都按升序排序。最坏的情况是什么 合并的关键比较数?证明你的答案。

我在想,假设大小为 1000 的数组的第一个 999 元素小于大小为 3 的数组头部的元素。然后假设所有 3 个元素都小于大小为 1000 数组的最后一个元素。我应该能够进行 1002 次比较。这是最大的比较吗?我可以采取什么方法来解决它。现在我只是猜测一些值。

【问题讨论】:

标签: merge


【解决方案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 并且 B 的最后一个元素使用 'copy rest' 片段合并

【讨论】:

  • 如果是n+m,答案是1003吗?我似乎无法想象它达到 1003。
  • 我已经用你的数字的特定数据集更新了我的答案
猜你喜欢
  • 1970-01-01
  • 2015-05-16
  • 2014-07-17
  • 1970-01-01
  • 2016-06-07
  • 1970-01-01
  • 1970-01-01
  • 2021-08-30
  • 1970-01-01
相关资源
最近更新 更多