Кажется, это Самая длинная общая проблема подпоследовательности в скрытом виде: При заданных S и T вы найдете самую длинную общую подпоследовательность. Это было бы X. Упущенные элементы были бы последовательностью Y, если они появляются в том же порядке в S и T, или они указывают, что такие X и Y не существуют, если они не появляются в одном и том же порядке.
В вашем примере самая длинная общая подпоследовательность - ACA
. Следовательно, X = ACA
и пропущенные элементы в S и T равны GT
, появляясь в одном и том же порядке в обоих. Следовательно, Y = GT
.
РЕДАКТИРОВАТЬ: Ваша динамическая таблица программирования c неверна. Например, в 3-й строке и 4-м столбце ячейка должна иметь две последовательности A
и G
, а не одну последовательность AG
. Цитата из Википедии:
Если они не равны, то длинная из двух последовательностей [...] сохраняется. (Если они имеют одинаковую длину, но не идентичны, то оба они сохраняются.)
Вот полная таблица (без пустых последовательностей):
| G T A C A
-------------------------------------------
A | A A A
G | G G A,G A,G A,G
C | G G A,G AC,GC AC,GC
A | G G GA AC,GA,GC ACA,GCA
T | G GT GA,GT AC,GA,GC,GT ACA,GCA
Это дает нам два решения для X, но только одно из них дает нам действительное Y:
- Если X =
ACA
, то Y = GT
на основе как S, так и T - действительное решение. - Если X =
GCA
, то Y = TA
на основе S, но AT
на основе T - так что это не решение.
Я признаю, что ответ выше не является полным решением проблемы. Из рассуждений, которые я привел в своем комментарии ниже, следует, что X или Y являются подпоследовательностями LCS. Какова подпоследовательность, которую еще нужно как-то определить.