Задача о наибольшей возрастающей подпоследовательности — различия между версиями
| Строка 7: | Строка 7: | ||
==== Пример алгоритма, работающего за время <tex> O(n^2) </tex> ==== | ==== Пример алгоритма, работающего за время <tex> O(n^2) </tex> ==== | ||
Строим таблицу <tex> A[1 \dots n]. Каждый её элемент <tex> A[i] </tex> - длина наибольшей возрастающей подпоследовательности, оканчивающейся точно в позиции <tex> i </tex>. Если мы построим эту таблицу, то ответ к задаче - наибольшее число из этой таблицы. | Строим таблицу <tex> A[1 \dots n]. Каждый её элемент <tex> A[i] </tex> - длина наибольшей возрастающей подпоследовательности, оканчивающейся точно в позиции <tex> i </tex>. Если мы построим эту таблицу, то ответ к задаче - наибольшее число из этой таблицы. | ||
| − | Само построение тоже элементарно: ,<tex> A[i] = max (A[j] + 1) </tex> , | + | Само построение тоже элементарно: ,<tex> A[i] = \max{i-1}_{j = 1} {(A[j] + 1)} </tex>, для которых <tex> x[j] < x[i] </tex>. База динамики <tex> A[1] = 1 </tex>. |
| − | |||
| − | <tex> | ||
Версия 09:48, 27 ноября 2010
| Определение: |
| Наибольшая возрастающая подпоследовательность (англ. Longest increasing subsequence - LIS) строки длины - это последовательность символов строки таких, что и - наибольшее из возможных. |
Задача заключается в том, чтобы отыскать это наибольшее и саму подпоследовательность. Известно несколько алгоритмов решения этой задачи.
Пример алгоритма, работающего за время
Строим таблицу - длина наибольшей возрастающей подпоследовательности, оканчивающейся точно в позиции . Если мы построим эту таблицу, то ответ к задаче - наибольшее число из этой таблицы. Само построение тоже элементарно: ,, для которых . База динамики .