Задача о наибольшей общей палиндромной подпоследовательности — различия между версиями
Oxygen3 (обсуждение | вклад) |
Oxygen3 (обсуждение | вклад) (sta) |
||
Строка 10: | Строка 10: | ||
===Теорема 1=== | ===Теорема 1=== | ||
− | Пусть <tex>X</tex> и <tex>Y</tex> - две последовательности | + | Пусть <tex>X</tex> и <tex>Y</tex> - две последовательности длин <tex>n</tex> и <tex>m</tex> соответственно, а <tex>X_{i,j}</tex> и <tex>Y_{i,j}</tex> - две подпоследовательности последовательностей <tex>X</tex> и <tex>Y</tex> соответственно. Пусть <tex>Z = z_{1}z_{2}...z_{u}</tex> - наибольшая общая подпалиндромная последовательность двух подпоследовательностей <tex>X_{i,j}</tex> и <tex>Y_{k,l}</tex>. Тогда выполняются следующие утверждения, |
− | #Если <tex>x_i=x_j=y_k=y_l=a</tex> (для произвольного <tex>a</tex>), тогда <tex>z_1=z_u=a</tex> и <tex>z_2...z_{u-1}</tex> - наибольшая общая палиндромная подпоследовательность | + | #Если <tex>x_i=x_j=y_k=y_l=a</tex> (для произвольного <tex>a</tex>), тогда <tex>z_1=z_u=a</tex> и <tex>z_2...z_{u-1}</tex> - наибольшая общая палиндромная подпоследовательность от подпоследовательностей <tex>X_{i+1,j-1}</tex> и <tex>Y_{k+1,l-1}</tex>. |
− | #Если <tex>x_i=x_j=y_k=y_l не выполняется</tex> | + | #Если <tex>x_i=x_j=y_k=y_l</tex> не выполняется, то <tex>Z</tex> - наибольшая общая палиндромная подпоследовательность от подпоследовательностей (<tex>X_{i+1,j}</tex> и <tex>Y_{k,l}</tex>) или (<tex>X_{i,j-1}</tex> и <tex>Y_{k,l}</tex>) или (<tex>X_{i,j}</tex> и <tex>Y_{k+1,l}</tex>) или (<tex>X_{i,j}</tex> и <tex>Y_{k,l-1}</tex>). |
+ | |||
+ | На основании теоремы 1 мы напишем следующую рекурсивную формулу для длины наибольшей общей подпалиндромной подпоследовательности: | ||
+ | |||
+ | <tex> | ||
+ | lcps[i,j,k,l] = \left\{\begin{array}{llcl} | ||
+ | 0&&;&i > j\ or\ k > l\\ | ||
+ | 1&&;&(i = j)\ and\ (k = l)\ and\ (x_i=x_j=y_k=y_l)\\ | ||
+ | 2+lcps[i+1,j-1,k+1,l-1]&&;&(i < j)\ and\ (k < l)\ ans\ (x_i=x_j=y_k=y_l)\\ | ||
+ | \max{(}lcps[i+1,j,k,l],lcps[i,j-1,k,l],&&;&(i \leqslant j)\ and\ (k \leqslant l)\ and\ not(x_i=x_j=y_k=y_l)\\ | ||
+ | lcps[i,j,k+1,l],lcps[i,j,k,l-1]) | ||
+ | \end{array}\right. | ||
+ | </tex> | ||
+ | |||
+ | Где <tex>lcps[i,j,k,l]</tex> - длина наибольшей общей палиндромной подпоследовательности от <tex>X_{i,j}</tex> и <tex>Y_{k,l}</tex>. Длина наибольшей общей палиндромной подпоследовательности от последовательностей <tex>X</tex> и <tex>Y</tex> будет расположено в <tex>lcps[1,n,1,m]</tex>. Мы можем вычислить эту длину за время <tex>O(n^4)</tex> используя динамическое программирование. |
Версия 19:52, 12 декабря 2014
Задача о наибольшей общей подпоследовательности (англ. longest common subsequence (LCS)) - классическая и хорошо изученная проблема. В данной статье мы рассмотрим её модификацию, где эта последовательность также должна быть палиндромом.
Определение: |
Палиндромом (англ. palindrom) называется последовательность, которая одинаково читается как слева направо, так и справа налево. |
Наибольшая общая подпалиндромная подпоследовательность (англ. The longest common palindromic sub-sequence (LCPS)) - задача, являющаяся интересным вариантом классической задачи о поиске наибольшей общей подпоследовательности, которая находит наибольшую общую подпоследовательность среди двух последовательностей так, что она также является палиндромом.
Постановка задачи
Для последовательности
, мы обознамич его подпоследовательность как . Для двух последовательностей и , если общая подпоследовательность последовательносей и является палиндромом, то называется общей подпалиндромной подпоследовательностью (англ. common palindromicsubsequence). Общая подпалиндромная последовательность, имеющая максимальную длину, называется наибольшей общей подпалиндромной подпоследовательностью (англ. The longest common palindromic sub-sequence (LCPS)) и мы обозначим её как .Динамическое программирование
Заметим, что естественные классы подзадач для
соответствуют парам подпоследовательностей из двух входных последовательностей. Основываясь на этом наблюдении мы сформулируем следующую теорему, которая доказывает оптимальную подструктуру свойств задачи .Теорема 1
Пусть
и - две последовательности длин и соответственно, а и - две подпоследовательности последовательностей и соответственно. Пусть - наибольшая общая подпалиндромная последовательность двух подпоследовательностей и . Тогда выполняются следующие утверждения,- Если (для произвольного ), тогда и - наибольшая общая палиндромная подпоследовательность от подпоследовательностей и .
- Если не выполняется, то - наибольшая общая палиндромная подпоследовательность от подпоследовательностей ( и ) или ( и ) или ( и ) или ( и ).
На основании теоремы 1 мы напишем следующую рекурсивную формулу для длины наибольшей общей подпалиндромной подпоследовательности:
Где
- длина наибольшей общей палиндромной подпоследовательности от и . Длина наибольшей общей палиндромной подпоследовательности от последовательностей и будет расположено в . Мы можем вычислить эту длину за время используя динамическое программирование.