Терпеливая сортировка — различия между версиями
(→Алгоритм) |
(→Реализация) |
||
Строка 6: | Строка 6: | ||
Длина наибольшей возрастающей подпоследовательности равна количеству стопок. Для получения наибольшей возрастающей подпоследовательности при формировании стопок проведём следующие операции: каждый раз, положив элемент на вершину стопки, будем создавать указатель на возможный предыдущий элемент (вершину ближайшей слева стопки). В конце для получения наибольшей возрастающей подпоследовательности нужно выполнить <tex>p</tex> шагов, начав с вершины самой правой стопки: на <tex>i</tex>-м шаге записать в <tex>lis[0..p-1]</tex>,где <tex>p</tex> — количество стопок, на <tex>p-i</tex>-ю позицию текущий элемент, перейти к предыдущему элементу по указателю. | Длина наибольшей возрастающей подпоследовательности равна количеству стопок. Для получения наибольшей возрастающей подпоследовательности при формировании стопок проведём следующие операции: каждый раз, положив элемент на вершину стопки, будем создавать указатель на возможный предыдущий элемент (вершину ближайшей слева стопки). В конце для получения наибольшей возрастающей подпоследовательности нужно выполнить <tex>p</tex> шагов, начав с вершины самой правой стопки: на <tex>i</tex>-м шаге записать в <tex>lis[0..p-1]</tex>,где <tex>p</tex> — количество стопок, на <tex>p-i</tex>-ю позицию текущий элемент, перейти к предыдущему элементу по указателю. | ||
− | == | + | == Псевдокод == |
− | + | List<Pile<E>> piles | |
== Пример == | == Пример == |
Версия 01:14, 7 июня 2014
Терпеливая сортировка (англ. patience sorting) - алгоритм сортировки с худшей сложностью
. Позволяет также вычислить длину наибольшей возрастающей подпоследовательности данного массива.Содержание
Алгоритм
Имеем массив
, элементы которого нужно отсортировать по возрастанию. Разложим элементы массива по стопкам: для того чтобы положить элемент в стопку, требуется выполнение условия — новый элемент меньше элемента, лежащего на вершине стопки; либо создадим новую стопку справа от уже имеющихся и сделаем её вершиной наш элемент. Используем жадную стратегию: каждый элемент кладётся в самую левую стопку из возможных, если же таковой нет, справа от существующих стопок создаётся новая. Для получения отсортированного массива выполним шагов: на -м шаге выберем из всех вершин стопок наименьшую, извлечём её и запишем в массив на -ю позицию. Длина наибольшей возрастающей подпоследовательности равна количеству стопок. Для получения наибольшей возрастающей подпоследовательности при формировании стопок проведём следующие операции: каждый раз, положив элемент на вершину стопки, будем создавать указатель на возможный предыдущий элемент (вершину ближайшей слева стопки). В конце для получения наибольшей возрастающей подпоследовательности нужно выполнить шагов, начав с вершины самой правой стопки: на -м шаге записать в ,где — количество стопок, на -ю позицию текущий элемент, перейти к предыдущему элементу по указателю.Псевдокод
List<Pile<E>> piles
Пример
тест
Ссылки
Литература
- Sergei Bespamyatnikh and Michael Segal Pacific Inst. for the Math. Sci. Preprints, PIMS-99-3., pp.7–8