Изменения

Перейти к: навигация, поиск

Терпеливая сортировка

12 байт добавлено, 17:14, 7 июня 2014
Нет описания правки
'''Терпеливая сортировка '''(англ. ''patience sorting'') {{- --}} алгоритм сортировки с худшей сложностью <tex>O(n</tex> <tex>log</tex> <tex>n)</tex>. Позволяет также вычислить длину наибольшей возрастающей подпоследовательности данного массива. Алгоритм назван по одному из названий карточной игры "Солитёр" — "Patience".
== Алгоритм ==
== Сложность ==
Создадим массив стеков для хранения стопок. При раскладывании элементов по стопкам для поиска самой левой подходящей стопки используем бинарный поиск. Соответственно, поиск самой левой стопки занимает <tex>O(log</tex> <tex>p)</tex>, где p {{- --}} количество стопок (стеков). Таким образом, временная сложность раскладывания по стопкам не превышает <tex>O(n \cdot \log n)</tex>.
Для получения отстортированного массива используем бинарную кучу. На каждом шаге алгоритма необходимо извлечь из кучи стек с минимальной вершиной за <tex>O(log</tex> <tex>p)</tex>, где p - количество стеков в куче. Снять вершину выбранного стека и вернуть его в кучу за <tex>O(log</tex> <tex>p)</tex>. Получение отсортированного массива займёт <tex>O(n \cdot log</tex> <tex>n)</tex> времени.
Получение наибольшей возрастающей подпоследовательности выполняется за <tex>O(n)</tex> по описанному выше алгоритму.

Навигация