В информатике задача о самой длинной возрастающей подпоследовательности направлена на поиск подпоследовательности заданной последовательности , в которой элементы подпоследовательности отсортированы в порядке возрастания и в которой подпоследовательность является максимально длинной. Эта подпоследовательность не обязательно является непрерывной или уникальной. Самые длинные возрастающие подпоследовательности изучаются в контексте различных дисциплин, связанных с математикой , включая алгоритмику , теорию случайных матриц , теорию представлений и физику . [1] [2] Задача о самой длинной возрастающей подпоследовательности разрешима за время , где обозначает длину входной последовательности. [3]
Пример
В первых 16 членах двоичной последовательности Ван дер Корпута
одна из самых длинных возрастающих подпоследовательностей — это
0, 2, 6, 9, 11, 15.
Эта подпоследовательность имеет длину шесть; входная последовательность не имеет семичленных возрастающих подпоследовательностей. Самая длинная возрастающая подпоследовательность в этом примере не является единственным решением: например,
0, 4, 6, 9, 11, 15
0, 2, 6, 9, 13, 15
0, 4, 6, 9, 13, 15
— другие возрастающие подпоследовательности равной длины в той же входной последовательности.
Связь с другими алгоритмическими проблемами
Задача о самой длинной возрастающей подпоследовательности тесно связана с задачей о самой длинной общей подпоследовательности , которая имеет решение динамического программирования с квадратичным временем : самая длинная возрастающая подпоследовательность последовательности является самой длинной общей подпоследовательностью и где — результат сортировки. Однако для особого случая, когда входные данные представляют собой перестановку целых чисел, этот подход можно сделать гораздо более эффективным, что приведет к временным ограничениям вида [4]
Наибольшая клика в графе перестановок соответствует самой длинной убывающей подпоследовательности перестановки, которая определяет граф (предполагая, что исходная непереставленная последовательность отсортирована от наименьшего значения к наибольшему). Аналогично, максимальный независимый набор в графе перестановок соответствует самой длинной неубывающей подпоследовательности. Поэтому алгоритмы самой длинной возрастающей подпоследовательности могут быть использованы для эффективного решения проблемы клики в графах перестановок. [5]
В соответствии Робинсона–Шенстеда между перестановками и таблицами Юнга длина первой строки таблицы, соответствующей перестановке, равна длине самой длинной возрастающей подпоследовательности перестановки, а длина первого столбца равна длине самой длинной убывающей подпоследовательности. [3]
Эффективные алгоритмы
Описанный ниже алгоритм эффективно решает задачу самой длинной возрастающей подпоследовательности с массивами и бинарным поиском . Он обрабатывает элементы последовательности по порядку, сохраняя самую длинную возрастающую подпоследовательность, найденную до сих пор. Обозначим значения последовательности как и т. д. Затем после обработки алгоритм сохранит целое число и значения в двух массивах:
— хранит длину самой длинной возрастающей подпоследовательности, найденной на данный момент.
— хранит индекс наименьшего значения, такого, что существует возрастающая подпоследовательность длины, заканчивающаяся на в диапазоне Явно предположим, что обозначает множество всех индексов, таких что и существует возрастающая подпоследовательность длины, заканчивающаяся на Тогда — это индекс в , для которого минимизируется; это означает, что и (или, что эквивалентно, и для каждого ); если несколько индексов удовлетворяют этому условию, то — наибольший из них.
Для ясности, «существует возрастающая подпоследовательность длины, заканчивающаяся на » означает, что существуют индексы, заканчивающиеся на такие, что
Обратите внимание, что поскольку представляет собой длину возрастающей подпоследовательности, а представляет собой индекс ее окончания.
Длина больше длины , но возможно, что не все элементы в этом массиве используются алгоритмом (фактически, если самая длинная возрастающая последовательность имеет длину , то только используются алгоритмом). Однако если используется/определено , то (и более того, при итерации также будет выполнено). не определено, поскольку последовательности длины не имеют конечного индекса ( может быть любым значением).
— сохраняет индекс предшественника в самой длинной возрастающей подпоследовательности, заканчивающейся на
Длина равна длине
Если тогда while не определено, так как не имеет предшественника ( может быть любым значением).
Поскольку приведенный ниже алгоритм использует нумерацию, начинающуюся с нуля , для ясности он дополнен символом , который остается неиспользованным, так что соответствует подпоследовательности длины Реальная реализация может пропускать и корректировать индексы соответствующим образом.
Обратите внимание, что в любой точке алгоритма последовательность
увеличивается. Ведь если есть увеличивающаяся подпоследовательность длины, заканчивающаяся на , то есть и подпоследовательность длины, заканчивающаяся на меньшем значении: а именно та, которая заканчивается на Таким образом, мы можем выполнять бинарный поиск в этой последовательности за логарифмическое время.
Алгоритм, таким образом, выглядит следующим образом:
Демонстрация кода.
P = массив длины NM = массив длины N + 1M[0] = -1 // не определено, поэтому может быть установлено любое значениеЛ = 0для i в диапазоне от 0 до N-1: //N-1 включено // Двоичный поиск наименьшего положительного l ≤ L // такой, что X[M[l]] >= X[i] ло = 1 привет = Л + 1 в то время как ло < привет: мид = ло + пол((хай-ло)/2) // ло <= мид < хи если X[M[mid]] >= X[i] привет = середина иначе : // если X[M[mid]] < X[i] ло = середина + 1 // После поиска lo == hi на 1 больше, чем // длина самого длинного префикса X[i] новыйL = ло // Предшественник X[i] — это последний индекс // подпоследовательность длины newL-1 P[i] = M[newL-1] M[newL] = i если новыйL > L: // Если мы нашли подпоследовательность длиннее любой из // пока не найдено, обновите L L = новыйL// Реконструируем самую длинную возрастающую подпоследовательность// Он состоит из значений X в индексах L:// ..., П[П[М[Л]]], П[М[Л]], М[Л]S = массив длины Lк = М[Л]для j в диапазоне от L-1 до 0: //0 включено S[j] = X[k] к = Р[к]возврат S
Поскольку алгоритм выполняет один бинарный поиск на элемент последовательности, его общее время может быть выражено с использованием нотации Big O , как Фредман (1975) обсуждает вариант этого алгоритма, который он приписывает Дональду Кнуту ; в варианте, который он изучает, алгоритм проверяет, может ли каждое значение быть использовано для расширения текущей самой длинной возрастающей последовательности, за постоянное время, перед выполнением бинарного поиска. С этой модификацией алгоритм использует максимум сравнений в худшем случае, что является оптимальным для алгоритма, основанного на сравнении, вплоть до постоянного множителя в термине . [6]
Пример запуска
С использованиемX = [2, 8, 9, 5, 6, 7, 1]
Значения, хранящиеся в переменных
X[i]
newL
P
M
X[M]
L
Перед for iциклом
P = []
M = [-1]
X[M] = [N/A]
L = 0
В конце циклаi = 0
X[i] = 2
newL = 1
P = [-1]
M = [-1, 0]
X[M] = [N/A, 2]
L = 1
В конце циклаi = 1
X[i] = 8
newL = 2
P = [-1, 0]
M = [-1, 0, 1]
X[M] = [N/A, 2, 8]
L = 2
В конце циклаi = 2
X[i] = 9
newL = 3
P = [-1, 0, 1]
M = [-1, 0, 1, 2]
X[M] = [N/A, 2, 8, 9]
L = 3
В конце циклаi = 3
X[i] = 5
newL = 2
P = [-1, 0, 1, 0]
M = [-1, 0, 3, 2]
X[M] = [N/A, 2, 5, 9]
L = 3
В конце циклаi = 4
X[i] = 6
newL = 3
P = [-1, 0, 1, 0, 3]
M = [-1, 0, 3, 4]
X[M] = [N/A, 2, 5, 6]
L = 3
В конце циклаi = 5
X[i] = 7
newL = 4
P = [-1, 0, 1, 0, 3, 4]
M = [-1, 0, 3, 4, 5]
X[M] = [N/A, 2, 5, 6, 7]
L = 4
В конце циклаi = 6
X[i] = 1
newL = 1
P = [-1, 0, 1, 0, 3, 4, -1]
M = [-1, 6, 3, 4, 5]
X[M] = [N/A, 1, 5, 6, 7]
L = 4
Значения, хранящиеся в переменных
S
k
X[k]
Перед for jциклом
S = [N/A, N/A, N/A, N/A]
k = M[4] = 5
X[5] = 7
В конце циклаj = 3
S = [N/A, N/A, N/A, 7]
k = P[5] = 4
X[4] = 6
В конце циклаj = 2
S = [N/A, N/A, 6, 7]
k = P[4] = 3
X[3] = 5
В конце циклаj = 1
S = [N/A, 5, 6, 7]
k = P[3] = 0
X[0] = 2
В конце циклаj = 0
S = [2, 5, 6, 7]
k = P[0] = -1
X[-1] = N/A
Границы длины
Согласно теореме Эрдеша–Секереша , любая последовательность различных целых чисел имеет возрастающую или убывающую подпоследовательность длины [7] [8] Для входных данных, в которых каждая перестановка входных данных равновероятна, ожидаемая длина самой длинной возрастающей подпоследовательности приблизительно равна [9] [2]
Самая длинная возрастающая подпоследовательность также изучалась в условиях онлайн-алгоритмов , в которых элементы последовательности независимых случайных величин с непрерывным распределением — или, альтернативно, элементы случайной перестановки — по одному представляются алгоритму, который должен решить, включать или исключать каждый элемент, без знания более поздних элементов. В этом варианте задачи, который допускает интересные приложения в нескольких контекстах, можно разработать оптимальную процедуру выбора, которая, учитывая случайную выборку размера в качестве входных данных, будет генерировать возрастающую последовательность с максимальной ожидаемой длиной размера приблизительно [11]
Длина возрастающей подпоследовательности, выбранной этой оптимальной процедурой, имеет дисперсию приблизительно равную , а ее предельное распределение является асимптотически нормальным после обычного центрирования и масштабирования. [12]
Те же асимптотические результаты справедливы с более точными границами для соответствующей задачи в условиях пуассоновского процесса прибытия. [13]
Дальнейшее уточнение в установке процесса Пуассона дается посредством доказательства центральной предельной теоремы для оптимального процесса выбора, которая выполняется, с подходящей нормализацией, в более полном смысле, чем можно было бы ожидать. Доказательство дает не только «правильную» функциональную предельную теорему, но и (сингулярную) ковариационную матрицу трехмерного процесса, суммирующую все взаимодействующие процессы. [14]
Смотрите также
Анатолий Вершик – русский математик (1933–2024), который изучал приложения теории групп к длиннейшим возрастающим подпоследовательностям в случайных перестановках. [15]
Сортировка терпения – Алгоритм сортировки – эффективный метод нахождения длины самой длинной возрастающей подпоследовательности.
Пластический моноид – моноид положительных целых чисел по модулю эквивалентности Кнута Страницы, отображающие описания викиданных в качестве резерва– алгебраическая система, определяемая преобразованиями, которые сохраняют длину самой длинной возрастающей подпоследовательности.
Ссылки
^ Олдос, Дэвид ; Диаконис, Перси (1999), «Самые длинные возрастающие подпоследовательности: от терпеливой сортировки до теоремы Байка–Дейфта–Йоханссона», Бюллетень Американского математического общества , 36 (4): 413– 432, doi : 10.1090/S0273-0979-99-00796-X.
^ ab Romik, Dan (2015). Удивительная математика длиннейших возрастающих подпоследовательностей . doi :10.1017/CBO9781139872003. ISBN9781107075832.
^ Хант, Дж.; Шимански, Т. (1977), «Быстрый алгоритм вычисления самых длинных общих подпоследовательностей», Communications of the ACM , 20 (5): 350–353 , doi : 10.1145/359581.359603 , S2CID 3226080.
^ Golumbic, MC (1980), Алгоритмическая теория графов и совершенные графы , Computer Science and Applied Mathematics, Academic Press, стр. 159.
^ Фредман, Майкл Л. (1975), «О вычислении длины самых длинных возрастающих подпоследовательностей», Дискретная математика , 11 (1): 29– 35, doi : 10.1016/0012-365X(75)90103-X.
^ Эрдеш, Пол ; Секерес, Джордж (1935), «Комбинаторная задача геометрии», Compositio Mathematica , 2 : 463–470 ..
^ Стил, Дж. Майкл (1995), «Вариации на тему монотонной подпоследовательности Эрдёша и Секереша», в Aldous, David ; Diaconis, Persi ; Spencer, Joel ; et al. (ред.), Discrete Probability and Algorithms (PDF) , IMA Volumes in Mathematics and its Applications, т. 72, Springer-Verlag, стр. 111–131.
^ Вершик, AM ; Керов, CV (1977), "Асимптотика планхерной меры симметрической группы и предельная форма для таблиц Юнга", Докл. АН СССР , 233 : 1024– 1027.
^ Байк, Джинхо; Дейфт, Перси; Йоханссон, Курт (1999), «О распределении длины самой длинной возрастающей подпоследовательности случайных перестановок», Журнал Американского математического общества , 12 (4): 1119– 1178, arXiv : math/9810105 , doi : 10.1090/S0894-0347-99-00307-0.
^ Сэмюэлс, Стивен М.; Стил, Дж. Майкл (1981), «Оптимальный последовательный выбор монотонной последовательности из случайной выборки» (PDF) , Annals of Probability , 9 (6): 937–947 , doi : 10.1214/aop/1176994265 , архивировано (PDF) из оригинала 30 июля 2018 г.
^ Арлотто, Алессандро; Нгуен, Винь В.; Стил, Дж. Майкл (2015), «Оптимальный онлайн-выбор монотонной подпоследовательности: центральная предельная теорема», Стохастические процессы и их приложения , 125 (9): 3596–3622 , arXiv : 1408.6750 , doi : 10.1016/j.spa.2015.03.009, S2CID 15900488
^ Брусс, Ф. Томас ; Дельбаен, Фредди (2001), «Оптимальные правила последовательного выбора монотонных подпоследовательностей максимальной ожидаемой длины», Стохастические процессы и их приложения , 96 (2): 313–342 , doi : 10.1016/S0304-4149(01)00122-3.
^ Брусс, Ф. Томас ; Дельбаен, Фредди (2004), «Центральная предельная теорема для оптимального процесса выбора монотонных подпоследовательностей максимальной ожидаемой длины», Стохастические процессы и их приложения , 114 (2): 287–311 , doi : 10.1016/j.spa.2004.09.002.
^ Ромик, Дэн (2015). Удивительная математика длиннейших возрастающих подпоследовательностей . Учебники Института математической статистики. Нью-Йорк: Cambridge University Press. ISBN978-1-107-42882-9.
Внешние ссылки
Самая длинная возрастающая подпоследовательность алгоритмиста