Самая длинная возрастающая подпоследовательность - PullRequest
31 голосов
/ 22 октября 2010

При заданной входной последовательности наилучший способ найти самую длинную (не обязательно непрерывную) неубывающую подпоследовательность.

0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15 # sequence

1, 9, 13, 15 # non-decreasing subsequence

0, 2, 6, 9, 13, 15 # longest non-deceasing subsequence (not unique)

Я ищу лучший алгоритм. Если есть код, Python будет хорошо, но все в порядке.

Ответы [ 11 ]

0 голосов
/ 22 октября 2010

Наиболее эффективным алгоритмом для этого является O (NlogN), обрисованный в общих чертах здесь .

Другой способ решить эту проблему - взять самую длинную общую подпоследовательность (LCS)исходного массива и его отсортированной версии, который занимает время O (N 2 ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...