Jump to content

Сортировка терпения

(Перенаправлено из сортировки «Терпение» )
Сортировка терпения
Сорт Алгоритм сортировки
Структура данных Множество
Худшая производительность О ( п журнал п )
Лучшая производительность На ) ; происходит, когда ввод предварительно отсортирован [ 1 ]
Оптимальный ?

В информатике Терпение сортировка по терпению — это алгоритм сортировки , вдохновленный и названный в честь карточной игры « » . Вариант алгоритма эффективно вычисляет длину самой длинной возрастающей подпоследовательности в заданном массиве .

Название алгоритма происходит от упрощенного варианта карточной игры в терпение. Игра начинается с перетасованной колоды карт. Карты раздаются по одной в последовательность стопок на столе в соответствии со следующими правилами. [ 2 ]

  1. Изначально свай нет. Первая сданная карта образует новую стопку, состоящую из одной карты.
  2. Каждая последующая карта помещается в крайнюю левую существующую стопку, верхняя карта которой имеет значение, большее или равное значению новой карты, или справа от всех существующих стопок, образуя таким образом новую стопку.
  3. Когда карт для раздачи больше не остается, игра заканчивается.

Эта карточная игра превращается в двухфазный алгоритм сортировки следующим образом. Учитывая массив из n элементов из некоторой полностью упорядоченной области, рассмотрим этот массив как набор карточек и смоделируем игру по сортировке терпеливых. Когда игра закончится, восстановите отсортированную последовательность, несколько раз выбирая минимально видимую карту; другими словами, выполните k -стороннее слияние стопок p , каждая из которых отсортирована внутри.

Первая фаза терпеливой сортировки, симуляция карточной игры, может быть реализована для проведения сравнений O ( n log n ) в худшем случае для входного массива из n элементов: будет не более n стопок, и по построению верхняя Карты стопок образуют возрастающую последовательность слева направо, поэтому нужную стопку можно найти методом бинарного поиска . [ 1 ] Второй этап — объединение свай — можно выполнить в время, а также с использованием приоритетной очереди . [ 1 ]

Когда входные данные содержат естественные «серии», т. е. неубывающие подмассивы, производительность может быть значительно выше. Фактически, когда входной массив уже отсортирован, все значения образуют одну стопку, и обе фазы выполняются за O ( n ) время . Сложность в среднем случае по-прежнему равна O ( n log n ) : любая равномерно случайная последовательность значений создаст ожидаемое количество сваи, [ 3 ] которые принимают время производить и объединять. [ 1 ]

примерно в десять-двадцать раз медленнее, чем современная быстрая сортировка Оценка практической эффективности терпеливой сортировки дана Чандрамули и Гольдштейном, которые показывают, что наивная версия при решении их эталонной задачи . Они связывают это с относительно небольшим количеством исследований, проведенных в области терпеливой сортировки, и разрабатывают несколько оптимизаций, которые повышают ее производительность в два раза по сравнению с быстрой сортировкой. [ 1 ]

Если значения карт находятся в диапазоне 1, . . . , n , существует эффективная реализация с время выполнения наихудшего случая для складывания карт в стопки с использованием дерева Ван Эмде Боаса . [ 3 ]

Связь с другими проблемами

[ редактировать ]

Сортировка по терпению тесно связана с карточной игрой под названием «Игра Флойда». Эта игра очень похожа на игру, нарисованную ранее: [ 2 ]

  1. Первая сданная карта образует новую стопку, состоящую из одной карты.
  2. Каждая последующая карта помещается в некоторую существующую стопку, верхняя карта которой имеет значение не меньше значения новой карты, или справа от всех существующих стопок, образуя таким образом новую стопку.
  3. Когда карт для раздачи больше не остается, игра заканчивается.

