Сортування із середнім значенням порівнянь


10

Чи існує алгоритм сортування на основі порівняння, який використовує середнє порівняння ?lg(n!)+o(n)

Існування найгіршого випадку алгоритму порівняння є відкритою проблемою, але середнього випадку достатньо для рандомізованого алгоритму з очікуваним порівняння для кожного введення. Значення полягає в тому, що це порівняння від оптимальних, витрачаючи в середньому лише порівняння на елемент.lg(n!)+o(n)lg(n!)+o(n)lg(n!)+o(n)o(n)o(1)

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

Попередня робота:
Сортування сортування використовує lg(n!)+Θ(n) порівняння (навіть у гіршому випадку).
Сортування вставки (також відоме як сорт Форд-Джонсон) також використовує lg(n!)+Θ(n) порівняння, але зі значно меншою константою у Θ(n) .
Покращена середня складність для порівняння на основі порівняння (Казуо Івама та Хунічі Теруяма) - їх (1,2) алгоритм введення нагадує частину моєї відповіді нижче.


Це питання перегукується з оптимальним рандомізованим сортуванням порівняння , але з огляду на різний акцент (тут конкретна асимптотична поведінка - порівняно із загальним станом знань, усіма розмірами вхідних даних та різницею від гіршого випадку), я вирішив використовувати нове запитання.
Дмитро Тарановський

Відповіді:


4

Оновлення: я розширив цю відповідь на папері Сортування із середнім з порівняньlg(n!)+o(n) .

Так, такий алгоритм існує. Я буду лише доводити, що пов'язаний, але під вірогідним припущенням рандомізації ми також отримаємо . Я також опишу спробу і .lg(n!)+o(n)lg(n!)+O(n1ε)n0.5+o(1)O(n0.5ε)

Ми можемо вважати, що всі елементи є різними, анотуючи їх у разі потреби; середній випадок використовує різні елементи у випадковому порядку. Ми можемо обчислити середню кількість порівнянь, додавши втрати ентропії за кожне порівняння відносно використання справедливої ​​монети.

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

Ми досягаємо цього, додаючи елементи в партії, а іноді і ефективно порівнюючи елементи партії один з одним, таким чином, що інтервал відповідний елементу зменшується квазі випадковим чином (і з розподілом ймовірності всередині інтервалу майже рівномірні), і , коли довжина інтервалу досить близько до влади 2, роблячи бінарний пошук для вставки .SAAA

Поширені конструкції

Ми будемо тримати підмножина відсортованих елементів, і для кожного елемента несортоване , ми будемо стежити за мінімальним інтервалом з , де , як відомо, знаходиться. - довжина ; по тотожності інтервалів.SAIASA|IA|IAIA=IB

Нехай буде: Порівняйте з , а потім (у випадковому порядку) порівняйте і проти відповідних елементів до тих пір, поки їх інтервали не будуть роз'єднані (або мають довжину 1). Елемент вибирається (послідовно), щоб зробити ймовірності порівняння максимально близькими до 1/2, припускаючи, що коли викликається , рівномірно розподілено на . Через нерозбірливість зрештою, зберігає припущення про рівномірність.Compare(A,B)ABABSSCompare(A,B)IAIBCompare

Наступні розділи можна читати незалежно один від одного.

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

Дано: відсортований список та партія несортованих елементів; ; невідсортовані елементи є випадковими по відношенню до .Smmω(1)o(|S|)S

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

Примітка 1: Для "достатньо близького" будь-яка відносна похибка (як функція ) працює до тих пір, поки елементи будуть видалені на кроці (4) (можливо, примітка 2). За припущенням рандомізації, використовуючи відносна помилка захоплює елементів, що дозволяє середній алгоритм сортування порівняння.o(1)mmo(m)cloglogm/logmm(1logΘ(c)m)lg(n!)+O(nloglogn/logn)

Примітка 2: Оскільки однакова послідовність порівнянь призводить до одного і того ж обмежувального інтервалу, майже всі елементи пройдуть через крок (1) рази (якщо їх не видалено на кроці 4). На початку, якщо і виберемо , порівняємо з елементом , і кожен додаток кроку (3) до має ймовірність зниженняв разів. Тепер для кожного відношення що не є раціональною силою 2, маємо , і тому отримаємоΩ(logm)A<BAAS[(11/2)|S|]AO(1)|IA|1/(11/2)a>1ε>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. Якщо є такий, що з ймовірністю (скажімо, ≥0,05), робитьв межах відносна похибка потужності 2, запустіть і, якщо є успішною (тобто знаходиться в межах відносної похибки потужності 2) , видалити з партії і вставок в .BGΘ(1)Compare(A,B)|IA|nεCompare(A,B)|IA|nεAS
    2. Якщо такого немає , запустіть для випадкового .BGCompare(A,B)BG

Якщо наше припущення про рандомізацію спрацьовує (тобто розподіл довжин інтервалів та позицій є досить випадковим), то впродовж більшої частини процесу типовий може бути ефективно порівняний з вибором елементів (з різної довжини інтервалу). Таким чином, ми можемо обирати порівняння для (1) вище, і якщо нам не пощастить з результатом порівняння, ми все одно отримаємо шанси, тим самим досягаючи (якщо досить малий, скажімо 0,01) a -алгоритм порівняння. З деякими змінами та наближеннями загальний обчислення можна зробити квазілінійним: Дано елементAnΘ(1)nΘ(1)Θ(logn)εlg(n!)+O(n1ε)A, обчисліть багатообіцяючі довжини інтервалів, а потім знайдіть s правильним приблизним довжиною центру та інтервалу.B

Існує кілька способів оптимізації порівнянь, але перешкодою є те, що кожне порівняння може виявитися невдалим, і у нас є обмежена кількість порівнянь. Якщо після оптимізації робить в середньому 4 порівняння і 'успішно' з 1/4 ймовірністю, отримаємо .Compare(A,B)ε(1ε)/4/log4/320.09

Можливо, набагато кращим підходом є почекати, поки інтервал не наблизиться до потужності 2, контролюючи не окремі довжини інтервалу, а розподіл довжин.

Спроба алгоритмуlg(n!)+n0.5+o(1)

Припустимо, що і нам задано несортовану партію з елементів з також заданими інтервалами , зяк правило, і з розподіляється рівномірно (до випадкової помилки та тримається з достатньою точністю, навіть якщо це обумовлено ). Тоді ми можемо сортувати елементи, витрачаючи в середньому порівнянь так: (*) Вставте всі елементи в порядку їх початкового . Таким чином всі елементи вставляються, коли їх довжина інтервалу близька до сили 2.|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) про те, які частини слід розширити в роботі (при цьому ця відповідь залишається стислою версією).
Дмитро Тарановський
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.