Алгоритм сортировки, такой, что каждый элемент сравнивается раз и не зависит от сети сортировки


39

Существуют ли известные алгоритмы сортировки сравнений, которые не сводятся к сеткам сортировки, чтобы каждый элемент сравнивался раз?O(logn)

Насколько я знаю, единственный способ сортировки по для каждого элемента состоит в том, чтобы построить сеть сортировки AKS для n входов и запустить вход в сети сортировки.O(logn)n

AKS нелегко реализовать и имеет непрактичный постоянный фактор, поэтому есть причины искать другие алгоритмы.

Алгоритм с O(log2n) сравнений за единицу , которая , кажется, не означает , сортировочную сеть представлена здесь . (iirc, это было впервые представлено Робом Джонсоном на семинаре по алгоритму Стоуни Брука).


2
Я не понимаю вопроса: многие последовательные алгоритмы, кажется, соответствуют вашему запросу. Например, сортировка слиянием является классическим алгоритмом сортировки и не производит более logn сравнения на элемент. Может быть, вы спрашиваете об алгоритмах параллельной сортировки?
Джереми

4
@ Джереми: если вы объединяете два списка, и , вы можете сравнить с каждым из , то есть сравнения на один элемент. И это был только один шаг «слияния». Конечно, среднее количество сравнений обязательно мало, но вопрос о сложности наихудшего случая . (a1,...,an)(b1,...,bn)a1b1,...,bnΩ(n)
Юкка Суомела

6
Я верю, что это возможно. Сети сортировки игнорируют данные и имеют заранее определенный способ сравнения, но алгоритм сортировки может выбирать между различными наборами операций, зависящими от данных. Можно преобразовать сортировку слиянием в алгоритм со сравнением для каждого элемента, и, по-видимому, не подразумевает сортировочную сеть reddit.com/comments/9jqsi/…O(log2n)
Чао Сюй

1
Юкка: Спасибо, я понял твою точку зрения. Но это только при использовании наивного слияния: можно объединить с используя удвоение поиска для размещения каждого элемента, что в целом равно сравнений в худшем случае, но Максимум сравнений на элемент, что дает версию сортировки слиянием, на которую ссылается Чао. (a1,,an)(b1,,bn)nlgn
Джереми

2
Теперь есть новый связанный (но, надеюсь, намного более простой) вопрос: cstheory.stackexchange.com/questions/8073/…
Юкка Суомела

Ответы:


17

Обсуждая это с Майклом Т. Гудричем, кажется, что алгоритм параллельной сортировки Коул для EREW PRAM делает свою работу. Видеть

O(logn)O(1)

Расширение этого алгоритма для машины с параллельными указателями приведено в


Мы хотели бы знать, кто вы есть! : D
Тайфун Pay


O(logn)O(logn)
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.