LIS: Самая длинная увеличивающаяся проблема подпоследовательность найти подпоследовательность заданной последовательности, в которой элементы подпоследовательности находятся в отсортированном порядке, самого низкого до самого высокогоНаибольшее увеличение подпоследовательности с O (N^2) с использованием рекурсии
Eg:
0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15
самую длинную возрастающую подпоследовательность равно 0, 2, 6, 9, 13, 15.
Я могу разработать LIS различными способами, такими как методы динамического программирования и запоминания, но с конкретным случаем, когда мне нравится реализовать LIS с использованием рекурсии со сложностью времени O(N^2)
.
С Я думаю, с помощью рекурсии мы не можем реализовать алгоритмы с временной сложностью O(N^2)
. (Пожалуйста, поправьте меня)
Однако я получил этот алгоритм от Google
Algorithm LIS(A,n,x)
1: if n = 0 then
2: return 0
3: m LIS(A; n -1; x)
4: if A[n] < x then
5: m =max(m; 1 + LIS(A; n-1;A[n]))
6: print(m)
Является ли этот алгоритм O(N^2)
?
Не могли бы вы объяснить?
Зачем вам O (N^2)? Рекурсивная адаптация O (N) может быть реализована. Просто сделайте метод возврата позиции и длины найденной последовательности. – Basilevs