Я просто отвечал на вопрос о различных подходах к выбору раздела в реализации быстрой сортировки и придумал вопрос, на который я, честно говоря, не знаю, как ответить. Это немного сложная математика, и это может быть неправильный сайт, на котором можно спросить это, поэтому, если это нужно переместить, пожалуйста, дайте мне знать, и я с удовольствием перенесу его в другое место.
Хорошо известно, что реализация быстрой сортировки, которая случайным образом выбирает свои шарниры, в конечном итоге запустится в ожидаемое время O (n lg n) (есть хорошее доказательство этого в Википедии ). Однако из-за стоимости генерации случайных чисел многие реализации быстрой сортировки не выбирают шарниры случайным образом, а вместо этого полагаются на подход «медиана-три», в котором три элемента выбираются детерминистически и медиана выбирается как стержень. Известно, что в худшем случае это вырождается в O (n 2 ) (см. эту замечательную статью о том, как генерировать эти входные данные в худшем случае, например).
Теперь предположим, что мы объединяем эти два подхода, выбирая три случайных элемента из последовательности и используя их медиану в качестве выбора точки поворота. Я знаю, что это также гарантирует O (n lg n) среднего времени выполнения, используя немного другое доказательство, чем доказательство для обычной рандомизированной быстрой сортировки. Однако я понятия не имею, что является постоянным фактором перед термином n lg n в этой конкретной реализации быстрой сортировки. Для обычной рандомизированной быстрой сортировки Википедия перечисляет фактическое время выполнения рандомизированной быстрой сортировки как требующее не более 1,39 n lg n сравнений (используя lg в качестве двоичного логарифма).
У меня такой вопрос: Кто-нибудь знает способ вывести постоянный коэффициент для числа сравнений, выполненных с использованием рандомизированной быстрой сортировки "медиана-три" ? Если мы пойдем еще более широко, есть ли выражение для быстрого фактора на быстрой сортировке с использованием рандомизированного подхода медианы-k? Мне любопытно, потому что я думаю, что было бы интересно узнать, есть ли «слабое место» этого подхода, который делает меньше сравнений, чем другие реализации рандомизированной быстрой сортировки. Я имею в виду, разве не было бы здорово сказать, что рандомизированная быстрая сортировка с рандомизированным выбором по срединно-шестой оси делает наименьшее количество сравнений? Или быть в состоянии окончательно сказать, что вы должны просто выбрать элемент поворота наугад?