已排序数组上的优化合并排序的比较数

时间:2018-10-16 02:26:17

标签: algorithm sorting

我想知道如何在已排序的数组上计算以下所述的优化合并排序的比较次数。

这就像普通的合并排序,但是如果已经对两个子数组进行了排序,则不会“合并”。

mergesort(arr, auxArr, lo, hi)
  if (hi <= lo) return;
  mid = lo + (hi + lo) / 2

  sort(arr, auxArr, lo, mid)
  sort(arr, auxArr, mid+1, hi)

  if (less(arr[mid], arr[mid+1]) return; // optimization
  merge(arr, auxArr, lo, mid ,hi)

这是我尝试找出比较数

  1. 让C(N)为比较数
  2. C(N)= 2 * C(N / 2)+ 1(对两个子数组进行排序的比较数+ 1个进行优化的比较)
  3. 使用递归关系,

C(N) = = 2 * C(N/2) + 1
= 2 ( 2C(N/4) + 1 ) + 1
= 4 C(N/4) + 1 + y
...
= N C(N/N) + 1 + 2 + 4 + ... + 2^(log2 (N/2))
= 1 + 2 + 4 + ... + 2^(log2 (N/2))

但是答案是〜log2(N),我被卡住了。有什么想法吗?

0 个答案:

没有答案