Skip to the content.

Задача о поиске НВП

Дана последовательность $a$ из $n$ элементов. Необходимо найти в ней наибольшую по длине возрастающую подпоследовательность.

Рассмотрим пример.

Пусть $a = [1, 3, 2, 5, 4]$. Тут несколько НВП максимальной длины:

Легко увидеть, что искомой подпоследовательности длины 4 для этого массива $a$ нет.

НВП за $O(n^2)$

Воспользуемся методом динамического программирования на префиксе и решим задачу по стандартному плану:

Асимптотика получается $O(n^2)$, ведь $dp[i]$ мы пересчитываем за линейный поиск максимума.

НВП за $O(n\log{n})$

Чтобы решить задачу эффективнее, немного поменяем состояние динамики.

НОП

Даны две последовательности $a$ и $b$. Требуется узнать длину их наибольшей общей подпоследовательности.

Пусть $n$ - длина $a$, а $m$ - длина $b$.

Решим задачу методом динамического программирования: