Повторение для lcs
:
L[i,j] = max(L[i-1,j], L[i,j-1]) if a[i] != a[j]
Можете ли вы сказать мне, почему это i-1
или j-1
? Почему L[i,j] = L[i-1,j-1]
неправильно?
Повторение для lcs
:
L[i,j] = max(L[i-1,j], L[i,j-1]) if a[i] != a[j]
Можете ли вы сказать мне, почему это i-1
или j-1
? Почему L[i,j] = L[i-1,j-1]
неправильно?
Вы рассматриваете случай, когда a[i] != a[j]
означает, что буквы, которые вы сейчас сравниваете в двух последовательностях A и B, различны. Следовательно, длина самой длинной общей подпоследовательности зависит от двух вещей:
L[i-1,j]
;L[i,j-1]
.Если бы L[i-1,j-1]
было правильным, это означало бы, что текущие символы как в A, так и в B не учитываются, у них нет «шанса» быть частью подпоследовательности.
См., например, это объяснение (обратите внимание, что оно работает вперед в последовательностях вместо обратного).