2015-11-29 17 views
0

Проблема заключается в том, чтобы найти LIS (самая длинная возрастающая подпоследовательность) любого заданного массива. Пример. а [] = {10,9,7,8,9}; длина = 3; {7,8,9}Как доказать правильность следующего алгоритма

Так один из способов сделать в NlogN является

  1. Сортировка массива
  2. Возьмите ЛСК двух , причиненный в результате является LIS.

Теперь я понял, как это сделать. Но как я могу доказать, что это правильно. Как подать заявку здесь?

+0

Попробуйте от противного. Предположим, что в исходном массиве есть более продолжительная подпоследовательность, затем .... –

ответ

0

В вашем случае нет необходимости для индукции, вы должны показать три вещи:

  • полученного метод захватывает возрастающая последовательность - приходит непосредственно из того, что она является частью отсортированного массива
  • в результате подпоследовательность существует во входном массиве - поступает непосредственно из определения LCS (common подпоследовательности)
  • больше не увеличивается подпоследовательность - вы можете легко показать, что самая длинная последовательность должна присутствовать в обеих входных последовательностях (по определению) и в отсортированном массиве s o он также будет анализироваться LCS, поэтому он не может быть длиннее, чем тот, который возвращается LCS.
+0

Вы уверены, что это правильно? Из того, что я помню, проблема LIS разрешима в O (nlog (n)), а также я не думаю, что ваше решение дает правильный ответ для массива {10,9,4,5,8,6,7} - ответ {4,5,6,7}, но ваш найдет {4,5,8}, что является неправильной длиной. Вы не должны искать увеличивающийся блок, но для подпоследовательности элементов, не обязательно рядом друг с другом. См. Пример в wiki: https://en.wikipedia.org/wiki/Longest_increasing_subsequence –

+0

Это находит самую длинную растущую прослеживаемую подпоследовательность, которая довольно проста, чем поиск самой длинной растущей подпоследовательности. –

+0

@ н.м. Я согласен, что он находит самую длинную возрастающую непрерывную подпоследовательность, но это не проблема LIS. И да, это немного проще, но все-таки другой вопрос, возможно, сам вопрос должен быть заменен на LICS вместо LIS, потому что из вопроса я предполагаю, что это было намерение –