Я частично согласен с @Armen, они должны быть сопоставимы.
Но: рассмотрим случай, когда они разбиты посередине. Чтобы объединить два списка длин n
, нам понадобится 2*n - 1
сравнения (иногда меньше, но мы будем считать его фиксированным для простоты), каждый из которых выдает следующее значение. Было бы log2(n)
уровней слияний, что дает нам приблизительно n*log2(n)
сравнений.
Теперь рассмотрим случайное разбиение: максимальное число сравнений, необходимое для объединения списка длиной n1
с одним списком длины n2
, составит n1 + n2 - 1
. Тем не менее, среднее число будет близко к нему, потому что даже для самых несчастных сплитов 1
и n-1
нам понадобится в среднем n/2
сравнений. Таким образом, мы можем считать, что стоимость слияния за уровень будет такой же, как в четном случае.
Разница в том, что в случайном случае число уровней будет больше, и мы можем считать, что n
для следующего уровня будет max(n1, n2)
вместо n/2
. Это max(n1, n2)
будет иметь тенденцию быть 3*n/4
, что дает нам приблизительную формулу
n*log43(n) // where log43 is log in base 4/3
что дает нам
n * log2(n) / log2(4/3) ~= 2.4 * n * log2(n)
Этот результат все еще больше, чем правильный, потому что мы игнорировали, что маленький список будет иметь меньше уровней, но он должен быть достаточно близок. Я полагаю, что правильный ответ будет число сравнений в среднем удвоится