timsort

Jan. 8th, 2012 07:41 pm
netch80: (Default)
[personal profile] netch80
Отличный пример того, как происходят прорывы вроде бы в давно изведанных областях.

Гарантированно устойчивое O(n log n), с отличным постоянным коэффициентом и стабильным порядком. Хотя реализацию на пальцах не объяснить.

Date: 2012-02-09 10:42 am (UTC)
From: [identity profile] netch80.livejournal.com
Там (у двоичного дерева) постоянный коэффициент сильно выше. И ещё timsort сокращает количество сравнений. В местах, где сравнения дорогие, а перестановки дешёвые, он может оказаться эффективнее на порядок.

В табличке в статье не приводится оценок количества сравнений и перестановок в зависимости от размера, а зря.

Есть ещё характеристики, которые не приведены там и могут существенно повлиять. Например, сортировка Бэтчера принципиально параллелится изначально. Timsort близка к этому. Хоар параллелится хуже, хотя в общем случае таки неплохо.
В общем, тут есть куда копать:)

Date: 2012-02-09 11:49 am (UTC)
From: [identity profile] http://users.livejournal.com/_slw/
там еще не уточняется какой именно памяти надо N. при больших объектах это тоже существенно.

Date: 2012-02-09 01:33 pm (UTC)
ext_605364: geg MOPO4 (Default)
From: [identity profile] gegmopo4.livejournal.com
Именно так в Python и Java. Сравнение — это вызов пользовательского кода (даже для встроенных типов несколько виртуальных вызовов), а перестановка — пара машинных инструкций.

Количество сравнений и перестановок зависит не только от размера, но и от распределения. Для совершенно случайного получим одно, но timsort выгоден тем, что очень хорошо ведёт себя на неслучайных данных. И тут уже зависит от фантазии тестировщика, какие неслучайные последовательности он посчитает близкими к реальности.

Profile

netch80: (Default)
netch80

January 2026

S M T W T F S
    1 23
45678910
11121314151617
18192021222324
25262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 3rd, 2026 05:09 am
Powered by Dreamwidth Studios