Является ли timsort универсальным или специфичным для Python?

StackOverflow https://stackoverflow.com/questions/154504

  •  03-07-2019
  •  | 
  •  

Вопрос

Тимскорт - это адаптивный, стабильный, естественный смеситель.Он обладает сверхъестественной производительностью во многих видах частично упорядоченных массивов (меньше, чем требуется сравнения LG (N!), И всего лишь N-1), но так же быстро, как предыдущий высоко настроенный гибрид Samplesort Python на случайных массивах.

Ты видел Тимсорт используется вне CPython?Имеет ли это смысл?

Это было полезно?

Решение

Да, имеет смысл использовать timsort вне CPython в частности или Python в целом.

В настоящее время существует предпринимаются усилия заменить «модифицированную сортировку слиянием» Java на timsort, и первоначальные результаты весьма положительные.

Другие советы

Алгоритм довольно общий, но преимущества скорее специфичны для Python.В отличие от большинства процедур сортировки, Python list.sort (который использует timsort) заботится о том, чтобы избежать ненужных сравнений, поскольку обычно сравнения — это много дороже, чем замена элементов (которая всегда представляет собой просто набор копий указателей) или даже выделение некоторой дополнительной памяти (потому что это всегда просто массив указателей, а накладные расходы невелики по сравнению со средними накладными расходами в любой операции Python.)

Если у вас аналогичные ограничения, то это может подойти.Однако я еще не видел ни одного случая, когда сравнения действительно были бы настолько дорогими :-)

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

Что касается того, имеет ли это смысл, это зависит от того, что вы сортируете, и относительной стоимости сравнений по сравнению с другими.выделение памяти.Сортировка, требующая до 2*N байт дополнительной памяти, не будет хорошим выбором в среде с ограниченной памятью.

Ответил сейчас на Википедия:timsort будет использоваться в Java 7, которая скопировала его из Android.

Описание, которое вы привели, выглядит совершенно общим.

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