Оновлення: я розширив цю відповідь на папері Сортування із середнім з порівняньlg(n!)+o(n) .
Так, такий алгоритм існує. Я буду лише доводити, що пов'язаний, але під вірогідним припущенням рандомізації ми також отримаємо . Я також опишу спробу і .lg(n!)+o(n)lg(n!)+O(n1−ε)n0.5+o(1)O(n0.5−ε)
Ми можемо вважати, що всі елементи є різними, анотуючи їх у разі потреби; середній випадок використовує різні елементи у випадковому порядку. Ми можемо обчислити середню кількість порівнянь, додавши втрати ентропії за кожне порівняння відносно використання справедливої монети.
Відправною точкою є сортування вставкою з двійкового пошуку , щоб вирішити , куди вставити наступний елемент в відсортоване підмножина . Коли , вставка використовує не більше зіставлень, що (з точки зору ентропії) є оптимальним до коефіцієнта адитивного (а для середньої складності - також працює). Тепер, колине наближається до потужності 2, вставлення елемента є неоптимальним (навіть у середньому випадку та незалежно від того, як ми врівноважуємо кожен запит), але якби витрачати порівняння, ми могли б керувати до приблизно рівномірного розподілу через інтервал відS(1−ε)2m≤|S|≤2m−1mO(ε)2m≤|S|≤(1+ε)2m|S|Ao(1)ASДовжина близька до потужності 2, отримуємо бажану оптимальність.
Ми досягаємо цього, додаючи елементи в партії, а іноді і ефективно порівнюючи елементи партії один з одним, таким чином, що інтервал відповідний елементу зменшується квазі випадковим чином (і з розподілом ймовірності всередині інтервалу майже рівномірні), і , коли довжина інтервалу досить близько до влади 2, роблячи бінарний пошук для вставки .SAAA
Поширені конструкції
Ми будемо тримати підмножина відсортованих елементів, і для кожного елемента несортоване , ми будемо стежити за мінімальним інтервалом з , де , як відомо, знаходиться. - довжина ; по тотожності інтервалів.SAIASA|IA|IAIA=IB
Нехай буде: Порівняйте з , а потім (у випадковому порядку) порівняйте і проти відповідних елементів до тих пір, поки їх інтервали не будуть роз'єднані (або мають довжину 1). Елемент вибирається (послідовно), щоб зробити ймовірності порівняння максимально близькими до 1/2, припускаючи, що коли викликається , рівномірно розподілено на . Через нерозбірливість зрештою, зберігає припущення про рівномірність.Compare(A,B)ABABSSCompare(A,B)IA×IBCompare
Наступні розділи можна читати незалежно один від одного.
алгоритм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)mm−o(m)cloglogm/logmm(1−log−Θ(c)m)lg(n!)+O(nloglogn/logn)
Примітка 2: Оскільки однакова послідовність порівнянь призводить до одного і того ж обмежувального інтервалу, майже всі елементи пройдуть через крок (1) рази (якщо їх не видалено на кроці 4). На початку, якщо і виберемо , порівняємо з елементом , і кожен додаток кроку (3) до має ймовірність зниженняв разів. Тепер для кожного відношення що не є раціональною силою 2, маємо , і тому отримаємоΩ(logm)A<BAAS[≈(1−1/2–√)|S|]AO(1)|IA|≈1/(1−1/2–√)a>1∀ε>0∀d>0∃m,n∈N1−ε<amd2n<1+εo(n) пов'язаний.
Вірогідний алгоритмlg(n!)+O(n1−ε)
Модулюючи припущення про рандомізацію, ми можемо досягти середніх порівнянь наступним чином.lg(n!)+O(n1−ε)
Довільно перемішуйте елементи та сортуйте першу половину у списку , зберігаючи другу половину як несортовану партію.S
Повторюйте, поки партія не буде порожньою:
Випадково виберіть . Нехай . Якщо порожній, видаліть з партії і вставок в . Інакше:A∈batchG={B∈batch:|P(A<B)−0.5|<n−0.51ε}GAS
- Якщо є такий, що з ймовірністю (скажімо, ≥0,05), робитьв межах відносна похибка потужності 2, запустіть і, якщо є успішною (тобто знаходиться в межах відносної похибки потужності 2) , видалити з партії і вставок в .B∈GΘ(1)Compare(A,B)|IA|n−εCompare(A,B)|IA|n−εAS
- Якщо такого немає , запустіть для випадкового .B∈GCompare(A,B)B∈G
Якщо наше припущення про рандомізацію спрацьовує (тобто розподіл довжин інтервалів та позицій є досить випадковим), то впродовж більшої частини процесу типовий може бути ефективно порівняний з вибором елементів (з різної довжини інтервалу). Таким чином, ми можемо обирати порівняння для (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/32≈0.09
Можливо, набагато кращим підходом є почекати, поки інтервал не наблизиться до потужності 2, контролюючи не окремі довжини інтервалу, а розподіл довжин.
Спроба алгоритмуlg(n!)+n0.5+o(1)
Припустимо, що і нам задано несортовану партію з елементів з також заданими інтервалами , зяк правило, і з розподіляється рівномірно (до випадкової помилки та тримається з достатньою точністю, навіть якщо це обумовлено ). Тоді ми можемо сортувати елементи, витрачаючи в середньому порівнянь так:
(*) Вставте всі елементи в порядку їх початкового . Таким чином всі елементи вставляються, коли їх довжина інтервалу близька до сили 2.|S|=nnIA|IA|n1−o(1)|IA|2⌊lg|IA|⌋A<S[i]n0.5+o(1)
|IA|2⌊lg|IA|⌋
Алгоритм сортування буде: Довільний перетасувати список і сортування першу половину . Щоб вставити другу половинку, зробіть правильний розподіл і виконайте (*) вище.S
Щоб зробити справа розподілу, ми можемо зробити "випадковий" розподіл, а потім утримати праву частку елементів для кожного під час рандомізації решти (повторення, якщо потрібно). Однак, хоча це має виправити всьому світі ми не знаємо, чи можна керувати ним локально з необхідною точністю (звідси слово "спроба" вище).|IA|2⌊lg|IA|⌋|IA|/2⌊lg|IA|⌋|IA|2⌊lg|IA|⌋
Щоб зробити "випадковий" розподіл, ми можемо випадковим чином використовувати з , за винятком того, що з початковим всі однакові, ми не очікуємо рандомізації на сублогарифмічній глибині (тобто з досить довго). Однак я здогадуюсь, що ми отримуємо рандомізацію на сублогоарифмічній глибині, використовуючи узагальнення (можливо, спрацює будь-який розумний вибір) елементів з елементами: Якщо ми збережемо елементи заплутаними (тобто пов'язане з використанням результатів порівняння), ми повинні мати про некоммутірующего вибору для кожного порівняння з . Це повинно дозволятиCompare(A,B)P(A<B)≈0.5IAIAComparek=ω(1)k=ω(1)kSO(logkn+logk)глибина рандомізації, за бажанням (якщо припустити, що не надто велика, оскільки нам потрібна глибина для відшарування елементів). Я очікую, що обчислення можна зробити квазілінійним, якщо використовувати достатньо малий .kΘ(logk)k
Оскільки для порівняння з так ймовірність лише відходів ентропії, для початкової рандомізації та незначної нерівномірності елементів у їх обмежувальних інтервалах потрібно лише ентропійні відходи. Якщо формування розподілу досягає достатнього успіху, відходи ентропії випливають, головним чином, з невідповідності інтервалів довжини під час (*) (звідси ).1/2+n−0.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)рази, що, в свою чергу, зменшує відхилення довжини випадкових інтервалів в разів. Тепер ми можемо використовувати вищевказаний алгоритм для вставки решти елементів з відходів, якщо невеликий достатньо.n1−o(1)nε/2−o(1)lg(n!)+O(n1−ε)O(n0.5−ε′)ε
Найгірша складність сортування: Швидше за все, існує алгоритм сортування з найгіршими порівняннями. Для знаходження медіани існує лінійний проміжок між середнім випадком ( порівняння) та найгіршим (принаймні порівняннями). Однак для сортування існує достатньо свободи для впорядкування порівнянь та пошуку нових алгоритмів сортування.lg(n!)+o(n)1.5n+o(n)(2+ε)n−O(1)