Чи можливе цілочисельне сортування в O (n) в трансдихотомічній моделі?


9

Наскільки мені відомо, не існує а O(n) найгірший алгоритм, який вирішує наступну проблему:

Дана послідовність довжини n складаючись з кінцевих цілих чисел, знайдіть перестановку, де кожен елемент менший або рівний його наступнику.

Але чи є докази того, що його немає в трансдихотомічній моделі обчислення ?


Зауважте, що я не обмежую діапазон цілих чисел. Я також не обмежую рішення порівнянням.


Наскільки я знаю, можливо, є O(n)алгоритм часу для SAT! Тож відповідь - ні.
Лембік

5
AFAIK, це все ще відкрита проблема.
Джухо

2
Я не знаю, чи може бути вагома відповідь, поки ви не вкажете, яку модель обчислень ви використовуєте, враховуючи, що ви не обмежуєте комп'ютер порівняннями та свопами. Маючи лише порівняльну оперативну пам’ять та порівняння з двома числами, аргумент ентропії дає aΩ(nlog(n))обмежений часом, навіть для трансдихотомічних комп'ютерів. Тривіально, якщо сортування замість свопів і порівнянь є елементарною операцією, це можна зробитиΘ(1). Якщо вставити ціле число в потрібне місце - це елементарна операція,Θ(n). Чи було у вас на увазі конкретну модель своп-порівняння?
Lieuwe Vinkhuijzen

2
@LieuweVinkhuijzen Моє запитання визначає трансдіхотомічну модель обчислення. Простий англійською мовою: модель обчислення, де розмір слова машини є достатньо великим, щоб вмістити будь-яке ціле число проблеми. Таким чином, порівняння будь-яких двох цілих чисел є O (1), але так само додавання, множення тощо. У цій моделі обчислення ентропічне обмеження вже побито, див. Han, Yijie (2004), "Детерміноване сортування в O (n log log n) часу та лінійному просторі" .
orlp

@orlp Я бачу; якщо ви скористаєтеся структурою цілих чисел, ви можете перемогти ентропічну межу. Я не знав про цілочисельне сортування; Я обов’язково почитаю на цю тему!
Lieuwe Vinkhuijzen

Відповіді:


4

Цілі особи можна стабільно сортувати O(n) час с O(1)додатковий простір. Точніше, якщо у вас єn цілі числа в діапазоні [1,nc], можна сортувати за O (n) час.

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

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


1
З того, що я можу зрозуміти з реферату, це не є загальним - воно може лише сортувати слова logn за розміром в O(n). У моєму питанні прямо вказані необмежені цілі числа.
orlp

@orlp Третій алгоритм у статті розповідає про цілі числа з необмеженою довжиною.
Псевдонім

1
Можливо, я його неправильно читаю, але бачу лише опис методу зменшення використання пам'яті алгоритмів сортування без обмежених цілих чисел. Цитуючи з конспекту (моє наголос): "Ще одне цікаве питання - це справа довільноїc. Тут ми представляємо перетворення чорного поля з будь-якого алгоритму сортування оперативної пам’яті в алгоритм сортування, який використовує лише O (1) додатковий простір і має той самий час роботи . ”
orlp

3
Пробачте, але в поточному стані ця відповідь зовсім не відповідає на питання . Я чітко зазначив, що цілі числа не обмежені . Ця відповідь вирішує зовсім іншу проблему.
orlp

1
Остаточний момент тепер уже не маленьким шрифтом :)
orlp

-1

Для цілих чисел можна використовувати сортування Radix . Він створює відра і потім сортує список номерів уO(bn) де b - це верхня межа розміру в бітах будь-якого цілого числа, і n кількість елементів для сортування.

Якщо немає верхньої межі розміру ваших цілих чисел, то я не вірю, що існує якийсь відомий алгоритм сортування лінійного часу.


5
Ласкаво просимо! Те, що ви говорите, цілком правдиве, але я не думаю, що це відповідає на питання. Питання задає конкретно доказ того, що необхідний алгоритм не існує в конкретній моделі обчислення; Лише сказане, що не існує такого алгоритму, не підтверджує, що такого не існує.
Девід Річербі

Насправді, будучи постійною в нашій проблемі, я вважаю, що цей алгоритм знаходиться в o (n)
RFC 2549,

2
Питання нічого не говорить про це bбути постійною. Це просто говорить, що ми маємоnчисла. Ці числа можуть бути довільно великими. (Крім того, це, мабуть, просто помилка у вашому коментарі, але зауважте цеO(n) і o(n)це дві дуже різні речі.)
Девід Річербі

Так, безумовно, друкарська помилка;) у його питанні, як ви вважаєте, число, яке вписується у слово довжиною b, воно стає постійною.
RFC 2549,

1
Це не робить довжину слова постійною. ( В іншому випадку, не було б ніяких підстав припускати , явно «що операції на окремих слів займе постійне час на операцію».
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.