Сортировка со средним сравнением

10

Существует ли алгоритм сортировки, основанный на сравнении, который использует среднее из сравнений ?lg(n!)+o(n)

Существование алгоритма сравнения в худшем случае является открытой проблемой, но среднего случая достаточно для рандомизированного алгоритма с ожидаемыми сравнениями l g ( n ! ) + O ( n ) для каждого входа , Значение l g ( n ! ) + O ( n ) состоит в том, что это o ( n ) сравнений с оптимальными, тратя в среднем только olg(n!)+o(n)lg(n!)+o(n)lg(n!)+o(n)o(n) сравнения на элемент.o(1)

Так как у меня уже есть такой алгоритм, я включаю его в качестве ответа (используя формат Q / A ), но я приветствую дополнительные ответы, включая другие алгоритмы, был ли такой алгоритм уже известен, улучшая , и худший - case l g ( n ! ) + o ( n ) .o(n)lg(n!)+o(n)

Предыдущая работа:
сортировка слиянием использует сравнения (даже в худшем случае). Сортировка с вставкой слиянием (также известная как сортировка Форда-Джонсона) также использует сравнения l g ( n ! ) + Θ ( n ), но с гораздо меньшей константой в Θ ( n ) . Улучшенная средняя сложность для сортировки на основе сравнения (от Kazuo Iwama и Junichi Teruyama) - их (1,2) алгоритм вставки напоминает часть моего ответа ниже.lg(n!)+Θ(n)
lg(n!)+Θ(n)Θ(n)

Дмитрий Тарановский
источник
Этот вопрос перекрывается с Оптимальной рандомизированной сортировкой сравнения , но, учитывая различный акцент (специфическое асимптотическое поведение здесь - по сравнению с общим состоянием знаний, всеми размерами входных данных и отличием от наихудшего случая там), я остановился на новом вопросе.
Дмитрий Тарановский

Ответы:

4

Обновление: я расширил этот ответ в статье Сортировка со средним сравнением lg(n!)+o(n) .

Да, такой алгоритм существует. Я докажу только границу , но при вероятном предположении рандомизации мы также получим l g ( n ! ) + O ( n 1 - ε ) . Я также опишу попытку для n 0,5 + o ( 1 ) и O ( n 0,5 - ε ) .lg(n!)+o(n)lg(n!)+O(n1ε)n0.5+o(1)O(n0.5ε)

Мы можем предположить, что все элементы различны, аннотируя их при необходимости; средний случай использует отдельные элементы в случайном порядке. Мы можем вычислить среднее количество сравнений, добавив потерю энтропии для каждого сравнения относительно использования справедливой монеты.

Отправной точкой является сортировка вставкой с двоичного поиска , чтобы решить , куда вставить следующий элемент в отсортированный подмножество . Когда ( 1 - ε ) 2 m| S | 2 m - 1 , вставка использует не более m сравнений, которые (с точки зрения энтропии) оптимальны с точностью до O ( ε ) аддитивного коэффициента (и для сложности в среднем случае 2 m| S |( 1 +) ε ) 2 мS(1ε)2m|S|2m1mO(ε)2m|S|(1+ε)2mтоже работает). Теперь, когда не близко к степени 2, вставка элемента A является неоптимальной (даже в среднем случае и независимо от того, как мы уравновешиваем каждый запрос), но если тратить o ( 1 ) сравнений, мы можем направить A к приблизительно равномерному распределению на отрезке длины S, близком к степени 2, мы получаем желаемую оптимальность.|S|Ao(1)AS

Мы достигаем этого, добавляя элементы в пакетах, а иногда эффективно сравнивая элементы пакета друг с другом, так что интервал соответствующий элементу A, уменьшается квазислучайным образом (и с распределением вероятности A внутри интервала почти равномерные), и , когда длина интервала достаточно близко к власти 2, делая бинарный поиск для вставки A .SAAA

Общие конструкции

Мы будем хранить подмножество отсортированных элементов, и для каждого несортированного элемента A мы будем отслеживать минимальный интервал I A в S, где известно, что A находится. | Я А | длина I A ; I A = I B является тождеством интервалов.SAIASA|IA|IAIA=IB

Пусть будет: сравнивать A с B , а затем (в случайном порядке) сравнивать A и B с соответствующими элементами S, пока их интервалы не пересекаются (или имеют длину 1). Элемент S выбирается (в согласованном порядке) , чтобы сделать вероятности для сравнения как можно ближе к 1/2 , насколько это возможно, при условии , что , когда С о т р г е называется, ( , Б )Compare(A,B)ABABSSCompare(A,B)равномерно распределена на . Из-за дизъюнктности в конце концов, С о т р г е сохраняет однородность предположение.IAIBCompare

