NoneLcs , или самая длинная общая подпоследовательность, представляет собой проблему при поисковой оптимизации: по двум строкам найти общую подпоследовательность в заданных строках с максимальной длиной. Задача может быть решена за полиномиальное время с использованием подхода динамического программирования.

Источник: http://en.wikipedia.org/wiki/Longest_common_subsequence_problem

О

lcs или самой длинной общей подпоследовательности - это проблема при поисковой оптимизации: для заданных двух строк найти общую подпоследовательность в данных строках с максимальной длиной. Задача может быть решена за полиномиальное время с использованием подхода динамического программирования. Алгоритм решения этой проблемы является рекурсивным и дает следующую рекурсивную формулу.

Если i == 0 или j == 0, то C[i][j] = 0
   Если i,j > 0 и x i == y i,                      то C[i][j] = c[i-1,j-1]+1
   Если i,j > 0 и x i! = Y i,                       то C[i][j] = max(c[i,j-1],c[i-1,j ])


Псевдокод

 p = A.length
 q = B.length
 for i = 1 to p
     c[i,0] = 0
 for i = 1 to q
     c[0,j] = 0
 for i = 1 to p
     for j = 1 to q
          if i ==0 or j == 0
              c[i][j] = 0
          else if(A[i] == B[j] ) 
              c[i][j] = c[i-1][j-1] + 1; 
          else 
              if(c[i][j-1]>c[i-1][j])
                   c[i][j] = c[i][j-1];
              else
                   c[i][j] = c[i-1][j];
  return c

заявка

В биоинформатике сравнение двух цепей ДНК и сходство в этих цепях осуществляется с помощью этого алгоритма путем вычисления самой длинной общей подпоследовательности.


пример

  • A = ATGCGTCGAT
  • B = ATGTGACTAG

LCS

Самая длинная общая подпоследовательность состоит из 7 символов и это ATGTGAT.