Сортировать VS RADIX
-
29-09-2020 - |
Вопрос
на кодирующем экзамене, я когда-то задал этот вопрос:
Предполагая, что вы только сортировка целых чисел в порядке возрастания, какой алгоритм вы используете, когда вы хотите приоритетировать скорость больше всего, но вы также хотите сохранить место?
Варианты были:
.
- lsd Radix Сортировка
- Сортировка слияния
- быстрый сортировка
Я думаю, что аргумент может быть сделан между LSD Radix сортировка и Quicksort .
Radix Сортировка будет функционировать в $ O (Kn) $ и Quicksort будет функционировать в $ O (n \ log n) $ и худший случай, $ o (n ^ 2) $
Я выбрал Radix Сортировать как ответ, но мне интересно, что нужно сказать, что другие должны были сказать.
Решение
Это зависит ... Если количество входных чисел составляет $ N $ , предполагая, что модель вычислений Word-Ram, размер слов $ \ theta (\ log n) $ биты и худшие входы:
- .
-
radix sort потребуется $ O (n \ log n) $ time и $ O (n) $ вспомогательное пространство.
-
Quicksort с фиксированным или случайным выбором поворота потребуется $ O (n ^ 2) $ Время наихудшего случая и $ o (n \ log n) $ time и $ O (n) $ < / span> вспомогательное пространство.
Radix Сортировка и сортировка слияния, а затем эквивалентны в этой настройке.
Обратите внимание, что с использованием QuickSort со случайным выбором Pivoit приводит к тому, что сложность времени $ O (n \ log n) $ с высокой вероятностью. Выбирая шарнир детерминистративно таким образом, который разбивает элементы на два набора, кардинальности которых находятся самым большим постоянным фактором, предоставляют вашему алгоритму с наихудшим случаем сложности $ O (n \ log n) $ и $ o (\ log n) $ вспомогательное пространство.