Следующие разделы могут быть прочитаны независимо друг от друга.

алгоритмlg(n!)+o(n)

Дано: отсортированный список и пакет из m несортированных элементов; m ω ( 1 ) o ( | S | ) ; неотсортированные элементы являются случайными по отношению к S .Smmω(1)o(|S|)S

Повторите (1) - (3), пока это возможно:
1. Выберите два элемента и B из партии с I A = I B (любой выбор будет работать). 2. Запуск С о т р г е ( , Б ) . 3. Если | Я А | достаточно близко к степени 2, (примечание 1) удалите A из партии (не забывая I A ); и сделать так же с B . Наконец: вставьте все элементы вABIA=IB
Compare(A,B)
|IA|AIAB
и завершить сортировку.S

Примечание 1: для «достаточно близко» любая относительная ошибка (как функция m ) работает до тех пор, пока элементы m - o ( m ) будут удалены на шаге (4) (возможно, примечанием 2). При предположительном предположении рандомизации, используя c log log m / log m, относительная ошибка фиксирует m ( 1 - log - Θ ( c ) m ) элементов, позволяя a l g ( n ! )o(1)mmo(m)cloglogm/logmm(1logΘ(c)m) алгоритм сортировки среднего сравнения.lg(n!)+O(nloglogn/logn)

Примечание 2: Поскольку одна и та же последовательность сравнений приводит к одному и тому же ограничивающему интервалу, почти все элементы пройдут этап (1) раз (если не будут удалены на этапе 4). В начале, если A < B и мы выбираем A , мы сравниваем A с элементом S [ ( 1 - 1 / Ω(logm)A<BAA, и каждое применение шага (3) кAимеетO(1)вероятность уменьшения| ЯА| в1/(1-1/S[(11/2)|S|]AO(1)|IA|раз. Теперь для каждого отношенияa>1, которое не является рациональной степенью 2, имеемε>0d>0m,nN1/(11/2)a>1, и поэтому мы получаемоценкуo(n).ε>0d>0m,nN1ε<amd2n<1+εo(n)

Вероятный алгоритм lg(n!)+O(n1ε)

По модулю предположения рандомизации мы можем достичь среднего сравнения следующим образом.lg(n!)+O(n1ε)

  • Произвольно перемешайте элементы и отсортируйте первую половину в список , сохранив вторую половину как несортированную партию.S


  • AbatchG={Bbatch:|P(A<B)0.5|<n0.51ε}GAS

    1. BGΘ(1)Compare(A,B)|IA|nεCompare(A,B)|IA|nεAS
    2. BGCompare(A,B)BG

AnΘ(1)nΘ(1)Θ(logn)εlg(n!)+O(n1ε)AB

Compare(A,B)ε(1ε)/4/log4/320.09

Возможно, гораздо лучший подход состоит в том, чтобы подождать, пока интервал не станет близким к степени 2, управляя не отдельными длинами интервалов, а распределением длин.

lg(n!)+n0.5+o(1)

|S|=nnIA|IA|n1o(1)|IA|2lg|IA|A<S[i]n0.5+o(1)
|IA|2lg|IA|

S

|IA|2lg|IA||IA|/2lg|IA||IA|2lg|IA|

Compare(A,B)P(A<B)0.5IAIAComparek=ω(1)k=ω(1)kSO(logkn+logk)kΘ(logk)k

1/2+n0.5O(1/n)no(1)n0.5+o(1)

lg(n!)+O(n0.5ε)|S|+n0.5+εn0.5+εn0.5+εn0.5ε/2+o(1)SnεIAΘ(nε/2)n1o(1)nε/2o(1)lg(n!)+O(n1ε)O(n0.5ε)ε

lg(n!)+o(n)1.5n+o(n)(2+ε)nO(1)

Дмитрий Тарановский
источник
1
Я думаю, что вы должны написать это в виде бумаги.
Эмиль Йержабек
@ EmilJeřábek Согласен. Как сайт исследовательского уровня, многие вопросы и ответы здесь представляют собой мини-статьи, но, учитывая их объем и важность, формальный документ желателен. Не стесняйтесь, дайте мне знать (по адресу dmytro@mit.edu) о том, какие части должны быть расширены в документе (этот ответ остается в качестве краткой версии).
Дмитрий Тарановский