Pull to refresh

Comments 28

Но всегда ли QuickSort является «абсолютным чемпионом»?

Нет, не всегда.


Мне вот интересно, вы про timsort слышали?

Когда я читал, там был TeamSort, который мне неизвестен.


А если вы про него знаете, то странно, что вы не обсуждаете его, потому что он обладает описанным качеством (и в пределе на отсортированных данных имеет линейное время выполнения), но при этом имеет худший случай с n log n.

Было интересно. Забыл спросить разрешения у вас…
Поздравляю, вы открыли адаптивные сортировки, упомянутый timsort как раз из этих ребят.
UFO landed and left these words here
Худшее — да. Среднее — нет. Я рассматривал QuickSort в выгодной для нее области.

В выгодной области сортировка у меня занимает о(1). Обычно все таки принято указывать худшее время для алгоритмов, а не среднее, когда говорят о теоретической производительности.
Какая универсальная сортировка у вас выполняется за O(1)?
«Ничего не делать» — это универсальный метод, переоткрытый лично мной. Возможно напишу статью на эту тему. Работает за 0 времени. В случае уже отсортированных данных работает отлично за О(1). В других случаях — хуже, может сортировать за О(inf). Но важна ведь удобная для него область…
А… Ну понятно. Уровень возражения чувствуется.
Ну тут все, конечно, можно притянуть за уши.

Есть такая теорема, что если мы считаем QuickSort недетерминированным (случайный выбор элемента для partition на каждом шаге), а потом посчитаем среднее время для всех возможных стартовых сидов этого случайного алгоритма, то мы действительно получим n log(n). Тоесть, в каком-то смысле QS «всреднем» эффективен, а «неудобная область» для него довольно мала.

Но в этом случае:
1) Нужно обговорить что мы имеем ввиду под «показатель производительности». Это может быть и не сложность алгоритма.
2) Нельзя использовать O-нотацию.
3) Вообще, упомянуть эти вещи

Ну и еще могу набросать претензий. А пока статья выглядит как школьная домашняя работа в духе «посмотрите, что я узнал за летние каникулы».

Да я знаю, что я не совсем прав, но автор статьи так забавно поставляется под троллинг и так на него ведётся…
А О нотация — это просто нотация. Ей можно характеризовать и теоретическую и практическую производительность, но с оговорками.
Обычно они совпадают и оговорок не требуется.
А статья — да, согласен, школьная. Другие у автора получше.
А некоторым читателям и школьные знания будут нелишиними…
«Ну и еще могу набросать претензий» — у вас, часом, не юридическое образование?

Вообще говоря, теоретически, можно выбирать медиану за O(n) и тогда квиксорт работает за O(n log n) в худшем случае. Этого никто не делает, потому что на практике получается сильно медленнее из-за офигенно большой константы линейного поиска медианы.


Если тупо выбирать случайный pivot, то вероятность быть заметно медленее n log n пренебрежимо мала.

Речь шла о том, что не стоит ссылаться на источник, в котором написано ровно противоположное. А вариация с медианой медиан это все таки не совсем тот же алгоритм., Но интересный, поскольку медиана медиан -это необязательно медиана и как раз медиану за о(п) выбрать таким способом не получится. Так что читайте внимательней источники :)

Нет, алгоритм по ссылке — именно находит медиану (вернее любую к-ую порядковую статистику) за O(n). Медиана медиан в нем используется в качестве разделителя, чтобы две половины были достаточно равные.

Не убедили.Ни относительно порядка, ни относительно медианы… Будет время, проанализирую повнимательней.
Sign up to leave a comment.

Articles