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