Алгоритм сортування, такий, що кожен елемент порівнює


39

Чи існують відомі алгоритми сортування порівняння, які не зводяться до сортування мереж, таким чином, щоб кожен елемент порівнювався разів?О(журнал⁡н)

Наскільки мені відомо, єдиний спосіб порівняння за допомогою порівняння на кожному елементі - це побудувати мережу сортування AKS для n входів та запустити вхід у сортувальній мережі.О(журнал⁡н)н

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

Алгоритм з порівнянь за одиницю , яка , здається, не означає , сортувальну мережа представлена тут . (iirc, це вперше було представлено Роб Джонсоном на семінарі з алгоритму Стоні Брука).О(журнал2⁡н)


2
Я не розумію питання: багато послідовних алгоритмів, здається, відповідають вашому запиту. наприклад Сортування об'єднань є класичним алгоритмом сортування, і він не робить більше, ніж порівняння на елемент. Можливо, ви запитуєте про алгоритми паралельного сортування? журнал⁡н
— Джеремі

4
@Jeremy: Якщо об'єднати два списки, і ( б 1 , . . . , Б п ) , ви можете в кінцевому підсумку по порівнянні з 1 проти кожного з Ь 1 , . . . , b n , тобто порівняння Ω ( n ) на один елемент. І це був лише один крок "злиття". Звичайно середнє(а1,...,ан)(б1,...,бн)а1б1,...,бнΩ(н)кількість порівнянь обов'язково невелика, але питання полягає в найгіршому випадку складності.
— Jukka Suomela

6
Я вважаю, що це можливо. Мережі сортування не мають даних про дані та мають заздалегідь визначений спосіб порівняння, але алгоритм сортування може обирати між різними наборами операцій залежно від даних. Можна змінити сортування злиття в алгоритм зі порівнянням для кожного елемента, і, схоже, не передбачає сортування мережі reddit.com/comments/9jqsi/…О(журнал2⁡н)
— Chao Xu

1
(а1,…,ан)(б1,…,бн)нlg⁡н

2
Тепер виникає нове споріднене (але, сподіваюсь, набагато простіше) питання: cstheory.stackexchange.com/questions/8073/…
— Jukka Suomela

Відповіді:


17

Обговорюючи це з Майклом Т. Гудричем, здається, що алгоритм паралельного сортування Коулом для EREW PRAM виконує цю роботу. Побачити

О(журнал⁡н)О(1)

Розширення цього алгоритму для паралельної машини покажчика наведено в


Ми хотіли б знати, хто ви! : D
— Tayfun Pay

@someone - Серхіо Кабелло
— хтось

О(журнал⁡н)О(журнал⁡н)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.