来自测试的问题:
阵列的划分不规则。 数组将分成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)
答案 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 / 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)
方程的结果