57
правок
Изменения
→Сложность
== Сложность ==
Создадим массив стеков для хранения стопок. При раскладывании элементов по стопкам для поиска самой левой подходящей стопки используем бинарный поиск. Соответственно, поиск самой левой стопки занимает <tex>O(log</tex> <tex>p)</tex>, где p - количество стопок (стеков). Таким образом, временная сложность раскладывания по стопкам не превышает <tex>O(n \cdot \log n)</tex>.
Для получения отстортированного массива используем бинарную кучу. На каждом шаге алгоритма необходимо извлечь из кучи стек с минимальной вершиной за <tex>O(1)</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> по описанному выше алгоритму.
Таким образом, алгоритм сортировки требует <tex>O(n \cdot \log n)</tex> времени в худшем случае и <tex>O(n)</tex> дополнительной памяти при любом раскладе.