12.07.2015 Views

Bioinformatikai algoritmusok

Bioinformatikai algoritmusok

Bioinformatikai algoritmusok

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

13.1. Algoritmusok szekvenciákon £ritmusa, amelyet lineáris résbüntetés és távolság alapú illesztés esetére mutatunk be.Az algoritmus bemutatásához bevezetjük egy szekvencia tetszőleges szuffixének a jelölését,A k jelöli az A szekvencia a k+1 -gyel kezdődő szuffixét, azaz a (k + 1)-edik karaktertőla szekvencia végéig terjedő stringet.Hirschberg algoritmusa először A [|A|/2] -re és B-re hajt végre egy dinamikus programozásialgoritmust, a fentebb vázolt lineáris memóriaigénnyel (azaz mindig csak az aktuális ésaz előző sor értékeit tárolja), valamint egy hasonló dinamikus programozási algoritmust azA [|A|/2] megfordítottján és a B szekvencia megfordítottján.A két dinamikus programozás alapján tudjuk, hogy mi A [|A|/2] és B tetszőleges prefixeoptimális illesztésének az értéke, valamint A [|A|/2] és B tetszőleges szuffix optimális illesztésénekaz értéke. Ebből már meg tudjuk mondani, hogy mi lesz A és B optimális illesztésénekaz értéke,{min w(α ∗ (A [|A|/2] , B j )) + w(α ∗ (A [|A|/2] , B j )) } , (13.31)jés a számolásból adódik, hogy az optimális illesztésben A [|A|/2] B j azon prefixével van illesztve,melyrew(α ∗ (A [|A|/2] , B j )) + w(α ∗ (A [|A|/2] , B j )) (13.32)minimális.Mivel a lineáris memóriaigényű dinamikus programozásban is ismerjük a dinamikusprogramozási táblázat utolsó előtti sorát, meg tudjuk mondani, hogy a [|A|/2] és a [|A|/2]+1 illesztvevan-e B szekvencia valamely karakterével, vagy az optimális illesztésben ezen karakterektörlődtek. Az is megállapítható a dinamikus programozási táblázat utolsó két-kétsorából, hogy történt-e a B szekvencia valamely karaktereinek a beszúrása a [|A|/2] és a [|A|/2]+1közé.Így az optimális illesztésnek legalább két oszlopát határoztuk meg. Ezután A [|A|/2]−1 -reés B fennmaradó prefixére valamint A [|A|/2]+1 -re és B fennmaradó szuffixére ugyanígy járunkel, azaz mindkét szekvenciapárra két lineáris memóriaigényű dinamikus programozást végzünkel. Ennek eredményeképpen az A szekvencia negyedénél és háromnegyedénél kapunkmeg az optimális illesztésből minimum két-két oszlopot. A következő iterációban a negyedeltszekvenciákra végezzük el a fenti eljárást, és ezt folytatjuk addig, amíg az optimálisillesztés összes oszlopát meg nem kapjuk.Nyilvánvaló, hogy a memóriaigény a szekvenciák hosszával csak lineárisan nő. Megmutatjuk,hogy a számolási igény továbbra is Θ(nm), ahol n és m a két szekvencia hossza.Ez abból adódik, hogy minden egyes iterációban legfeljebb feleannyit számolunk, mint azelőző iterációban. Ugyanis egy A és B szekvenciapárra egy lépésben |A| × |B| mennyiségetszámolunk, a következő lépésben viszont csak (|A|/2) × j ∗ + (|A|/2) × (|B| − j ∗ ) mennyiséget,ahol j ∗ az a pozíció, melyre a (13.31) képletben minimális értéket kapunk. Így a teljesszámolási igénynm ×(1 + 1 2 + 1 )4 + · · · = Θ(nm) . (13.33)D;EFGDF¡ ?F¥¤P@j ¢?dfV X1dfP§¦ ¦CQT2V¡¢ M`X?d ]?Q ^ PURZbabZ"M`M X1^A dinamikus programozási algoritmus egyre hosszabb és hosszabb részszekvenciák illesztéséveljut el a teljes szekvenciák illesztéséig. Ez az algoritmus gyorsabbá tehető, ha sikerülkiszűrni a részszekvenciák olyan rossz illesztéseit, amelyek biztosan nem vezetnek a teljes

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!