Связь и интернет Архив Программирование
   
Сделать стартовойСделать закладку            
   ПОИСК  
   
Главная / Алгоритмы / Поиск в строках, массивах, последовательностях / Общие подпоследовательности. Дистанция / Задача о наибольшей общей подпоследовательности. /
8  Perl
8  PHP
8  JavaScript
8  HTML
8  DHTML
8  XML
8  CSS
8  C / C++
8  Pascal и Delphi
8  Турбо Ассемблер
8  MySQL
8  CASE-технологии
8  Алгоритмы
8  Python
8  Обратная связь
8  Гостевая книга
Новости о мире


Итерационное LCS ( Longest Common Subsequence ) - Программирование от RIN.RU
Итерационное LCS ( Longest Common Subsequence )


int lcs_length(char * A, char * B)
{
allocate storage for array L;
for (i = m; i >= 0; i--)
for (j = n; j >= 0; j--)
{
if (A[i] == '\0' || B[j] == '\0') L[i,j] = 0;
else if (A[i+1] == B[j+1]) L[i,j] = 1 + L[i+1, j+1];
else L[i,j] = max(L[i+1, j], L[i, j+1]);
}
return L[0,0];
}




Преимуществом этого метода является то, что итерация обычно быстрее рекурсии, нам не надо инициализовать матрицу -1'ми, и мы избавляемся от трех операторов if: нам не нужно проверять, были ли вычислены L[i,j], L[i+1,j] и L[i,j+1] ( очевидно, да, нет и нет ).


Недостаток - заполняется весь массив, хотя нам может быть необходима только его часть.



 8  Комментарии к статье  8 8  Обсудить в чате

 
  
  
    Copyright ©  RIN 2003 - 2004      * Обратная связь