Как решить LCS(Longest Common Subsequence) с условием пропуска
Я знаю общую проблему LCS и алгоритм.
Это вот так:
LCS(Xi, Yj) = [0 (i = 0 or j = 0)
or LCS(Xi-1, Yj-1) + 1 (xi = yj)
or max(LCS(Xi, Yj-1), LCS(Xi-1, Yj)) (xi != yj)]
Но что, если мы добавим условие разрыва?
Например:
String A is cttauaucagu
String B is cautauatcgu
if no gap condition
lcs = cauauagu
if gap = 1 (lcs gap is under 1)
lcs = auaua
if gap = 0 (lcs gap is under 0)
lcs = taua
Визуальное представление:
Как мне это решить?
Как мне составить таблицу DP?
1 ответ
Решение
Решение в этом случае не сильно отличается. Вам нужно будет добавить еще 2 параметра в dp - индекс последнего элемента, включенного в общую подпоследовательность из обеих строк. Затем на каждом шаге dp ищите только одинаковые элементы между the_last_included_element в данной строке и the_last_included_elemement + gap + 1.