LINUX.ORG.RU

Об эффективности radix sort

 безобразие, , ,


0

1

Читаю я http://en.wikipedia.org/wiki/Radix_sort и вижу что мою любимую сортировку пытаются очернить. Там сказано что в случае если у нас есть N различных чисел то какой-то там quicksort зарулит radix. Логика, на сколько я понял, такая: у radix sort сложность O(kN), где k это кол-во цифр в числах. И якобы в случае если все числа разные то нам нужно минимум log2(N) цифр для сортировки.

Но ведь это же гонево! Я могу применять radix sort в, скажем, 16-ичной системе исчисления. Тут лишь бы «корзин» хватило.

На случай если не понятно перефразирую. Сортировки которые основаны на сравнении двух элементов это, по сути, вырожденый radix sort с двумя корзинами. Но ведь radix sort не ограничен только двумя корзинами.

Господа эксперты, кто прав: пьяный я или википедия?

cast tailgunner, mv, madcore, anonymous, sdio, hizel, mashina .

★★★★★

В сортировках, основанных на сравнении,ты можешь выбрать 15 элементов и разбить массив на 16 групп, тогда сложность будет O(N*log_16 N). Шах и мат.

prischeyadro ★★★☆☆
()
Ответ на: комментарий от true_admin

Нет, конечно, я не буду эту наркоманию программировать.
Стандартный подход в divide-and-conquer-алгоритмах сортировки, основанных на сравнении: выбрать 1 элемент, разбить массив на два подмассива, в одном все элементы, меньшие выбранного, в другом все элементы, большие выбранного. Один элемент разделяет массив на две группы, которые потом точно так же обрабатываются рекурсивно. Тогда пятнадцать элементов, выбранных на одном уровне рекурсии, разделят массив на 16 подмассивов, которые будут обрабатываться рекурсивно.

prischeyadro ★★★☆☆
()
Ответ на: комментарий от prischeyadro

Тогда пятнадцать элементов, выбранных на одном уровне рекурсии, разделят массив на 16 подмассивов, которые будут обрабатываться рекурсивно.

Так это нельзя сделать за O(1) если у тебя только операция сравнения. То что ты написал и есть radix sort.

true_admin ★★★★★
() автор топика
Ответ на: комментарий от prischeyadro

Во-первых, как ты определишь диапазоны для 16 корзин? Во-вторых, каждый из 16 элементов надо будет проверить на вхождение в 16/2=8 корзин. Так что тут всё тот же nlog(n)

true_admin ★★★★★
() автор топика
Ответ на: комментарий от true_admin

Во-первых, как ты определишь диапазоны для 16 корзин?

Друг с другом сравниваешь выбранные элементы и выстраиваешь по порядку. То, что между ними — твои «корзины». Делается за O(1).

prischeyadro ★★★☆☆
()
Ответ на: комментарий от Waterlaz

O(N*log_16 N) = O(N*log_2 N)

Не с практической точки зрения, кмк. Константа имеет значение.

true_admin ★★★★★
() автор топика
Ответ на: комментарий от prischeyadro

Делается за O(1).

Ты очень лихо пропустил промежуточные вычисления и рассуждаешь только о последнем этапе сортировки. А как ты будешь по корзинам раскидывать на предыдущем этапе?

Вообще, по твоей логике любая comparison sorting имеет O(n) complexity.

true_admin ★★★★★
() автор топика
Ответ на: комментарий от prischeyadro

Так задача не 15 элементов отсортировать, задача отсортировать, скажем, 1024 элемента. Как в таком случае будет работать твой алгоритм?

true_admin ★★★★★
() автор топика
Ответ на: комментарий от true_admin

Выбриаем 15 элементов, сортируем. За постоянное время T1 (потому что количество элементов константно). Потом начинает делить массив, сравнивая каждый элемент с 15-ю выбранными элементами. Время обработки одного элемента T2 постоянно (потому что сравнение идёт с константным количеством элементов). Для N элементов в подмассиве получаем время работы T1 + T2*N на одном уровне рекурсии. O(T1 + T2*N) = O(N). А всего таких уровней будет log_16(N).

prischeyadro ★★★☆☆
()

Чудится мне, что 3-way quicksort в случае небольшого числа различных ключей работает как radix sort.

i-rinat ★★★★★
()

Для целых, в том числе и 128 битовых, на достаточно больших массивах правильный радикс рвет любые другие сорты как тузик грелку. Реально проверял кучу вариантов вплоть до миллиарда элементов. Вот отличный диссер в котором есть грамотная глава про реализацию радикса. http://www.diva-portal.org/smash/record.jsf?pid=diva2:124519&dswid=-3371 Качайте там pdf - будет вам счастье в радиксе.

atoku ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.