Вопрос

на кодирующем экзамене, я когда-то задал этот вопрос:

Предполагая, что вы только сортировка целых чисел в порядке возрастания, какой алгоритм вы используете, когда вы хотите приоритетировать скорость больше всего, но вы также хотите сохранить место?

Варианты были:

    .
  • 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) $ вспомогательное пространство.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с cs.stackexchange
scroll top