Автор оригинала: Team Python Pool.
TimSort: Алгоритм и реализация в Python
Привет, кодеры!! В этой статье мы познакомимся с алгоритмом TimSort и изучим его реализацию на Python. Тим Питерс создал TimSort в 2002 году to улучшить производительность сортировки списка. Функция sort() использует этот алгоритм и является самым быстрым алгоритмом сортировки.
Что такое алгоритм Python TimSort?
TimSort-это алгоритм сортировки, представляющий собой гибрид алгоритма сортировки слиянием и сортировки вставкой. Это стабильный алгоритм, работающий на данных реального времени. При этом сначала анализируется список, который необходимо отсортировать, и на его основе выбирается наилучший подход.
Алгоритм Python TimSort:
- Разделите массив на блоки, известные как run
- Размер прогона может быть как 32, так и 64
- Сортировка элементов каждого прогона с помощью сортировки вставки
- Слияние отсортированных запусков с помощью алгоритма сортировки слиянием
- Удваивайте размер объединенного массива после каждой итерации
Понимание алгоритма в деталях:
Расчет минимального пробега:
Теперь мы знаем, что первым шагом алгоритма Python Timsort является разделение блоков на прогоны. minrun – это минимальная длина каждого пробега. Он вычисляется из числа элементов массива N.
- Это не должно быть очень долго, так как мы будем реализовывать сортировку вставки для сортировки каждого запуска, и мы знаем, что сортировка вставки работает более эффективно для более коротких массивов
- Однако он также не должен быть слишком коротким, так как следующим шагом является слияние этих запусков, более короткие запуски приведут к большему количеству запусков
- Это выгодно, если N/min run имеет степень 2, так как это приведет к наилучшей производительности при сортировке слиянием.
Разбиение и сортировка пробегов:
Когда мы достигаем этого шага, у нас уже есть два значения – N и minrun
- Флаг нисходящий – это сравнение между первыми 2 элементами, если остался только 1 элемент, то он устанавливается как false.
- Затем другие элементы повторяются и проверяются, находятся ли они все еще в восходящем или “строгом” порядке убывания, пока не будет найден элемент, который не следует этому порядку.
- После этого у нас будет запуск в восходящем или “строгом” нисходящем порядке. Если он находится в “строгом” порядке убывания, мы должны обратить его вспять.
- Затем мы проверяем, чтобы убедиться, что длина пробега удовлетворяет минимальному пробегу. Если он меньше, мы компенсируем следующие пункты, чтобы он достиг минимального размера.
слияние трасс:
- Сначала мы создадим временный прогон, имеющий размер наименьшего из объединенных прогонов.
- После этого нам нужно скопировать самый короткий href=”https://en.wikipedia.org/wiki/Run_command”>запустите во временный. href=”https://en.wikipedia.org/wiki/Run_command”>запустите во временный.
- Теперь мы пометим первый элемент большого и временного массива как текущую позицию.
- На каждом следующем шаге мы будем сравнивать элементы в больших и временных массивах, а меньшие будут перемещены в новый отсортированный массив.
- Нам нужно повторить описанный выше шаг до тех пор, пока один из массивов не закончится.
- Наконец, мы добавим все остальные элементы в конец нового.
Реализация алгоритма Тима в Python:
Выход:
ВЫХОД
Анализ сложности алгоритма Python TimSort:
- Наихудшая временная сложность: O(n log n)
- Наилучшая временная сложность: O(n)
- Средняя временная сложность: O(n log n)
- Наихудшая пространственная сложность: O(n)
Преимущества Python Timsort:
- Это стабильный алгоритм сортировки
- Работает для данных в режиме реального времени
Надо Читать
- Сортировка вставки в Python [Программа, алгоритм, Пример]
- Алгоритм сортировки оболочки и программа на Python
- Изучение различных способов сортировки списка списков в Python
- Методы Сортировки С Использованием Python
- КАК PYTHON СОРТИРУЕТ СПИСОК КОРТЕЖЕЙ
Вывод:
Это все об алгоритме Python TimSort. Встроенная функция < strong> sort() Python использует этот алгоритм, поскольку он обеспечивает стабильный подход к сортировке. Он быстрее других алгоритмов сортировки и может быть непосредственно реализован в python с помощью метода sort ().