2015-09-24 3 views
2

Эта проблема может быть решена путем создания BST из заданного массива целых чисел. Вставка в BST принимает O (logn). Таким образом, n вставок будет принимать O (nlogn). И тогда самая длинная подпоследовательность может быть получена путем перемещения только самых правых детей, начиная с корня. Это может привести к максимальному O9n). Таким образом, общая временная сложность будет O (nlogn). Правильно ли это?Алгоритм определения наибольшей возрастающей подпоследовательности?

+1

Не забыли ли вы первоначальный порядок элементов в процессе? Как это будет даже отдаленно корректно? –

+0

@NiklasB Если вы не перебалансируете дерево, его структура будет отражать исходный порядок ввода. Но я не уверен, достаточно ли этого, чтобы решить проблему. И это, конечно, не было бы O (n log n). –

+1

Хуан, он не будет отражать порядок ввода! См. Мой ответ для контрпримера. –

ответ

4

Нет, этот подход неверен. Рассмотрим это дерево:

10 
    2 11 
1 3 
    4 

Очевидно, что самый длинный увеличение подпоследовательности здесь 2,3,4 но ваш алгоритм даст 10,11, который короче.

В то же время невозможно объяснить, как было построено мое дерево. Обе эти последовательности дадут одно и то же дерево:

10,2,1,3,4,11 
10,11,2,1,3,4 

Эти два варианта имеют разные длинные возрастающие подпоследовательности!

Смежные вопросы