Вы можете получить верхнюю границу 2п * H_ {п - 1} < = 2n пер п, используя тот факт, что слияние двух списков общая длина n стоит не более n сравнений. Анализ аналогичен анализу рандомизированных quicksort (см. http://www.cs.cmu.edu/afs/cs/academic/class/15451-s07/www/lecture_notes/lect0123.pdf).
Прежде всего предположим, что мы разделим список длины n на 2 списка L и R. Мы будем заряжать первый элемент R для сравнения со всеми элементами L, а последний элемент L для сравнения против все элементы R. Даже если это не могут быть точные сравнения, которые выполняются, общее количество сравнений, которые мы взимаем, равно n, как требуется.
Это ручка одного уровня рекурсии, но как насчет остального? Мы продолжаем концентрироваться только на сравнениях «справа налево», которые происходят между первым элементом R и каждым элементом L на всех уровнях рекурсии (по симметрии это будет половина фактического ожидаемого общего).Вероятность того, что j-й элемент сравнивается с i-м элементом, равна 1/(j - i), где j> i. Чтобы увидеть это, обратите внимание, что элемент j сравнивается с элементом i точно, когда он является первым элементом, выбранным как «элемент расщепления» из множества {i + 1, ..., j}. То есть элементы i и j разбиваются на два списка, как только список, в котором они находятся, разбивается на некоторый элемент из {i + 1, ..., j}, а элемент j заряжается для сравнения с i точно, когда элемент j является элементом, выбранным из этого множества.
Таким образом, ожидаемое общее количество сравнений с участием j не превышает H_n (то есть 1 + 1/2 + 1/3 ..., где число членов не более n - 1). Суммирование по всем возможным j дает n * H_ {n - 1}. Это только учитывало сравнение «справа налево», поэтому окончательная верхняя граница равна 2n * H_ {n - 1}.