MergeSort - 将2个子序列中的序列除以不相等

时间:2014-06-05 16:20:23

标签: algorithm sorting time-complexity mergesort divide-and-conquer

来自测试的问题:

阵列的划分不规则。 数组将分成2个不相等的子序列:

  • (n/3)第一个子序列
  • (2/3)*n第二个子序列

计算mergetsort的费用。

如果分工不规律,我如何解决/处理这些问题?

mid = (start + last)/3;
mergesort (array , start , mid);
mergesort (array , mid+1 , last); 
fusione (array , start , mid , last); cost =  theta(n) 

2 个答案:

答案 0 :(得分:3)

让我们先写出一个递归关系。您将问题拆分为大小为n / 3和2n / 3的子阵列,然后在合并步骤中仍然进行线性工作以组合它们。这给出了复发

  

T(0)= 1

     

T(n)= T(n / 3)+ T(2n / 3)+Θ(n)

现在的问题是如何解决递归关系。我要声称这是Θ(n log n)。为了看到这一点,我们将通过使用递归树方法证明它是Ω(n log n)并且它是O(n log n)。

考虑使用递归树扩展此递归。注意

  • 顶层执行Θ(n)工作。
  • 下一层有一个大小为n / 3的子弹和一个大小为2n / 3的子弹,它们共同起作用Θ(n)。
  • 下面的图层有一个大小为n / 9的子图,一个大小为2n / 9的子图,一个大小为2n / 9的第二个子图,以及一个大小为4n / 9的最终子图。总的来说,它们做Θ(n工作。

更一般地说,直到n / 3分支消失的点,树的顶层都做Θ(n)工作。在开始递归递归之前的层数大致是log 3 n,因此完成的工作至少为Ω(n log n),因为Θ(log n)层执行Θ( n)工作。

你还可以注意到每层的工作总是O(n),因为子问题的大小总是不大于前一层子问题的大小(它对于前几层是相同的,然后是随着那些层落下)。因此,上限将是O(nL),其中L是层的总数。最慢的收缩问题在每一层缩小了2/3,因此总共有O(log n)层。这给出了O(n log n)的上限。

由于工作是O(n log n)和Ω(n log n),因此它是Θ(n log n)。

希望这有帮助!

答案 1 :(得分:0)

正确答案将为- n log 3/2 n

因为它是T(n) = T(n/3) + T(2n/3) + Θ(n)方程的结果