Есть ли ошибка в описании Гасфилдом алгоритма динамического программирования для поиска глобальных выравниваний с постоянным штрафом за пробел?

Гасфилд (Алгоритмы для строк, деревьев и последовательностей, раздел 11.8.6) описывает алгоритм динамического программирования для нахождения наилучшего выравнивания между двумя последовательностями A и B в предположении, что штраф, назначенный пропуску длины x в одной из выровненных последовательностей последовательности имеют вид R+Sx для констант R и S. В особом случае, когда S=0, существует штраф за начало пробела, но не штраф за его удлинение. Мне кажется, что в формулах Гасфилда есть ошибка, и я надеюсь, что кто-нибудь поможет мне понять истинное положение дел.

Гасфилд определяет четыре функции V(i,j), G(i,j), E(i,j) и F(i,j) со следующими свойствами:

  • V(i,j) — это наилучшая возможная оценка для выравнивания префиксов A[1..i] и B[1..j].
  • E(i,j) — это наилучшая возможная оценка для выравнивания этих префиксов при условии, что B[j] соответствует пробелу в A.
  • F(i,j) — это наилучшая возможная оценка для выравнивания этих префиксов при условии, что A[i] совмещен с пробелом в B.
  • G(i,j) — это наилучшая возможная оценка для выравниваний, которые соединяют A[i] с B[j].

Повторения для i и j больше или равны 1:

V(i,j)=max[E(i,j),F(i,j),G(i,j)]
G(i,j)=V(i,j)+w(A[i],B[j]) where w is the score for a match/mismatch.
E(i,j)=max(E(i,j-1),V(i,j-1)-R]
F(i,j)=max(F(i-1,j),V(i-1,j)-R]

Наконец, граничные условия задаются как:

V(i,0)=E(i,0)=-R
V(0,j)=F(0,j)=-R

При всем при этом в качестве предварительных рассмотрим ситуацию, когда у нас есть две последовательности длины один каждая, так что A=p и B=q. В этой ситуации есть только три возможных расклада:

p    p-    -p
q    -q    q-

Они имеют баллы соответственно w(p,q), -2R, -2R. В частности, мы должны иметь E(0,1)=F(1,0)=-2R. Однако повторения показывают, что E(0,1) и F(1,0) больше или равны -R.

Эта ошибка в граничных условиях имеет последствия. Предположим, например, что A=pppppp...p и B=qqqq...q с разными p и q. Выравнивание, которое полностью отличает A от B:

A-
-B

должно оцениваться как -2R (у него два пробела), и поэтому это выравнивание в конечном итоге является оптимальным при условии, что w (p, q) ‹ 0.

Алгоритм Гасфилда, похоже, неправильно обрабатывает этот случай.

В практических ситуациях это, вероятно, не имеет значения, потому что типичные строки имеют много совпадений, поэтому граничные случаи не влияют на решение.

Комментарии/критика приветствуются.


person Jeremy Teitelbaum    schedule 22.06.2014    source источник


Ответы (1)


Да, два уравнения на самом деле неверны. Они должны быть

F(i,j)=max(F(i,j-1),V(i,j-1)-R] E(i,j)=max(E(i-1,j),V(i-1,j)-R]

Поскольку E(i,j) является наилучшей возможной оценкой для выравнивания этих префиксов при условии, что A[i] сопоставлен с пробелом в B, выравнивание производится на основе оптимального выравнивания A[1:i-l] с B [1:j] и пробел длиной l (вставки напротив A[i-l+1:i]).

person Gianluca Della Vedova    schedule 23.06.2014
comment
Я согласен. Однако, насколько я понимаю, показанное вами выравнивание должно быть оценено как -2R, и поэтому E (1,1) должно быть -2R. Но повторение дает E(1,1)=-R. Я думаю, что 1-й столбец и строка, а также нулевой столбец и строка должны быть установлены как часть инициализации повторения. - person Jeremy Teitelbaum; 23.06.2014
comment
Теперь я понял вашу мысль. Я отредактировал ответ, показав ошибку в формулах. - person Gianluca Della Vedova; 25.06.2014
comment
Во всяком случае, книга Гасфилда дает другое определение E() --- разрыв находится в A. В этом случае вы должны поменять местами индексы в граничных условиях E(i,0), F(0,i) - person Gianluca Della Vedova; 25.06.2014
comment
Как вы указываете, я немного неправильно изложил алгоритм Гасфилда; текст, определяющий E и F, был заменен местами, но повторения были правильными. Я отредактировал вопрос, чтобы исправить эту проблему, так что теперь мой текст полностью соответствует Гасфилду. - person Jeremy Teitelbaum; 25.06.2014
comment
С вашим новым определением E() и F() повторения в моем ответе теперь верны. - person Gianluca Della Vedova; 26.06.2014
comment
Скажем по-другому. Переформулируйте граничные условия следующим образом: V(i,0)=E(i,0)=E(i-1,0), если i›1, V(0,j)=F(0,j)=F(0,j-1)`, если j›1, V(1,0)=E(1,0)=V(0,1)=E(0,1)=-R, V(0,0)=0. Обратите внимание, что все уравнения E() для E (граничная и фактическая повторяемость) выражаются как функция E(i-1,.), тогда как раньше граничная и фактическая повторяемость не согласовывались друг с другом. - person Gianluca Della Vedova; 26.06.2014