Цель игры — собрать как можно меньше стопок. Отличие от алгоритма сортировки по терпению состоит в том, что нет необходимости класть новую карту в крайнюю левую стопку, где это разрешено. Сортировка по терпению представляет собой жадную стратегию игры в эту игру.

Олдос и Диаконис предлагают определять 9 или менее стопок как выигрышный исход для n = 52 , что происходит с вероятностью примерно 5%. [ 4 ]

Алгоритм поиска самой длинной возрастающей подпоследовательности

[ редактировать ]

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

S. Bespamyatnikh and M. Segal [ 3 ] дать описание эффективной реализации алгоритма, не требующей дополнительных асимптотических затрат по сравнению с сортировкой (поскольку хранение, создание и обход обратных указателей требуют линейного времени и пространства). Далее они показывают, как сообщить обо всех самых длинных возрастающих подпоследовательностях из одних и тех же результирующих структур данных .

Сортировка по терпению была названа К. Л. Маллоузом, который приписал свое изобретение компании ASC Ross в начале 1960-х годов. [ 1 ] По мнению Олдоса и Диакониса, [ 4 ] Терпеливная сортировка была впервые признана Хаммерсли как алгоритм вычисления наибольшей возрастающей длины подпоследовательности. [ 5 ] ASC Ross и независимо Роберт В. Флойд признали его алгоритмом сортировки. Первоначальный анализ был проведен Маллоузом. [ 6 ] Игра Флойда была разработана Флойдом в переписке с Дональдом Кнутом . [ 2 ]

Использовать

[ редактировать ]

Алгоритм терпеливой сортировки может быть применен для управления процессами . В серии измерений наличие длинной возрастающей подпоследовательности можно использовать в качестве маркера тренда. Статья 2002 года в журнале SQL Server включает в себя реализацию SQL алгоритма терпеливой сортировки по длине самой длинной возрастающей подпоследовательности. [ 7 ]

  1. ^ Jump up to: а б с д и ж Чандрамули, Бадриш; Гольдштейн, Джонатан (2014). Терпение — добродетель: новый взгляд на слияние и сортировку на современных процессорах (PDF) . СИГМОД/ПОДС.
  2. ^ Jump up to: а б с Бурштейн, Александр; Ланкхэм, Исайя (2006). «Комбинаторика терпеливой сортировки стопок» (PDF) . Лотарингский семинар по комбинаторике . 54А . arXiv : math/0506358 . Бибкод : 2005math......6358B .
  3. ^ Jump up to: а б с Беспамятных Сергей; Сигал, Майкл (2000). «Перечисление самых длинных возрастающих подпоследовательностей и сортировка по терпению». Письма об обработке информации . 76 (1–2): 7–11. CiteSeerX   10.1.1.40.5912 . дои : 10.1016/s0020-0190(00)00124-1 .
  4. ^ Jump up to: а б Олдос, Дэвид ; Диаконис, Перси (1999). «Длиннейшие возрастающие подпоследовательности: от терпеливой сортировки к теореме Байка-Дейфта-Йоханссона» . Бюллетень Американского математического общества . Новая серия. 36 (4): 413–432. дои : 10.1090/s0273-0979-99-00796-x .
  5. ^ Хаммерсли, Джон (1972). Несколько саженцев исследований . Учеб. Шестой симпозиум Беркли. Математика. Статист. и Вероятность. Том. 1. Издательство Калифорнийского университета. стр. 345–394.
  6. ^ Маллоуз, CL (1973). «Сортировка по терпению». Бык. Инст. Математика. Приложение . 9 : 216–224.
  7. ^ Касс, Стив (30 апреля 2002 г.). «Статистическое управление процессами» . SQL-сервер Про . Проверено 23 апреля 2014 г.
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 3a17516332d733d549067404855f9a6a__1704265140
URL1:https://arc.ask3.ru/arc/aa/3a/6a/3a17516332d733d549067404855f9a6a.html
Заголовок, (Title) документа по адресу, URL1:
Patience sorting - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)