【问题标题】:Running time of k sorted arrays?k个排序数组的运行时间?
【发布时间】:2018-02-27 18:51:28
【问题描述】:

假设给定 k 个排序数组,每个数组有 n 个元素,我们希望将它们组合成一个包含 kn 个元素的数组。

我的方法:我的方法是重复使用 Merge 子例程,首先合并前两个数组,然后将结果与第三个数组合并,然后与第四个数组合并,以此类推,直到我合并第 k 个和最后一个输入数组。我的问题是这个连续合并算法的运行时间是多少,作为 k 和 n 的函数,忽略常数因素和低阶项?

合并子程序:

 i := 1 
 j := 1 
 for k := 1 to n do 
   if C[i] <D [j] then 
      B[k] :=C[i] 
      i := i +1 
   else 
      B[k] :=D[j] 
      j := j +1

【问题讨论】:

    标签: algorithm mergesort


    【解决方案1】:

    运行时间为O(k^2 * n)。原因是i'th 合并需要O(i*n + n) 时间来完成,而k/2i &gt; k/2 这样的合并大约有。

    有一个原因,在经典的归并排序中,我们分别合并每一半数组,然后才将两个排序后的数组合并在一起......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-19
      • 2019-12-10
      • 1970-01-01
      • 2022-11-23
      • 2017-07-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多