Задача о наибольшей общей палиндромной подпоследовательности — различия между версиями
Oxygen3 (обсуждение | вклад) (sta) |
Oxygen3 (обсуждение | вклад) |
||
| Строка 4: | Строка 4: | ||
==Постановка задачи== | ==Постановка задачи== | ||
| − | Для последовательности <tex>X</tex>, мы обознамич его подпоследовательность <tex>x_{i}...x_{j} (1 \leqslant i \leqslant j \leqslant n)</tex> как <tex>X_{i,j}</tex>. Для двух последовательностей <tex>X</tex> и <tex>Y</tex>, если общая подпоследовательность <tex>Z</tex> последовательносей <tex>X</tex> и <tex>Y</tex> является палиндромом, то <tex>Z</tex> называется '''общей подпалиндромной подпоследовательностью''' (англ. ''common | + | Для последовательности <tex>X</tex>, мы обознамич его подпоследовательность <tex>x_{i}...x_{j} (1 \leqslant i \leqslant j \leqslant n)</tex> как <tex>X_{i,j}</tex>. Для двух последовательностей <tex>X</tex> и <tex>Y</tex>, если общая подпоследовательность <tex>Z</tex> последовательносей <tex>X</tex> и <tex>Y</tex> является палиндромом, то <tex>Z</tex> называется '''общей подпалиндромной подпоследовательностью''' (англ. ''common palindromic subsequence''). Общая подпалиндромная последовательность, имеющая максимальную длину, называется '''наибольшей общей подпалиндромной подпоследовательностью''' (англ. ''The longest common palindromic subsequence (LCPS)'') и мы обозначим её как <tex>LCPS(X,Y)</tex>. |
==Динамическое программирование== | ==Динамическое программирование== | ||
Версия 20:21, 12 декабря 2014
Задача о наибольшей общей подпоследовательности (англ. longest common subsequence (LCS)) - классическая и хорошо изученная проблема. В данной статье мы рассмотрим её модификацию, где эта последовательность также должна быть палиндромом.
| Определение: |
| Палиндромом (англ. palindrom) называется последовательность, которая одинаково читается как слева направо, так и справа налево. |
Наибольшая общая подпалиндромная подпоследовательность (англ. The longest common palindromic sub-sequence (LCPS)) - задача, являющаяся интересным вариантом классической задачи о поиске наибольшей общей подпоследовательности, которая находит наибольшую общую подпоследовательность среди двух последовательностей так, что она также является палиндромом.
Постановка задачи
Для последовательности , мы обознамич его подпоследовательность как . Для двух последовательностей и , если общая подпоследовательность последовательносей и является палиндромом, то называется общей подпалиндромной подпоследовательностью (англ. common palindromic subsequence). Общая подпалиндромная последовательность, имеющая максимальную длину, называется наибольшей общей подпалиндромной подпоследовательностью (англ. The longest common palindromic subsequence (LCPS)) и мы обозначим её как .
Динамическое программирование
Заметим, что естественные классы подзадач для соответствуют парам подпоследовательностей из двух входных последовательностей. Основываясь на этом наблюдении мы сформулируем следующую теорему, которая доказывает оптимальную подструктуру свойств задачи .
Теорема 1
Пусть и - две последовательности длин и соответственно, а и - две подпоследовательности последовательностей и соответственно. Пусть - наибольшая общая подпалиндромная последовательность двух подпоследовательностей и . Тогда выполняются следующие утверждения,
- Если (для произвольного ), тогда и - наибольшая общая палиндромная подпоследовательность от подпоследовательностей и .
- Если не выполняется, то - наибольшая общая палиндромная подпоследовательность от подпоследовательностей ( и ) или ( и ) или ( и ) или ( и ).
На основании теоремы 1 мы напишем следующую рекурсивную формулу для длины наибольшей общей подпалиндромной подпоследовательности:
Где - длина наибольшей общей палиндромной подпоследовательности от и . Длина наибольшей общей палиндромной подпоследовательности от последовательностей и будет расположено в . Мы можем вычислить эту длину за время используя динамическое программирование.