Un algoritm evident pentru alinierea optimă

43

    Cel mai evident algoritm este de a īncerca toate alinierile posibile, şi a alege orice aliniere care are valoare maximă. Vom examina această abordare mai īn detaliu.

    Să presupunem că avem date şirurile S şi T, şi să presupunem pentru moment că |S|=|T|=n. Deasemenea, să considerăm o funcţie de scor arbitrară σ(x,y), supusă unei restricţii rezonabile σ(-,-)≤0. Cu această restricţie, nu există niciodată motiv să aliniezi o pereche de spaţii. Algoritmul evident mai detaliat arată după cum urmează:

for all i,0≤i≤n, do
  for all subsecvenţele A ale lui S cu |A|=i  do
    for all subsecvenţele B ale lui T cu |B|=i do
      Formează alinierea care identifică A[k] cu B[k], 1≤k≤i,
        şi completează toate nepotrivirile cu spaţii;
      Calculează valoarea alinierii;
      Reţine alinierea cu cea mai mare valoare;
    end;
  end;
end;
Listează alinierea obţinută.

    Acest algoritm lucrează corect, dar este un bun algoritm? Dacă aţi fi īncercat aplicarea acestui algoritm asupra unei perechi de şiruri fiecare de lungime 20 (lungime modestă după standardele biologice), poate aţi fi aflat că este mult prea lent pentru a fi practic. Programul ar rula mai mult de o oră cu astfel de date de intrare, chiar dacă calculatorul ar putea face un miliard de operaţii pe secundă.

    Analiza timpului de rulare a acestui algoritm se face īn modul următor. Un şir de lungime n are Cni subşiruri de lungime i (vom folosi īn cele ce urmează notaţia utilizată īn literatura de limbă engleză  . Astfel, există V(i-1,j) perechi de subşiruri (A,B) de aliniat. Să considerăm o astfel de pereche. Īntrucāt există n caractere īn S, numai i dintre ele vor fi aliniate cu caractere din T, vor exista atunci n-i caractere īn S care nu sunt aliniate cu caractere din T. Astfel, deoarece pentru fiecare caracter nealiniat dintr-un şir trebuie introdus un spaţiu īn celălalt şir, obţinem o lungime totală a secvenţei de caractere aliniate n+(n-i) = 2n-i. Trebuie să căutăm şi să adăugăm punctajul fiecărei perechi din aliniament (secvenţa aliniată pentru comparare), astfel īncāt numărul total de operaţii este cel puţin

(Egalitatea are o frumoasă explicaţie combinatorială care este dificil de găsit. Ultima inegalitate utilizează aproximaţia Stirling valabilă pentru n mari). Astfel, pentru S = acb, acest algoritm necesită mai mult de 22n = 240 >(103)4, adică 10 miliarde, operaţii (am folosit 210 =1024~103).

© Cornel Mironel Niculae, 2003-2008

13-Nov-2009