Задача о наибольшей общей палиндромной подпоследовательности — различия между версиями
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 мы напишем следующую рекурсивную формулу для длины наибольшей общей подпалиндромной подпоследовательности:
Где - длина наибольшей общей палиндромной подпоследовательности от и . Длина наибольшей общей палиндромной подпоследовательности от последовательностей и будет расположено в . Мы можем вычислить эту длину за время используя динамическое программирование.