timsort

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

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

Date: 2012-02-08 11:19 pm (UTC)
ext_605364: geg MOPO4 (Default)
From: [identity profile] gegmopo4.livejournal.com
Тоже баян. Что сама статья, что алгоритм, который уже широко используется. ;)

Date: 2012-02-09 10:38 am (UTC)
From: [identity profile] netch80.livejournal.com
Это журнал для того, что мне интересно сказать, а не для свежих новостей.

За третью реплику про "баян" забаню. Ничего личного.

Date: 2012-02-09 01:13 pm (UTC)
ext_605364: geg MOPO4 (Default)
From: [identity profile] gegmopo4.livejournal.com
Да нет, я просто удивляюсь. Ведь и Питон, кажется, используете, а там timsort. Хотя, конечно, использовать — не значит погружаться в такие мелочи.

Если мне не изменяет память, на Хабре, где статьи обычно идут косяками, про timsort тоже было несколько статей.

Date: 2012-02-09 01:17 pm (UTC)
ext_605364: geg MOPO4 (Default)
From: [identity profile] gegmopo4.livejournal.com
За «баян» прошу меня простить. Извините, если это выглядело оскорбительно и грубо, я не имел в виду троллить.

Date: 2012-02-09 09:00 am (UTC)
From: [identity profile] http://users.livejournal.com/_slw/
гм. памяти n. у binary tree такие же характеристики, кстати

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:52 am
Powered by Dreamwidth Studios