我想知道如何在已排序的数组上计算以下所述的优化合并排序的比较次数。
这就像普通的合并排序,但是如果已经对两个子数组进行了排序,则不会“合并”。
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)
这是我尝试找出比较数
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),我被卡住了。有什么想法吗?