Diplomová práce
Transkript
Diplomová práce
eské vysoké u£ení technické v Praze Fakulta elektrotechnická Katedra po£íta£· Diplomová práce Efektivní indexování DNA Martin Kopta Vedoucí práce: Doc. Ing. Holub Jan, Ph.D. Studijní program: Elektrotechnika a informatika, strukturovaný, Magisterský Obor: Výpo£etní technika 10. kv¥tna 2011 Prohlá²ení Prohla²uji, ºe jsem práci vypracoval samostatn¥ a pouºil jsem pouze podklady uvedené v p°iloºeném seznamu. Nemám závaºný d·vod proti uºití tohoto ²kolního díla ve smyslu 60 Zákona £. 121/2000 Sb., o právu autorském, o právech souvisejících s právem autorským a o zm¥n¥ n¥kterých zákon· (autorský zákon). V Praze dne 10. kv¥tna 2011 ............................................................. Abstrakt Nar·stající moºnosti £tení genomických sekvencí ºivých organism· dávají vzniku mnoºství biologických dat, která jsou subjektem intenzivního zkoumání. Aby bylo moºné s t¥mito daty pracovat, je zde p°irozená pot°eba efektivního p°ístupu. Tato práce p°edkládá stru£ný a srozumitelný p°ehled genetiky a stringologie a unikátní ucelený p°ehled °e²ení problému efektivního indexování DNA s d·razem na praktické poznatky. Problematika je probrána postupn¥, od naivních °e²ení aº po aktuální v¥decké výzkumy. Práce je ur£ena mimo jiné za£áte£ník·m v oboru genetiky, stringologie £i bioinformatiky. Sou£ástí práce je praktická a exibilní softwarová knihovna obsahující vybrané techniky a také jejich experimentální zkoumání a porovnání. Abstract Rising possibilities in reading genomic sequences of living organisms cause accumulation of amount of biologic data, which are a subject of intensive research. There is natural need for an ecient approach in order to examine those data. This work presents a brief and simple introduction into genetics and stringology and unique comprehensive overview of ecient DNA indexing with emphasis on practical ndings. Problems are examined stepwise, from naive solutions to recent scientic research. This work is intented for beginners in the eld of genetics, stringology and bioinformatics. The work includes a practical and exible software library containing selected techniques and also their experimental evaluation and comparsion. Obsah 1 Úvod 1 2 Problematika 3 2.1 Pojmy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2.2 Historie, sou£asnost a budoucnost genetiky . . . . . . . . . . . . . . . . . . 6 2.3 Uºití genetiky . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 2.4 Operace s DNA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 3 Vyhledávání v textu a indexování 3.1 11 Pojmy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 3.1.1 Symbol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 3.1.2 Abeceda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 3.1.3 et¥zec . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 3.1.3.1 Prex, sux a faktor . . . . . . . . . . . . . . . . . . . . . 12 3.1.3.2 Operace s °et¥zci . . . . . . . . . . . . . . . . . . . . . . . 12 3.1.4 Formální jazyk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 3.1.5 Automat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 3.1.5.1 Kone£ný deterministický automat . . . . . . . . . . . . . 13 3.1.5.2 Kone£ný nedeterministický automat . . . . . . . . . . . . 13 3.2 Co je to vyhledávání v textu . . . . . . . . . . . . . . . . . . . . . . . . . . 14 3.3 Základní p°ístupy vyhledávání v textu . . . . . . . . . . . . . . . . . . . . 14 . . . . . . . . . . . . . . . . . . . . . . . . . . 15 3.3.1 Triviální algoritmus 3.3.1.1 3.3.2 3.4 . . . . . . . . . . . . . . . 15 . . . . . . . . . . . . . . . 16 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 Pokro£ilé algoritmy vyhledávání v textu Indexování textu 3.4.1 3.5 Sloºitost triviálního algoritmu Struktury pro indexování . . . . . . . . . . . . . . . . . . . . . . . 17 . . . . . . . . . . . . . . . . . . . . . . . . . . 18 . . . . . . . . . . . . . . . . . . . . . . . . . 19 3.4.1.1 Sux Tree 3.4.1.2 Sux Array 3.4.1.3 Suxový automat Porovnání indexovacích struktur . . . . . . . . . . . . . . . . . . . . . . 20 . . . . . . . . . . . . . . . . . . . . . . . 20 7 4 Efektivní indexování DNA 4.1 4.2 4.3 4.4 23 Pam¥´ové nároky naivní implementace . . . . . . . . . . . . . . . . . . . . 23 4.1.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 Sux stromy na disku a °e²ení I/O . . . . . . . . . . . . . . . . . . . . . . 25 4.2.1 TDD, 2004 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 4.2.2 dmsux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 4.2.3 STTD64, 2007 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 4.2.4 TRELLIS, 2007 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 4.2.5 DiGeST, 2008 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 4.2.6 B ST, 2009 4.2.7 String B-tree Shrnutí 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 e²ení pam¥´ové náro£nosti indexovacích struktur . . . . . . . . . . . . . . 29 4.3.1 Compressed sux array . . . . . . . . . . . . . . . . . . . . . . . . 30 4.3.2 FM-index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 4.3.3 Kompromis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 Efektivní indexování DNA . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 5 Knihovna 5.1 33 Vybrané algoritmy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 Vlastnosti vybraných algoritm· . . . . . . . . . . . . . . . . . . . . 33 5.2 Struktura knihovny . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 5.3 Implementace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 5.3.1 Úpravy originálních implementací . . . . . . . . . . . . . . . . . . . 35 5.3.2 Testování knihovny . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 5.3.3 Náhodný generátor sekvencí . . . . . . . . . . . . . . . . . . . . . . 36 5.3.4 Roz²i°itelnost . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 5.1.1 5.4 Vstupní formát . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 Experimenty 37 39 6.1 Pouºitá data, platforma a zp·sob m¥°ení . . . . . . . . . . . . . . . . . . . 39 6.2 M¥°ení TRELLIS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 6.3 M¥°ení DiGeST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 6.4 M¥°ení 6.5 Porovnání a diskuze B 2 ST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 42 7 Shrnutí 47 A Uºivatelská p°íru£ka 49 A.1 Kompilace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 A.2 Pouºití . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 A.3 Licence 50 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B Obsah p°iloºeného média 53 Seznam obrázk· 2.1 Chemická struktura DNA ([48], p59) . . . . . . . . . . . . . . . . . . . . . 4 2.2 Model DNA podle Watsona a Cricka ([48], p60) . . . . . . . . . . . . . . . 7 3.1 DFA p°ijímající jazyk {abcd, abCd, aBcd, aBCd} 3.2 DFA p°ijímající jazyk 3.3 DFA p°ijímající jazyk . . . . . . . . . . . . . . 13 {(ab)∗ } . . . . . . . . . . . . . . . . . . . . . . . . . 14 {(ab)∗ } . . . . . . . . . . . . . . . . . . . . . . . . . 14 3.4 Schéma indexování a vyhledávání . . . . . . . . . . . . . . . . . . . . . . . 17 3.5 Sux tree pro 4.1 Doba výkonu TDD a Ukkonen a zobrazení cache-misses 5.1 Diagram komponent knihovny 5.2 Ukázka FASTA formátu 6.1 Porovnání doby indexace vstup· men²ích neº 1 Mbp . . . . . . . . . . . . 43 6.2 Porovnání doby indexace vstup· v¥t²ích neº 1 Mbp . . . . . . . . . . . . . 43 6.3 Porovnání doby maximální propustnosti algoritm· . . . . . . . . . . . . . 44 6.4 Porovnání velikosti indexu vstup· men²ích neº 1Mbp . . . . . . . . . . . . 44 6.5 Porovnání velikosti indexu vstup· v¥t²ích neº 1Mbp . . . . . . . . . . . . 45 6.6 Porovnání velikosti indexu a do£asných soubor· vstup· men²ích neº 1Mbp 45 6.7 Porovnání velikosti indexu a do£asných soubor· vstup· v¥t²ích neº 1Mbp 46 T = tgctac . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 . . . . . . . . . . 26 . . . . . . . . . . . . . . . . . . . . 34 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 libednai 11 Seznam tabulek T = tgctac 3.1 Sux array pro . . . . . . . . . . . . . . . . . . . . . . . . . . 5.1 Kódy nukleotických bází dle IUPAC 6.1 P°ehled pouºitých dat 19 . . . . . . . . . . . . . . . . . . . . . 37 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 6.2 Zdroje pouºitých dat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 6.3 Výsledky m¥°ení TRELLIS . . . . . . . . . . . . . . . . . . . . . . . . . . 41 6.4 Výsledky m¥°ení DiGeST . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 6.5 Výsledky m¥°ení . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 B 2 ST 13 Kapitola 1 Úvod Od konce devatenáctého století se £ást pozornosti v¥dy p°esunula sm¥rem k d¥di£né informaci ºivých organism·. Vznikly disciplíny jako genetika, molekulární biologie £i bioinformatika a poda°ilo se dekódovat genetický kód, rozlu²tit strukturu DNA a také objevit vztah mezi DNA, RNA a bílkovinami [50]. Brzy p°i²lo na °adu £tení genom· procesem sekvenování a jejich analýza, prohledávání, porovnávání a dekódování. Porozum¥ní ºivotu na chemické úrovni dalo moºnost genetickým inºenýr·m m¥nit organismy podle pot°eby a genetika se stala jedním ze symbol· moderní doby. Intenzivní výzkum na poli genetiky sebou p°inesl a stále p°iná²í obrovské mnoºství biologických dat [54], pro které bioinformatika vytvo°ila zp·sob jejich uloºení, t°ízení, prohledávání a dal²ího zpracování. Experimentální výzkum genomických sekvencí a dal²ích biologických dat v²ak vyºaduje velmi efektivní schopnosti práce s daty z d·vodu komplexní analýzy [53] a tak je neustále kladen tlak na bioinformatiku, informatiku a stringologii ve snaze mít moºnost pracovat s v¥t²ím mnoºstvím dat v krat²ím £ase a s niº²ími pam¥´ovými nároky. Stringologie jiº dlouho hledá zp·soby jak efektivn¥ zpracovávat text. Bylo popsáno mnoho zajímavých algoritm· [35, 36, 5, 28], datových struktur [49, 29, 11, 12, 16, 23] a technik [46, 44, 33]. Na základ¥ poznatk· stringologie staví moderní výzkum p°i hledání technik prolovaných konkrétn¥ na zpracování DNA sekvencí. Aktuální zp·sob zpracování DNA je indexování do funk£ních datových struktur, které vychází z klasických struktur denovaných informatikou. Teoretický výzkum indexování je v²ak siln¥ ovlivn¥n praktickou poptávkou a reálnými moºnostmi zpracování na dostupných platformách [45]. Tato práce p°edkládá lehký p°ehled základ· genetiky a stringologie se zam¥°ením na zpracování DNA. Cílem práce je dát dohromady techniky indexování textu, p°i£emº d·raz je kladen p°edev²ím na efektivní indexování DNA. Sou£ástí práce je implementace knihovny vybraných algoritm· pro efektivní indexování DNA °et¥zc· a také jejich experimentální analýza. Práce je ur£ena zájemc·m o oblast genetiky, stringologie a indexovacích technik zam¥°ených na zpracování DNA. Styl práce byl zám¥rn¥ veden na úrovni, jeº by m¥l rozum¥t i laik v oboru genetiky a indexování, nicmén¥ od £tená°e se o£ekávají alespo¬ obecné znalosti teoretické informatiky. Ve druhé kapitole je obsaºen stru£ný úvod do problematiky z biologické stránky. Jsou denovány pouºívané pojmy a sepsána je také stru£ná historie genetiky a motivace pro 1 2 KAPITOLA 1. ÚVOD její zkoumání. Ve t°etí kapitole je £tená° seznámen s problematikou stringologie, p°edev²ím vyhledávání v textu a jeho indexování. Popsány jsou základní indexovací struktury a jejich porovnání. Ve £tvrté kapitole jsou pak dedukovány základní kritéria efektivního indexování DNA a je popsáno n¥kolik aktuálních výzkumných prací zabývajících se probíranou problematikou. V páté kapitole je pak dán p°ehled o implementaci softwarové knihovny vybraných algoritm· pro efektivní indexování DNA, jeº jsou poté v ²esté kapitole vystaveny n¥kolika experiment·m. V p°íloze je p°iloºena uºivatelská p°íru£ka ke knihovn¥. Kapitola 2 Problematika Tato kapitola slouºí jako náhled do základ· a témat genetiky a bioinformatiky a jejich propojení s informatikou a stringologií. Cílem je p°edev²ím seznámit £tená°e s pouºívanými pojmy a jejich významem. Rozhodn¥ v²ak nejde o u£ebnicový výklad základ· genetiky, bioinformatiky nebo dokonce biologie. Takovéto výklady jsou referovány v pouºité literatu°e [48, 6, 26, 43]. 2.1 Pojmy Vý£et pojm· není kompletní ani nijak ohrani£en. Pro jejich pochopení jsou v²ak pot°eba obecné st°edo²kolské znalosti chemie a biologie. DNA Podíváme-li se mikroskopem do jádra bu¬ky ºivého organismu, m·ºeme vid¥t malé makrobiologické útvary z nichº n¥které nap°íklad tvarem p°ipomínají písmeno X £i Y. Tyto útvary nazývající se chromozomy jsou základem genetiky. Nesou v sob¥ d¥di£né informace o vlastnostech jedince. Ty jsou uloºené v rozsáhlé makrobiologické struktu°e, která je v chromozomech obsaºena. Jedná se o deoxyribonukleovou kyselinu, anglicky deoxyribonucleic acid, zkrácen¥ DNA. Tvarem p°ipomíná dvoj²roubovici. Je tvo°ena dv¥ma soub¥ºn¥ jdoucími vlákny, jeº se otá£í jeden kolem druhého (obrázek 2.2). Tato vlákna jsou vzájemn¥ propojena v pravidelných intervalech, £ímº struktura m·ºe p°ipomínat pokroucený ºeb°ík. Vlákna jsou tvo°ena fosfátovou páte°í, na které jsou navázané nukleotické báze adenin (a), guanin (g), cytosin (c) a thymin (t) (detailn¥ na obrázku 2.1). Vlákna jsou vzájemn¥ komplementární adenin (a) se váºe s thyminem v sousedním vláknu a guanin se váºe s cytosinem. Propojení obou vláken a struktura DNA má tedy jasný °ád a ºádnou informaci nenese. Ta je obsaºena v samotné sekvenci nukleotických bází, která se pro ú£ely informatiky dá alternativn¥ zapsat jako pouhý °et¥zec symbol· `a', `c', `g' a `t'. P°íkladem miniaturní DNA molekuly m·ºe být sekvence deseti nukleotických bází taagccatta. RNA Ribonukleová kyselina, anglicky Ribonucleic acid, zkrácen¥ RNA, je podobn¥ jako DNA vláknitá makromolekula, která je tvo°ena nukleotidy. Od DNA se li²í mimo jiné p°ítomností nukleové báze uracilu (u) místo thyminu (t) a strukturou DNA 3 4 KAPITOLA 2. PROBLEMATIKA Obrázek 2.1: Chemická struktura DNA ([48], p59) je dvoj²roubovicí, kdeºto RNA je ve v¥t²in¥ p°ípad· jednovláknová a také podstatn¥ krat²í. Vztah mezi DNA a RNA je centrálním dogmatem genetiky DNA zp·sobuje syntézu RNA, která poté zp·sobuje syntézu bílkovin. Nicmén¥ typ· RNA je více a d¥lí se na t°i základní t°ídy: (1) mediátorová RNA, (2) ribozomální RNA, a (3) transferová RNA. Nejznám¥j²í je mediátorová RNA, anglicky messenger RNA, zkrácen¥ mRNA, která je tvo°ena transkripcí z DNA v jád°e bu¬ky. Z toho pak mRNA putuje skrz jaderné póry do cytoplazmy obklopující jádro. Na mRNA se naváºou ribozomy, které po mRNA putují a p°ekládají genetickou zprávu na polypeptidy budoucí amino kyseliny. Stru£n¥ °e£eno, do nebezpe£ného prost°edí cytoplazmy se nepou²tí samotná DNA, ale její zjednodu²ená kopie RNA nesoucí genetický kód, u které se po£ítá s krat²í ºivotností. Kopírování DNA (syntéza RNA) probíhá pomocí enzymu polymerázy. Ten se naváºe na DNA makromolekulu a za£ne rozplétat její dvouvláknovou strukturu. B¥hem toho za£ne navazovat na jednotlivé nukleotické báze rozpojených vláken komplementární nukleotidy. Transkripce jedné RNA je dána délkou genu, který je práv¥ p°episován. Po dokon£ení transkripce genu se vzniklá RNA sekvence odpojí a putuje k ribozomu. Rychlost 2.1. 5 POJMY transkripce je p°ibliºn¥ 30 nukleotických bází za vte°inu. Z pohledu informatiky se RNA dá op¥t jednodu²e zam¥nit za °et¥zec symbol· `a', `c', `g', `u'. Gen Genem se rozumí úsek DNA °et¥zce, mající n¥jakou specickou funkci. Geny denují v²echny bílkoviny (proteiny) a RNA °et¥zce. V genech jsou obsaºeny informace, které jsou replikací d¥d¥ny. Tyto informace obsahují nap°íklad barvu o£í, po£et kon£etin, krevní typ, informace ke stavb¥ k°ídel £i náchylnost ke konkrétním nemocem. Dá se °íct, ºe ºivý organismus je ur£en geny. Velikost genu se dá po£ítat mimo jiné v po£tu nukleotických bází. U b¥ºných gen· jsou jich stovky aº tisíce. Organismus je pak sloºen z tisíc· aº statisíc· gen·. Homo sapiens má p°ibliºn¥ Nanoarchaeum equitans 30 000 gen·, V£ela medonosná p°ibliºn¥ 10 000 gen· a p°ibliºn¥ 600 gen· [48]. Po£et gen·, respektive celková velikost genomu nekoreluje se sloºitostí organismu. Nap°íklad jeden z nejv¥t²ích genom· obsahující mnoºství gen· má Genom Amoeba Dubia. Souhrn v²ech gen· a ostatních DNA a RNA sekvencí kompletn¥ denující d¥di- £nou informaci konkrétního ºivého organismu nazýváme genomem. tení genom· r·zných ºivých organism· (rostlin, hmyzu, savc·, . . . ) se nazývá sekvenování DNA. Velikost genomu se udává hmotností v pikogramech nebo v po£tu pár· nukleotických bází, p°i£emº platí, ºe 1 pg je 978 Mbp (milión· pár· nukleotických bází). Lidský genom £ítá p°ibliºn¥ t°i miliardy pár· nukleotických bází (23 chromozom·), laboratorní my² má dv¥ a p·l miliardy, ku°e domácí p°ibliºn¥ jednu miliardu a setá rýºe p°ibliºn¥ 400 milión· [26]. Lidský a my²í genom mají p°ibliºn¥ 80% shodu. Biologie P°írodní v¥da zabývající se ºivotem a ºivými organismy na rozsáhlé ²kále úrovní detailu. D¥lí se do mnoha podobor·. Molekulární biologie ást biologie zabývající se molekulárními procesy a struktu- rami. Studuje vzájemné ovliv¬ování bun¥k a makromolekul jako DNA, RNA a syntézu bílkovin. Genetika V¥decká disciplína studující d¥di£nost, prom¥nlivost organism·, geny a jejich strukturu, funkce, prom¥ny a p°enos. V¥nuje se jednotlivým gen·m. Genomika Odnoº genetiky studující genomy organism·. Zaji²´uje získávání genom· (sekvenování) a jejich mapování. V¥nuje se kompletním genom·m. Bioinformatika Informatika aplikovaná na obor molekulární biologie, genetiky a genomiky. Zabývá se sekvenováním rozsáhlých DNA °et¥zc·, tvorbou databází, algoritm· a formálních teorií pro uchování, zpracování a analýzu biologických dat za ú£elem lep²ího pochopení biologických proces·. Výpo£etní genomika Vyuºití výpo£etní analýzy pro pochopení biologických vlast- ností z daných biologických dat jako nap°íklad DNA a RNA sekvencí. Povaºuje se za podobor bioinformatiky, ale zam¥°uje se na kompletní genomické sekvence a pochopení princip· t¥chto sekvencí. Genetické inºenýrství Úprava genom· organism· £lov¥kem. asto se referuje jako genetická modikace. 6 KAPITOLA 2. PROBLEMATIKA 2.2 Historie, sou£asnost a budoucnost genetiky Prvním d·leºitým milníkem v historii genetiky je nepochybn¥ výzkum Gregora Mendela. Ten na základ¥ zkoumání k°íºení hrachu stanovil t°i Mendelovy zákony d¥di£nosti, £ímº odstartoval novou v¥dní disciplínu genetiku. Za objevitele DNA se povaºuje Friedrich Miescher. Poda°ilo se mu extrahovat z pouºitých nemocni£ních obvaz· jádra bílých krvinek a získal sraºeninu, kterou nazval nuclein (sm¥s RNA a DNA). Ur£il, ºe nuclein obsahuje mimo jiné fosfor a dusík. O schopnosti p°ená²et d¥di£né informace v²ak pouze uvaºoval. Tuto my²lenku potvrdil nositel Nobelovy ceny Thomas Morgan, který dokázal, ºe geny se vyskytují v chromozómech a sepsal Morganovy zákony d¥di£nosti. V jeho práci pouºil octomilek, p°i£emº pro ur£ení zákon· d¥di£nosti vyuºil zmutovaných jedinc·. Mutací se pak zabýval jeho kolega Hermann Muller, který sledoval vliv rentgenového zá°ení na mutaci chromozóm·. Mutace také zkoumal George Badle, který je známý pro pravidlo one gene, one enzyme. V roce 1949 objevil Ervin Charga pom¥r mezi nukleotickými bázemi DNA. Zjistil, ºe adeninu je p°ibliºn¥ stejn¥ jako thyminu a cytosinu p°ibliºn¥ stejn¥ jako guaninu. N¥které parametry struktury DNA (a RNA) molekul objevila Rosalinda Franklin difrak£ními obrazy DNA, nicmén¥, první úplný a ov¥°ený model struktury DNA publikovali její kolegové James Watson a Francis Crick. Ti na základ¥ p°edchozích výzkum· a mnoha experiment· doslova sestavili DNA dvoj²roubovici (na obrázku 2.2) a ur£ili její chemické i geometrické parametry. Uplatnili i Charga·v objev pom¥ru nukleotických bází, kdyº zjistili, ºe °et¥zce v DNA jsou vzájemn¥ antiparalelní. Crick po objevení struktury DNA vytvo°il centrální dogma genetiky, které zavádí vztah mezi DNA, RNA a bílkovinami. Koncem padesátých let dvacátého století pak ukázali Matthew Meselson a Frank Stahl, ºe nová DNA je tvo°ena ze staré replikací. Na za£átku ²edesátých let Sydney Brenner doplnil Crickovo centrální dogma o chyb¥jící mediátorovou RNA (mRNA) a Marshall Nirenberg jej experimentáln¥ ov¥°il, kdyº syntetickými mRNA molekulami zji²´oval, jaké amino kyseliny vzniknou p°i dodání konkrétních nukleotických triplet· (codon·) a postupn¥ vyzkou²el v²echny kombinace a rozlu²til tak genetický kód. Zjistil, ºe pro n¥které amino kyseliny existuje více odpovídajících triplet·. Na konci sedmdesátých let nositel dvou Nobelových cen Frederick Sanger vytvo°il dnes základní metodu sekvenování DNA. Nazývá se Sangerova metoda, p°ípadn¥ plus a mínus nebo dideoxy £i primed synthesis. Tato metoda umoº¬uje p°e£íst DNA °et¥zec jako posloupnost nukleotických bází `a', `c', `t' a `g'. Základem jsou syntetizované DNA makromolekuly se známou sekvencí, DNA polymeráza a dostatek volných nukleotických bází. Roztok s DNA se zah°eje tém¥° k bodu varu vody, £ímº se DNA dvoj²roubovice rozpadne na samostatná vlákna. DNA polymeráza poté na tato vlákna za£ne vázat volné nukleotické báze, £ímº vlastn¥ DNA makromolekulu opraví. Oprava je v²ak limitována dodanými nukleotickými bázemi. Tento proces vychází ze studie replikace DNA. Po dokon£ení procesu jsou na vláknech navázány nukleotické báze, p°i£emº sekvenování je zapo£ato s mnoha r·znými syntetizovanými DNA molekulami a kaºdý roztok je obohacen o jiné nukleotidy. Vyuºito je také radioaktivních zna£ek. Díky znalosti sekvence syntetizovaných DNA makromolekul a radioaktivních zna£ek pak lze £íst DNA. Metoda byla pozd¥ji pouºita na sekvenování kompletního lidského genomu. Díky sekvenování tak bylo moºné za£ít vytvá°et databáze DNA °et¥zc·. Za dal²í velký skok lze také povaºo- R vat vynález DNA £ipu (GeneChip a DNA microarray). Díky um¥le vytvo°eným, krátkým, jednovláknovým DNA molekulám pravideln¥ rozmíst¥ným v m°íºce na £ipu 2.2. HISTORIE, SOUASNOST A BUDOUCNOST GENETIKY 7 Obrázek 2.2: Model DNA podle Watsona a Cricka ([48], p60) bylo moºné pomocí p°irozen¥ probíhající vazb¥ komplementárních DNA molekul snadno provád¥t velká mnoºství genetických experiment·, které produkovaly mnoºství dat, na které bylo pot°eba vyvinout a aplikovat metody bioinformatiky. Díky t¥mto poºadavk·m zaznamenala bioinformatika zna£né pokroky a bylo moºné p°istoupit k tolik o£ekávanému projektu sekvenování lidského genomu. Na projektu sekvenování lidského genomu pracovalo na po£átku 21. století n¥kolik r·zných týmu. Velmi d·leºitou postavou sekvenování lidského genomu byl Francis Collins s projektem Human Genome Project a John Sulston. Jedním z prvních, kterým se to poda°ilo byl tým Craiga Ventery. Pouºili takzvanou metodu shotgun sequencing, která je zaloºená na velkém mnoºstvích £tení náhodných £ástí genomu. Jedno £tení vyprodukovalo sekvenci p°ibliºn¥ 100 aº 1000 nukleotických bází (a, c, t, g). Tato £tení se místy p°ekrývala a tak bylo moºné postupn¥ sekvence sloºit do velkého celku, jímº je obraz lidského genomu. Metoda shotgun sequencing není sice zcela p°esná ani jednoduchá, p°esto se stala de-facto standardem p°i sekvenování DNA. Pokro£ilé techniky sekvenování a zpracování DNA umoºnily na po£átku 21. století mapování genom· velkého mnoºství r·zných organism·, objevení desítek milion· gen· a p°íliv nových zji²t¥ní v oblasti biologie. Dne 20. kv¥tna 2010 pak Craig Venter ve°ejn¥ oznámil vytvo°ení prvního syntetického organismu schopného replikace a odstartoval tím novou éru, ve které se genomy nejenom £tou, ale i zapisují. V budoucnu pak Venter o£ekává tvorbu syntetických organism· pro specické ú£ely jako nap°íklad sníºení úrovn¥ oxidu uhli£itého v atmosfé°e £i nahrazení stávajícího petrochemického pr·myslu. 8 KAPITOLA 2. PROBLEMATIKA 2.3 Uºití genetiky Hlavním p°edm¥tem genetiky je lep²í porozum¥ní ºivotu. Uº první znalosti byly aplikovány v zem¥d¥lství i ºivo£i²né produkci. Nejznám¥j²í uºití je v²ak sekvenování genom· a jejich uchovávání a porovnávání p°i jednozna£né identikaci osob, zví°at £i jiných organism·. Identikace osob na základ¥ jejich genom· je b¥ºné vyuºíváno nap°íklad p°i policejních vy²et°ováních a konkuruje více neº sto let staré metod¥ identikace na základ¥ otisk· prst·. Genetika má velké uplatn¥ní v léka°ství, ve farmakologii a r·zných terapiích. Jeden z nedávných p°ípad· uºití DNA sekvenování v léka°ské praxi se týkal záchrany ²estiletého chlapce jménem Nicholas Volker [51, 34]. Ten se jiº od narození potýkal s mnoha zdravotními problémy, jejichº zdroj nebylo moºno diagnostikovat b¥ºnými metodami. Bylo tedy pouºito netradi£ního p°ístupu, kdy byl chlapc·v genom sekvenování a analyzován. Byla nalezena neo£ekávaná mutace a léka°i tak mohli dokon£it diagnózu a sestavit úsp¥²nou lé£bu. Jde z°ejm¥ o první p°ípad úsp¥²ného uºití sekvenování genomu p°i diagnóze pacienta. Sekvenování DNA také umoº¬uje podrobn¥ji studovat vybrané nemoci, nap°íklad rakovinu [62] £i kapavku [37]. Znalostí genomu lze také zp°es¬ovat a dopl¬ovat znalosti o historii ºivo£i²ných druh·, zejména pak £lov¥ka [63] £i dokonce oºivovat vyhynulé druhy [64]. Sekvenování lze vyuºít mnoha zvlá²tními zp·soby. V izraelském m¥st¥ Petah Tikva vybudovali DNA databázi zde ºijících ps· a p°i°adili k nim jejich majitele [61]. Tím získali unikátní moºnost postihovat viníky zne£i²´ující prost°edí m¥sta. Dal²ím p°íkladem m·ºe být vyuºití znalostí charakteristik DNA molekul ve spintronice pro t°ízení elektron· podle jejich spinu [15] £i p°i tvorb¥ miniaturních po£íta£ových £ip· [55]. Pokro£ilých schopností práce s DNA vyuºil Craig Venter, kdyº se svým týmem vytvo°il první syntetickou bu¬ku, mající £lov¥kem vytvo°ený genom. Venter p°edkládá moºnosti tvorby nových organism· ur£ených pro konkrétní ú£el [47]. Znalostí struktury genomu mnoha organism· a díky databázi gen· obsahující více neº dvacet milión· poloºek je £lov¥k schopen tvo°it pomocí mnoha r·zných zp·sob· a po£íta£ové asistence nové organismy podobným zp·sobem jako funguje d¥tská stavebnice. Biologických stroj· pak lze vyuºít nap°íklad p°i odstra¬ování radioaktivního odpadu na toxických skládkách [56] nebo sniºování úrovn¥ oxidu uhli£itého v atmosfé°e [57]. 2.4 Operace s DNA P°i práci s DNA £i RNA je pot°eba vykonávat r·zné úlohy. N¥které jsou více bioinºenýrské, jiné více stringologické. V¥t²inou v²ak jde o spolupráci n¥kolika r·zných odv¥tví lidské £innosti a skloubení jejich zájm· a znalostí. Problém, který byl roz°e²en velmi záhy v historii genetiky bylo £tení DNA molekul jako sekvenci nukleotických bází, tedy sekvenování. Sekvenovacích metod je mnoho, ale základem je vºdy transkripce biochemických dat v data stringologická. Sekvenování m·ºe být velmi nákladné, pomalé a p°esné (jako nap°íklad Sangerova metoda) £i velmi levné, rychlé, ale ne zcela p°esné (jako Venterova metoda Shotgun sequencing). P°i sekvenování vkládáme jako subjekt sekvenované makromolekuly, p°ípadn¥ rozbité na men²í £ásti a získáváme £tení. Ta obsahují typicky desítky £i stovky p°e£tených nukleotických 2.4. 9 OPERACE S DNA bází. V p°ípad¥ lineárních metod dostáváme tato £tení tak, jak jdou za sebou v sekvenovaném subjektu. V p°ípad¥ shotgun sequencing dostáváme náhodné útrºky transkripce subjektu. Sekvenování v prvopo£átcích trvalo (v p°ípad¥ lidského genomu) n¥kolik let a stálo miliardy amerických dolar· [59]. Nyní sekvenování (lidského genomu) trvá n¥kolik dní a stojí pár set korun [60]. V p°ípad¥ sekvenování metodou shotgun sequencing získáváme mnoho náhodných £tení, která stejn¥ jako dílky obrovské skládanky nedávají bez °ádu smysl. Sestavení takovýchto £tení do podoby, která odpovídá p·vodn¥ £tenému subjektu je stringologickou, statistickou a informatickou úlohou, ve které získáváme vzájemn¥ p°ekrývající se £tení a máme ur£it jejich po°adí a skute£né p°ekrytí. Nap°íklad p°i p°e£tení sekvence aaactctcttgg a tcttggaacgaa bychom mohli prohlásit, ºe £tený úsek je aaactctcttggaacgaa. Jestli je tomu skute£n¥ tak závisí na po£tu £tení kaºdého úseku, velikosti p°ekryvu a délce sekvencí. Volby t¥chto parametr· významn¥ ovliv¬ují p°esnost celého sekvenování. P°i projektu Human Genome Project byla kaºdá nukleotická báze p°e£tena alespo¬ dvanáctkrát nebo vícekrát [59]. Pokud máme k dispozici referen£ní genom, situace se zjednodu²í, ale po°ád musíme °e²it mapování jednotlivých £tení na referen£ní genom [13]. Sekvenování se stalo kaºdodenní záleºitostí a je známo, ºe genomy stejných organism· se mezi sebou významn¥ neli²í. Jde jen o drobné rozdíly a není tedy pot°eba sekvenovat a pracovat s kompletním genomem. Sta£í pracovat pouze s rozdíly oproti referen£nímu genomu. Na n¥j je v²ak pot°eba v²echna £tení mapovat a vytvo°it strukturu zaznamenávající rozdíly. Návrh takového struktury a jejího chování je pak zajímavou stringologickoinformatickou úlohou. Velikost genomu se b¥ºn¥ udává v pikogramech £i po£tu nukleotických bází, p°i£emº se pouºívá jednotka bp (base pair) a jeden pikogram odpovídá p°ibliºn¥ 0.98·106 kbp [26]. Velikost lidského genomu je p°ibliºn¥ 3,2 Gbp [26]. Pouºijeme-li zápisu sekvence abecedou `a' `c', `t', `g' a vyuºijeme-li kódování ASCII (osm bit· na jeden symbol), budeme pot°ebovat pro uloºení jednoho kompletního lidského genomu p°ibliºn¥ t°i gibibajty. Pouºijeme-li kódování dvoubitové (f (a) = 00, f (c) = 01, f (g) = 10, f (t) = 11), budeme pro uloºení genomu pot°ebovat necelý jeden gibibajt. Existují tedy samoz°ejm¥ r·zné jiné zp·soby ukládání kompletních genom·. Vyuºívají se bu¤ klasické kompresní metody, nebo se aplikují kompresní metody ur£ené speciáln¥ pro DNA °et¥zce. Sekvenováním genom· organism· bylo v posledních letech objeveno mnoºství (milióny) nových gen·. Jejich katalogizace a dokumentace vyºaduje op¥t ur£itý systém. Od n¥j m·ºeme nap°íklad o£ekávat schopnost odpov¥d¥t na otázky vztah· nemocí k daným gen·m. Genových databází je také zapot°ebí p°i po£áte£ní fázi syntetizování nových organism·. Vstupem genové databáze m·ºe být také celý genom, v n¥mº jsou geny vyhledány a následn¥ je provedena sémantická analýza p°edaného genomu, coº je jedním ze základ· komer£ního úsp¥chu soukromého sekvenování genom·. Analýza gen· a jejich korelace nachází také uplatn¥ní p°i zkoumání vyhynulých druh· ºivo£ich· £i lidských poz·statk· b¥hem historického bádání. Velmi praktickou úlohou je také vyhledávání mutací v genech sekvenovaných genom·. Toho m·ºe být vyuºito p°i diagnóze zdravotních poruch nebo jejich p°edcházení. Zajímavým problémem je také tvorba kódování, jímº je moºné zakódovat libovolnou informaci jako DNA °et¥zec. Z informatického hlediska se jedná o pouhou funkci, která z vybrané abecedy jednozna£n¥ kóduje do ternární abecedy `a', `c', `g', `t' podobným 10 KAPITOLA 2. PROBLEMATIKA zp·sobem, jakým se nap°íklad kódují celá £ísla do dvojkové soustavy. Tento postup v²ak vyuºít nelze kv·li platnosti genetického kódu. Tém¥° kaºdý triplet (codon) zp·sobuje syntézu konkrétní amino kyseliny. Je tedy pot°eba ²ikovným zp·sobem vyuºít stoptriplet· (genetická te£ka) pro tvorbu prakticky pouºitelného kódu. Náro£n¥j²ími úlohami jsou pak porovnávání daných sekvenovaných genom· za ú£elem jednozna£né identikace nap°íklad v rámci policejního vy²et°ování, autentizace £i ur£ování p·vodu a p°íbuznosti, vyhledávání spole£ných vlastností a unikátností (mutací). Pro takové p°ípady je pot°eba vlastnit efektivní databázi genom· (a´ uº kompletních nebo jejich zm¥n od referen£ního £i DNA prol·) a mnoºinu algoritm· pro práci s takovouto databází. Jednou z nejd·leºit¥j²ích a nejv¥t²ích databází biologických dat je GenBank [54], která uchovává nukleotické sekvence a bílkovinné sekvence. Mnoºství obsahu GenBank se kaºdých 18 m¥síc· zdvojnásobuje a aktuáln¥ obsahuje více sekvence neº 300 000 organism·. Data z GenBank pak lze zpracovávat nap°íklad nástrojem BLAST [53], který dokáºe odpovídat na otázky jako nap°íklad Obsahuje genom G podobný gen jako je g?, Kdo je p·vodcem dané sekvence DNA?, Jaké dal²í geny tvo°í podobné bílkovinné struktury?. Krom¥ zmín¥ných úloh je je²t¥ celá °ada £ekající v blízké budoucnosti. Nap°íklad úloha syntézy kompletního genomu schopného transplantace do ºivé bu¬ky a zaji²t¥ní jeho p°ijetí a uplatn¥ní, pokro£ilé techniky sekvenování, tvorba a vylep²ování nástroj·, postup· a technologií pro práci s genetickým materiálem, stavba na DNA zaloºených biologických stroj· a mnohé dal²í. Kapitola 3 Vyhledávání v textu a indexování V p°edchozí kapitole jsme se seznámili mimo jiné s DNA a její reprezentací v informatice. Neº v²ak p°istoupíme k rozebírání efektivnosti indexování DNA, bylo by vhodné si je²t¥ p°edstavit základní i pokro£ilej²í techniky vyhledávání v obecném textu a nabyté znalosti budeme p°ípadn¥ zkou²et aplikovat na DNA °et¥zce. 3.1 Pojmy Tato kapitola jiº obsahuje pon¥kud exaktn¥j²í p°ístup k problematice, je proto pot°eba p°esn¥ji denovat pouºité pojmy. Ty se se pak budou hodit i v následujících kapitolách. Nicmén¥, £tená° m·ºe následující pojmy p°esko£it a vrátit se k nim aº v p°ípad¥ pot°eby. Pojmy, které zde nejsou zachyceny, je moºné dohledat v pouºité literatu°e. 3.1.1 Symbol Symbolem se v informatice b¥ºn¥ rozumí zna£ka, která je unikátní, reprodukovatelná, atomická, gracky reprezentovatelná a nejlépe obecn¥ známá. P°íkladem mohou být symboly b¥ºné abecedy (a, b, c, . . . ), arabské £íslice (1, 2, 3, . . . ), matematické symboly (+, −), japonská písmena, £ínské znaky, hudební noty nebo nukleotické báze. 3.1.2 Abeceda Kone£ná neprázdná mnoºina symbol· se nazývá abecedou. Zna£í se b¥ºn¥ velkým písmenem Σ. ím v¥t²í abeceda je, tím více informace sebou nese kaºdý jednotlivý symbol (dáno entropií, [42]). Abeceda m·ºe být uspo°ádaná, kde kaºdé libovolné dva symboly z ní lze porovnat. P°íklad abecedy binární Σbin = {0, 1} a abecedy DNA ΣDN A = {a, c, g, t}. 3.1.3 et¥zec Kone£ná sekvence symbol· nad danou abecedou se nazývá °et¥zec. Prázdný °et¥zec neobsahuje ºádné symboly a zna£í se ε. Mnoºina v²ech °et¥zc· nad abecedou 11 Σ se zna£í 12 KAPITOLA 3. Σ∗ VYHLEDÁVÁNÍ V TEXTU A INDEXOVÁNÍ a obsahuje nekone£n¥ °et¥zc·. Mnoºina Σ∗ obsahuje také prázdný °et¥zec. Jeho vyj- + mutím získáme mnoºinu Σ , tedy mnoºinu v²ech °et¥zc· nad abecedou Σ krom¥ prázd∗ + ného °et¥zce. Mnoºinov¥ zapsáno Σ = Σ ∪ {ε}. P°íkladem °et¥zce T nad abecedou ΣDN A = {a, c, g, t} je T = tcgtcaagc. 3.1.3.1 Prex, sux a faktor asto referovanými £ástmi °et¥zc· je jejich za£átek, konec a libovolný pod°et¥zec. Za- Pref °et¥zce T nad Pref(T ) = {p : T = pz; p, T, z ∈ Σ∗ }. Tato denice £átek °et¥zce se nazývá prex (p°edpona). Mnoºina v²ech prex· abecedou Σ se dá denovat jako zahrnuje prex délky nula i prex, který je roven p·vodnímu °et¥zci. Konec °et¥zce se nazývá suxem (p°ípona) a jeho denice je opa£ná k denici prexu. Su(T ) = {s : T = zs; s, T, z ∈ Σ∗ }. Libovolný pod°et¥zec se nazývá faktor. Jde vlastn¥ o prexy v²ech sux·, £i suxy v²ech prex· °et¥zce T . (T ) = {f : T = pf s; p, f, s, T ∈ Σ∗ }. Fact 3.1.3.2 Operace s °et¥zci Σ a její podmnoºinu Θ, pak m·ºeme ur£it dopln¥k Θ jako Θ̄ = Σ\Θ. Pro ā = Σ \ {a}. Nap°íklad pro abecedu ΣDN A = {a, c, g, t} je t̄ = {a, c, g}. Operace z°et¥zení pro dva °et¥zce T1 a T2 , jeº jsou sekvencí symbol· nad stejnou abecedou Σ, vytvo°í nový °et¥zec T1 T2 . Nap°íklad z°et¥zením T1 = gcc, T2 = at vznikne T1 T2 = gccat. Délka °et¥zce T je daná po£tem symbol· jeº jej tvo°í a pro libovolný °et¥zec T platí |T | ≥ |ε| = 0. et¥zíme-li jeden a týº °et¥zec Máme-li abecedu jeden symbol zna£íme dopln¥k vícenásobn¥, pouºijeme zkráceného zápisu pomocí exponentu. Tedy pro libovolný °et¥zec T1 = T, T2 = TT, T3 = TTT a °et¥zec. Nap°íklad pro °et¥zec T3 = gc T platí tak dále. Nultou mocninou rozumíme prázdný je T33 = gcgcgc. 3.1.4 Formální jazyk Podmnoºina mnoºiny v²ech °et¥zc· nad abecedou L ⊆ Σ∗ . Σ se nazývá jazyk L. Formáln¥ zapsáno Protoºe je jazyk mnoºinou, lze s jazyky provád¥t r·zné mnoºinové operace. Máme-li n¥jaký formální jazyk L a n¥jaký °et¥zec odpov¥¤ na otázku, zda °et¥zec (slovo) T T, m·ºeme nap°íklad hledat náleºí do jazyka L £i nikoliv, coº je jedním z úloh teorie formálních jazyk· a automat·. LDN A , který obsahuje v²echny °et¥zce ΣDN A = {a, c, g, t}. Tedy LDN A = Σ∗DN A . Tento jazyk mimo jiné obsahuje P°íkladem formálního jazyka m·ºe být jazyk nad abecedou DNA °et¥zce genom· v²ech (DNA-based) organism· planety Zem¥. 3.1.5 Automat Automatem se ve stringologii rozumí konstrukt jeº £te sekvenci symbol· a umí rozhodnout, zda p°e£tený °et¥zec náleºí do jazyka, který automat p°ijímá, £i nikoliv. Automat· je více druh·; pot°ebovat v²ak budeme pouze n¥které. 3.1. 13 POJMY 3.1.5.1 Kone£ný deterministický automat M (anglicky deterministic nite automaton, zkráMDF A = (Q, Σ, δ, q0 , F ), kde Q je kone£ná mnoºina stav·, Σ je kone£ná mnoºina vstupních symbol· (vstupní abeceda), δ : Q × Σ → Q je p°echodová funkce, q0 je po£áte£ní stav (q0 ∈ Q) a F je kone£ná mnoºina koncových stav· (F ⊆ Q). Kone£ný deterministický automat cen¥ DFA) je p¥tice Kone£ný automat se vºdy nachází v n¥jakém stavu. Na vstupu vºdy (D)FA p°ijímá jeden symbol a pomocí p°echodové funkce p°ejde z aktuálního stavu do stavu následujícího. Pokud pro kombinaci aktuálního stavu a práv¥ p°e£teného vstupního symbolu není ºádný p°echod v δ denován, automat bu¤ vstoupí do neformálního odpadního stavu (garbage state), ze kterého pro kaºdý vstupní symbol vede vºdy p°echod do sama sebe (op¥t do garbage state), p°ípadn¥ rovnou zahlásí, ºe £tený °et¥zec do p°ijímaného jazyka nenáleºí. Kone£né automaty se obvykle znázor¬ují pomocí diagramu, jeº obsahuje (tém¥°) kompletní denici znázorn¥ného automatu. P°íklad kone£ného deterministického automatu, který p°ijímá jazyk Labcd = {abcd, abCd, aBcd, aBCd} je Mabcd = ({0, 1, 2, 3, 4, 5, 6}, {a, b, B, c, C, d}, δ, 0, {6}), kde δ je znázorn¥na diagramem 3.1. Obrázek 3.1: DFA p°ijímající jazyk {abcd, abCd, aBcd, aBCd} 3.1.5.2 Kone£ný nedeterministický automat Kone£ný nedeterministický automat (anglicky nondeterministic nite automaton, zkrácen¥ NFA) se od DFA li²í v denici p°echodové funkce. NFA je op¥t p¥tice MN F A = (Q, Σ, δ, q0 , F ), kde Q je kone£ná mnoºina stav·, Σ je kone£ná mnoºina vstupních symbol·, δ : Q × Σ → P(Q) je p°echodová funkce (P je mnoºina v²ech podmnoºin, poten£ní mnoºina), q0 je po£áte£ní stav (q0 ∈ Q) a F je mnoºina koncových stav· (F ⊆ Q). Rozdíl NFA oproti DFA je tedy v tom, ºe DFA pro aktuální stav a p°e£tený symbol p°echází nanejvý²e do jednoho stavu, kdeºto NFA m·ºe p°echázet do více stav· po p°e£tení jednoho symbolu. Neur£itost rozhodování, do kterého stavu se automat má dostat po p°e£tení daného symbolu, se tedy vyjád°í p°echodem do více stav· a tím automat stává nedeterministickým. Existují r·zné varianty nedeterministických automat·. Nap°íklad NFA s epsilon p°echody (p°echody pro prázdné °et¥zce) se op¥t li²í denicí p°echodové funkce (Σ ∪ {ε}) → P(Q). δ : Q× Dostane-li se tedy automat do stavu, z n¥jº vedou epsilon p°echody do jiných stav·, p°echází do t¥chto stav· okamºit¥, beze £tení jakéhokoliv symbolu. Variantou je také automat s více po£áte£ními stavy, který místo q0 má Q0 (Q0 ⊆ Q) 14 KAPITOLA 3. VYHLEDÁVÁNÍ V TEXTU A INDEXOVÁNÍ neprázdnou kone£nou mnoºinu po£áte£ních stav·. V kaºdém z t¥chto po£áte£ních stav· se nachází p°ed p°e£tením prvního symbolu. DFA i NFA jsou ekvivalentní. DFA je speciálním p°ípadem NFA a NFA lze vºdy p°evést na DFA determinizací [36]. Deterministické automaty lze také minimalizovat. Porovnejme automaty na obrázcích 3.2 a 3.3. Obrázek 3.2: DFA p°ijímající jazyk {(ab)∗ } Obrázek 3.3: DFA p°ijímající jazyk {(ab)∗ } Oba automaty zjevn¥ p°ijímají stejný jazyk a p°esto to nejsou identické automaty. Pokud chceme získat automat s minimálním po£tem stav· takový, který p°ijímá stejný jazyk jako automat, který jiº máme, aplikujeme algoritmus minimalizace [19]. Ani jeden z automat· na obrázcích 3.2 a 3.3 není minimální. 3.2 Co je to vyhledávání v textu V mnoha r·zných oborech lidské £innosti je pot°eba technik vyhledávání v textu. M·ºe se jednat o oby£ejné ru£ní vyhledávání telefonního £ísla rmy v telefonním seznamu, automatizované vyhledávání v databázi knih místní knihovny £i ur£ování shody dvou genom·. Nejb¥ºn¥j²ím problémem, na který stringologie dává nástroje a postupy na hranici moºností, je vyhledání n¥jakého vzorku v daném textu. Vyhledáním se m·ºe rozum¥t pouhé ohlá²ení o p°ítomnosti £i nep°ítomnosti nebo ur£ení pozice prvního, posledního nebo v²ech výskyt· hledaného vzorku. Vyhledávat lze p°esn¥ nebo p°ibliºn¥, kdy pro daný vzorek najdeme odpovídající £ást textu, jeº nemusí být pln¥ shodná s oním vzorkem. Vzorkem se také m·ºe chápat °et¥zec, £i sekvence °et¥zc·, £i mnoºina °et¥zc· nebo dokonce mnoºina sekvencí °et¥zc·. Variací na základní problém vyhledávání je tedy mnoho a na kaºdý se uplatní trochu jiný p°ístup. V¥t²ina v²ak vyuºívá k °e²ení automat· nebo jejich simulace. 3.3 Základní p°ístupy vyhledávání v textu Nejprve se zam¥°íme na nejzákladn¥j²í typ vyhledávání v textu. Máme n¥jaký °et¥zec |P | ≤ |T |, o£ekáváno |P | |T |). et¥zec T nazveme textem. Úkolem je zjistit, zda je P pod°et¥zcem T , respektive jestli se P nachází v T . Vyobrazením P a °et¥zec T (nutno takovéhoto problému v praxi m·ºe být nap°íklad hledání vybraného slova v knize nebo na webové stránce. 3.3. 15 ZÁKLADNÍ PÍSTUPY VYHLEDÁVÁNÍ V TEXTU 3.3.1 Triviální algoritmus Pomineme r·zné nedeterministické £i meta-heuristické metody a zam¥°íme se na £istý algoritmický p°istup. Máme-li zodpov¥d¥t otázku zda se P nachází v T, musíme po- stupovat systematicky. Prvotní °e²ení, které lidé £asto vyuºívají aniº by k tomu pot°ebovali formální denici, se n¥kdy nazývá naivní £i triviální algoritmus. Ten v p°ípad¥ uvedeného problému spo£ívá v p°iloºení vzorku k za£átku textu a porovnání ke vzorku odpovídajícímu úseku textu. P°i neshod¥ se vzorek posouvá o jeden symbol vpravo (£i vlevo postupujeme-li opa£ným sm¥rem) a proces se opakuje do doby, kdy vzorek není moºné dále posouvat. Formáln¥ je triviální vyhledávací algoritmus popsán v 3.1, kde se provádí vyhledávání zleva doprava, porovnává se zleva doprava, vyhledávají se pouze p°esné shody, hledají se v²echny výskyty vzorku a kaºdý výskyt je ozna£en vyti²t¥ním £ísla, které ur£uje, kolikátým symbolem v textu T za£íná vzorek P. Algoritmus kon£í ve chvíli, kdy vzorek není moºné dále posouvat a text byl tedy prohledán celý. Algorithm 3.1 Triviální vyhledávací algoritmus Vstup: TEXT[1..n] je °et¥zec symbol· délky n Vstup: VZOREK[1..m] je °et¥zec symbol· délky Nutná podmínka: m mn i := 0 while i ≤ n − m do j := 0 while j ≤ m and VZOREK[j + 1] = TEXT[i + j + 1] do j := j + 1 if j = m then print i + 1 {vzorek i := i + 1 nalezen na pozici i + 1} end if end while end while 3.3.1.1 Sloºitost triviálního algoritmu Sloºitost triviálního vyhledávání vyjád°ená pomocí asymptotického zápisu algoritmické sloºitosti [27] je ur£ena p°edev²ím dv¥ma cykly v t¥le algoritmu. Jeden cyklus je závislý na délce textu, druhý na délce vzorku. V nejhor²ím p°ípad¥ bude pot°eba celkem |VZOREK|·|TEXT| porovnání. Pro porovnání kaºdého symbolu je pot°eba konstantního £asu a stejn¥ tak i pro ostatní operace °ízení chodu algoritmu. Dohromady se tedy dá vyjád°it asymptotická sloºitost triviálního algoritmu jako kde n je délka α je daná konstanta (daná výkonnou platformou). P°esn¥ji O(α · m · (n − m + 1)), ale protoºe m n, m·ºeme zápis zjednodu²it na O(α · m · n). V nejlep²ím p°ípad¥ text neobsahuje symbol, který je na za£átku vzorku (nebo m = 1) a k posunu dojde vºdy po prvním porovnání vzorku a textu. V takové situaci je asymptotická sloºitost Θ(α · n), takºe triviální algoritmus má dolní mez asymptotické sloºitosti Ω(α · n). Vzhledem k tomu, ºe m n, v obou p°ípadech (nejlep²í i nejhor²í) p°evládne v asymptotické sloºitosti délka textu n a triviální algorittextu, m O(α · m · n), je délka vzorku a je asymptotická sloºitost mus tak s ur£itou nadsázkou m·ºeme prohlásit za algoritmus s lineární sloºitostí. To se 16 KAPITOLA 3. VYHLEDÁVÁNÍ V TEXTU A INDEXOVÁNÍ dá ov¥°it i experimenty. Pro p°irozené jazyky dojde k neshod¥ v¥t²inou hned na prvním p°ípadn¥ druhém symbolu vzorku [35] a triviální algoritmus pak je tém¥° lineární. Dosadíme-li za text lidský genom obsahující p°ibliºn¥ 3,2 miliard nukleotických bází [26] (symbol·) a za hledaný vzorek gen mající p°ibliºn¥ 1000 nukleotických bází, dostaneme asymptotickou sloºitost p°ibliºn¥ konstanty α O(α · 3, 2 · 1012 ). V závislosti na velikosti a schopnostech výkonné platformy (po£et porovnání za vte°inu, rychlost inkrementací, £tení pam¥ti) pak m·ºe triviální algoritmus aplikovaný na lidský genom a vyhledávání b¥ºného genu trvat v °ádu minut aº hodin. To rozhodn¥ není uspokojivý výsledek, zvlá²t¥ pak v p°ípad¥, kdyº pot°ebujeme vyhledávat vzork· více a nebo nad více genomy v celé databázi genom· statisíc· lidí. 3.3.2 Pokro£ilé algoritmy vyhledávání v textu Triviální algoritmus zjevn¥ není p°íli² vhodný pro práci s dlouhými DNA °et¥zci a je tedy pot°eba podívat se na lep²í algoritmy. Jeden z dob°e známých výkonných algoritm· pro vyhledávání v textu je vyhledávací algoritmus Boyer-Moore z roku 1977 [5]. Jeho sloºitost je p°ibliºn¥ 3n, tedy asymptotická sloºitost O(n) (n je délka textu). Dal²ím velmi známým a kvalitním algoritmem je algoritmus Knuth-Morris-Pratt [28]. Jeho asymptotická sloºitost je také O(n). Oba algoritmy mají ur£itou konstantní spot°ebu operací vynucenou °ízením jejich chodu a také vyºadují nekonstantní dobu p°ípravy pot°ebných datových struktur. Jejich efektivita plyne totiº ze znalosti vzorku a schopnosti posouvat vzorek o více neº jeden symbol neº jak je tomu u triviálního algoritmu. Práv¥ pro získání znalosti o moºnostech v¥t²ích posun· algoritmy pot°ebují p°ed spu²t¥ním p°ípravu datových struktur. I s t¥mito úºasnými algoritmy v²ak prohledávání velkých DNA databází zabere obrovské mnoºství £asu. A je jasné, ºe za hranici asymptoticky lineárního algoritmu se nelze dostat bez ob¥tování jiného zdroje: pam¥ti. 3.4 Indexování textu Pokud chceme prohledávat náhodný text bez p°ípravy, nevyhneme se pr·chodu celým textem (stále platí m n) a kv·li tomu m·ºeme po£ítat nejlépe s lineární sloºitostí. Pro dal²í zrychlení je jiº nutno p°edzpracovat samotný text. To m·ºe zabrat více £asu a nebo pam¥ti neº samotné triviální prohledávání, ale p°edpokládáme, ºe takto p°edzpracovaný text si ponecháme a budeme s ním pracovat vícekrát. To u genomu z°ejm¥ platí. Jeden genom má smysluplnou platnost p°inejmen²ím b¥hem ºivota jeho fenotypu (jedince disponujícím daným genomem) a m·ºe mít smysl i mimo toto období (jak bylo nazna£eno v druhé kapitole). Po sekvenování daného genomu tedy m·ºe prob¥hnout ur£itý druh zpracování, jeº umoºní s genomem v budoucnu efektivn¥ pracovat a takováto p°edzpracovaná forma se uloºí do DNA databáze. Jak p°edzpracování textu m·ºe vypadat záleºí p°edev²ím na tom, co s textem budeme chtít d¥lat. Jestliºe nám jde jen o vyhledávání, budeme se snaºit vytvo°it jakousi strukturu, do níº p°edzpracovaný text uloºíme v n¥jaké form¥ tak, abychom pak v textu mohli rychle vyhledávat. Pro pot°eb¥ £astého porovnávání text· m·ºeme vytvo°it strukturu odli²nou. Pokud na strukturu klademe více poºadavk·, je vhodné ji navrhnout 3.4. 17 INDEXOVÁNÍ TEXTU 1 text c c a g ... t a c c indexovací algoritmus 2 délka n 3 indexovací struktura 4 vzor c a g ... t a c délka m vyhledávací algoritmus 5 výsledek hledání 6 Obrázek 3.4: Schéma indexování a vyhledávání dostate£n¥ obecn¥. Nicmén¥ jde o oscilaci mezi textem ve form¥ oby£ejného °et¥zce, jeº je zcela nejobecn¥j²í av²ak není optimalizovaný pro ºádnou konkrétní funkci a mezi strukturou, která slouºí jen a pouze danému ú£elu a není schopná spl¬ovat jiné poºadavky. Nap°íklad struktura velmi dob°e komprimovaného textu spl¬uje poºadavek efektivního ukládání, ale v¥t²inou není vhodná pro rychlé prohledávání. Praktickým p°íkladem indexování m·ºe být rejst°ík v knize. Ten obsahuje mnoho klí£ových slov se°azených podle abecedy a k nim £ísla stránek, kde se slovo v knize nachází. Bez takového rejst°íku by pro hledání vybraného slova bylo pot°eba projít celou knihu. S rejst°íkem sta£í jen rychle prohledat pár stránek a sko£it p°ímo na poºadované místo. Je jasné, ºe v tuto chvíli jsme se dostali pod mez lineární sloºitosti. A to za cenu tvorby a uchování datové struktury nesoucí informace o lokaci slov v textu. Indexování textu je tedy proces, p°i kterém je napln¥na konkrétní datová struktura informacemi o daném textu. Taková struktura pak vyºaduje pro svou existenci pam¥´ a její vytvo°ení má ur£itou asymptotickou sloºitost. Struktura pak umoº¬uje operovat nad p·vodním textem efektivn¥. Proces indexování a vyhledávání je nazna£en na obrázku 3.4. Indexovací struktura je vytvo°ena jednou a pouºívaná opakovan¥. Výhodou indexování je tedy získání schopnosti operovat nad daným textem efektivn¥, nevýhodou je pak nutnost takovou strukturu vytvo°it a vydrºovat. 3.4.1 Struktury pro indexování Indexováním p°evádíme informace o daném textu do ur£ité datové struktury. Jak taková datová struktura vypadá závisí na tom, co s informacemi chceme d¥lat. Ve vytvo°ené datové struktu°e budeme nap°íklad vyhledávat informace (metainformace), budeme je do ní vkládat a m·ºeme je chtít i aktualizovat. I v oblasti datových struktur pro indexování textu platí obecné pozorování, ºe £ím optimalizovan¥j²í na²e nástroje (struktura) mají být, tím bude jejich architektura sloºit¥j²í. V p°ípad¥, ºe do indexované struktury uloºíme 18 KAPITOLA 3. VYHLEDÁVÁNÍ V TEXTU A INDEXOVÁNÍ dostatek informací k tomu, aby z ní ²lo získat zp¥t p·vodní text T , je moºné vstup T dokon£ení indexace zahodit a indexovací strukturu pak nazveme self-indexing po (samo- indexující). 3.4.1.1 Sux Tree Základní datovou strukturou pro indexování textu je sux tree (strom p°ípon). Ten poprvé popsal v roce Peter Weiner v roce 1973 [49] a byl dále vylep²en v roce 1976 McCreightem. V roce 1995 Esto Ukkonen pak publikoval [46] lineární algoritmus jeho konstrukce. Sux tree je relativn¥ jednoduchá struktura uchovávající v²echny suxy daného textu T. Jde o strom (s ko°enem) kde kaºdý vnit°ní uzel stromu má alespo¬ dva po- |Σ|), T a z°et¥zení faktor· hran r ∈ Su(T ). V²echny cesty od ko°ene k list·m dávají dohromady v²echny suxy textu T . Aby bylo moºné uchovávat v sufx tree libovolný °et¥zec, je pot°eba T z°et¥zit se symbolem, který se v T nevyskytuje (b¥ºn¥ se pouºívá $). P°íklad sux tree pro text T = tgctac je na obrázku 3.5. Text T tomky (maximáln¥ kaºdá hrana obsahuje faktor textu sm¥rem od ko°ene k libovolnému listu dává °et¥zec byl roz²í°en o symbol `$', £ímº byl rozli²en sux c od prexu c suxu ctac. t ac$ c gctac$ 5 2 gctac$ ac$ 1 $ tac$ 6 4 Obrázek 3.5: Sux tree pro 3 T = tgctac Sux tree je vlastn¥ optimalizovaná verze trie [29] (patricia tree) ukládající v²echny suxy daného textu. Konstrukce sux tree je na první pohled jednoduchá. Do prázdného stromu vloºíme pod ko°en nový uzel a nad vzniklou hranu vloºíme celý text Poté vezmeme sux T o délce |T | − 1 (tedy T T. bez prvního písmene). Pokud od ko°ene neexistuje hrana, jeº za£íná stejným písmenem, vloºíme nový uzel a nad vzniklou hranu k n¥mu vedoucí vloºíme sux. Poté vytvo°íme dal²í sux délky do stromu. Takto postupujeme celkem |T | |T | − 2 a op¥t vloºíme krát. V p°ípad¥, ºe chceme vloºit sux, jehoº prex je jiº v n¥jaké hran¥ je obsaºen, vytvo°íme nový vnit°ní uzel, nad hranu mezi ním a jeho rodi£em vloºíme onen spole£ný prex dvou sux· a tento prex z obou sux· odstraníme. Poté vloºíme pod nov¥ vytvo°ený uzel dvojici nových uzl·, p°i£emº hrany k nim vedoucí obsahují zbylé suxy. Jednodu²eji °e£eno, slu£ujeme slu£itelné. P°esn¥j²í popis konstrukce sux tree lze nalézt v [29]. Triviální algoritmus vytvá°ení sux tree je intuitivní, ale velice neefektivní. Jeho asymptotická sloºitost je polynomiální. Nicmén¥ Ukkonen·v algoritmus konstrukce sux tree má sloºitost pouze O(|T |) a vyuºívá tak- zvaných sux link· (zrychlené vyhledávání krat²ích sux· p°i konstrukci). Pokud máme daný text T indexovaný jako sux tree, m·ºeme se dotazovat na výskyty libovolných vzork·. Za£neme od ko°ene sux tree a hledáme hranu vedoucí z ko°ene 3.4. 19 INDEXOVÁNÍ TEXTU takovou, která za£íná stejným symbolem jako za£íná vzorek. Postupn¥ porovnáme celý faktor hrany s prexem na²eho vzorku a pokud se shoduje, p°ejdeme do uzlu, do kterého hrana sm¥ruje a op¥t hledáme shodu n¥jakého následujícího faktoru se zbytkem vzorku. Takto postupujeme dokud bu¤ nenajdeme shodu se vzorkem (vzorek se nenachází v T) nebo vzorek p°e£teme celý. V druhém p°ípad¥ se m·ºeme na konci nacházet ve vnit°ním uzlu £i v listu sux tree. Pokud jsme ve vnit°ním uzlu, znamená to, ºe výskyt· vzorku je v textu T více. Pozice v²ech výskyt· pak nalezneme nap°íklad DFS (Depth First Search) pr·chodem podstromu, jemuº je uzel ve kterém jsme skon£ili ko°enem jako pozice za£átk· sux· (v²echny prexy v²ech sux· jsou v²emi faktory pod°et¥zci textu T ). Jestliºe jsme po dokon£ení £tení vzorku skon£ili v sux tree v listu, m·ºeme prohlásit, ºe hledaný vzorek se v textu nachází práv¥ jednou a je dokonce suxem T. Vyhledávání O(|VZOREK|) plus asymptotická |Σ|-árním stromem v p°ípad¥ hledání pozic v²ech výskyt· vzorku vzorku v sux tree má tedy asymptotickou sloºitost sloºitost DFS pr·chodu (Σ je abeceda textu T ). Sux tree obsahující skute£n¥ faktory indexovaného °et¥zce popsaný vý²e se nazývá nekomprimovaný. V praxi se vºdy pouºívá komprimovaný sux tree, jeº obsahuje místo faktor· indexovaného textu pouze adresu po£átku faktoru a jeho délku (tedy dv¥ £ísla) [14]. Zobecn¥ný sux tree [4] indexuje více °et¥zc· neº jeden. Princip je stále stejný, jen se u kaºdé relevantní informace ve strom¥ uvádí, ke kterému indexovanému °et¥zci informace pat°í. Zobecn¥ným sux tree se dají snadno hledat spole£né podposloupnosti a rozdíly. 3.4.1.2 Sux Array Sux array (pole p°ípon) se v mnoha ohledech podobá sux tree. Nejde v²ak o strukturu stromovou, ale strukturu lineární. Sux array je abecedn¥ se°azené pole sux· textu jejich po£áte£ních pozic v T a T . Z d·vodu optimalizace pam¥´ové náro£nosti se v²ak samotné suxy do sux array neukládají. Oby£ejné sux array tak obsahuje pouze pozice sux· v T se°azené podle abecedního po°adí sux·. Sux array pro text T = tgctac je zobrazeno v tabulce 3.1. Pozice v T Sux LCP 5 ac$ 0 6 c$ 0 3 ctac$ 1 2 gctac$ 0 4 tac$ 0 1 tgctac$ 1 Tabulka 3.1: Sux array pro T = tgctac Tvorba sux array triviálním algoritmem je op¥t velice jednoduchá. Postupn¥ bereme |T |, |T | − 1, |T | − 2, . . . 1 a p°idáváme je do pole (seznamu, tabulky) spolu s £íslem, udávající jejich za£átek v T . Poté výsledné pole abecedn¥ se°adíme podle sux·. Stejn¥ jako u sux tree se také i u sux array vstupní text T roz²i°uje o znak, který v T suxy T délky není (oby£ejn¥ se op¥t volí $). P°i °azení je znak `$' vºdy men²í neº jakýkoliv jiný znak 20 KAPITOLA 3. VYHLEDÁVÁNÍ V TEXTU A INDEXOVÁNÍ z abecedy. Do sux array m·ºeme po se°azení je²t¥ p°idat ke kaºdému suxu £íslo LCP, udávající nejdel²í spole£ný prex se suxem p°edchozím. To optimalizuje vyhledávání. Prakticky není pot°eba sux array skute£n¥ uchovávat tak, jak je tomu v tabulce 3.1. T v po°adí odpovídající {5, 6, 3, 2, 4, 1}. P°ipojíme- Zcela sta£í vytvo°it posloupnost £ísel ozna£ující po£átky sux· v se°azeným sux·m. Nap°íklad pro T = tgctac je sux array li v²ak k sux array informaci o LCP, získáme takzvané Enhanced sux array (ESA). K ESA se pak je²t¥ p°ipojují dal²í pot°ebné informace ke kaºdému suxu. Vyhledávání vzork· v sux array probíhá podobn¥ jako v sux tree. Binárním p·lením a porovnávání vzorku a sux· postupn¥ bu¤ p°e£teme celý vzorek a získáme mnoºinu sux· jejichº prex je shodný s hledaným vzorkem nebo v pr·b¥hu hledání nenalezneme ºádnou shodu a prohlásíme, ºe vzorek se v textu nenachází. Asymptotická sloºitost vyhledávání v sux array je op¥t p°ímo úm¥rná k velikosti vzorku. Ze sux array dopln¥ného o LCP informace lze snadno (v lineárním £ase) vytvo°it sux tree [10]. 3.4.1.3 Suxový automat Suxový automat je minimální deterministický kone£ný automat p°ijímající v²echny suxy textu T. Je známý také pod názvem DAWG (Directed Acyclic Word Graph). P°i pouºití suxového automatu jako indexovací struktury získáme podobné vlastnosti jako v p°ípad¥ sux tree a sux array. Konstrukci sux automatu m·ºeme provést nap°íklad slou£ením n automat· p°ijímajících v²ech n sux· textu T, coº je ale velice pomalý postup. Existují algoritmy pro efektivní konstrukci suxového automatu v lineárním £ase b¥hem £tení textu T [8]. Máme-li tedy p°ipravený suxový automat a chceme-li jej vyuºít jako indexovací strukturu, sta£í vzorek automatu p°edhodit a poté se podívat v jakém stavu automat skon£il. Pokud je v koncovém stavu, daný vzorek je suxem, pokud je v garbage stavu, daný vzorek se v textu nenachází a pokud je v nekoncovém stavu, vzorek je faktorem textu T (nachází se v vyhledávání vzorku ur£it jeho pozici v T ). íslování stav· pak umoº¬uje p°i T. Suxový automat má kaºdý sv·j p°echod pro práv¥ jeden symbol. Roz²í°íme-li tento koncept tak, ºe automat p°echází na °et¥zec, získáme kompaktní suxový automat [8] (Compact Directed Acyclic Word Graph, CDAWG), coº je vlastn¥ minimalizovaný sux tree. 3.5 Porovnání indexovacích struktur Indexovací struktury lze hodnotit pomocí mnoha kritérií. Nejzásadn¥j²í kritéria jsou jednozna£n¥ asymptotická sloºitost algoritm· tvorby dané datové struktury z textu T, pam¥´ová náro£nost samotné struktury a asymptotická sloºitost operací jako je t°eba p°esné vyhledávání. Dal²ími kritérii m·ºe být celková jednoduchost principu a p°ípadné implementace, roz²i°itelnost struktury £i odolnost proti po²kození nebo moºnosti komprese. Asymptotickou sloºitost tvorby sux tree se postupn¥ da°ilo sniºovat aº na lineární úrove¬ O(n) (n je délka textu). Také se poda°ilo navrhnout algoritmy pro on-line kon- strukci sux tree [46]. Problémem sux strom· je v²ak pam¥´. Ta je sice asymptoticky 3.5. 21 POROVNÁNÍ INDEXOVACÍCH STRUKTUR lineární O(n), ale protoºe kaºdý uzel musí vydrºovat mnoho informace, je skrytá kon- stanta pam¥´ové sloºitosti kolem deseti aº dvaceti u kvalitních implementací. Kdyº tedy pouºijeme text o velikosti 3 gigabajty (t°eba lidský genom), jeho sux tree m·ºe zabírat desítky gigabajt·. Asymptotická sloºitost vyhledávání je daná velikostí vzorku O(m). Sux tree má mnoho praktických vyuºití. Krom¥ p°esného vyhledávání pod°et¥zc· lze snadno vyhledávat regulární výrazy, provád¥t p°ibliºné vyhledávání, vyhledávat nejdel²í spole£né pod°et¥zce, nejdel²í opakované °et¥zce, nejdel²í palindromy a dal²í. Lze také vyhledávat repetice pod°et¥zc· v T a tím hledat redundanci, £ehoº se vyuºívá v kompresi. Sux tree se vyuºívá v n¥kolika kompresních algoritmech jako nap°íklad LZW. Sux tree v r·zných modikovaných podobách se také vyuºívá ve vyhledáva£ích webových stránek. Sux array má podobné vlastnosti jako sux tree. Asymptotická sloºitost tvorby T délky n triviálním algoritmem je daná pot°ebou se°adit n. Velmi kvalitní °adící algoritmy mají asymptotickou sloºi- sux array z daného textu n sux· délky maximáln¥ tost n O(n · log n) (nap°íklad merge sort nebo quick sort). Porovnání dvou °et¥zc· délky Θ(n) a tedy triviální tvorba sux array má sloºitost O(n2 · log n). Ex- zjevn¥ zabírá istují v²ak algoritmy pro konstrukci sux array v lineárním £ase [30, 25]. Ty mají v²ak p°íli² vysokou skrytou konstantu a prakticky se pouºívají algoritmy s asymptotickou sloºitostí O(n · log n). Pam¥´ová náro£nost sux array je stejn¥ jako u sux tree op¥t lineární se skrytou konstantou. Ta je v²ak o n¥co (p°ibliºn¥ £ty°ikrát) niº²í a obecn¥ se uznává sux array jako mén¥ pam¥´ov¥ náro£ná indexovací struktura. Asymptotická T délky n pomocí sux array je daná velikostí vzorku a algoritmem binárního p·lení O(m · log2 n). Sux array lze optimalizovat pomocí LCP a tím sloºitost klesne na O(m + log2 n). Ze sux array sloºitost vyhledávání v²ech výskyt· vzorku délky m v textu s pouºitím LCP (nejdel²í spole£ný prex) lze snadno postavit sux tree. Sux array se snadno komprimuje, protoºe jde o jednoduchou lineární strukturu obsahující bu¤ pouze sekvenci £ísel, nebo dvojice £i trojice £ísel (po£átek suxu v Suxový automat (DAWG) lze op¥t vytvo°it z textu s pam¥´ovou náro£ností O(n) T T, délky LCP, délka suxu). n v lineárním £ase O(n) [8]. Skryté konstanty pam¥´ové náro£nosti lze redukovat p°ibliºn¥ na polovinu pouºitím kompaktního suxového automatu (Compact Directed Acyclic Word Graph, CDAWG), jeº podobn¥ jako trie versus patricia tree odstra¬uje nepot°ebné stavy a hrany a vyuºívá p°echod· ne po symbolech, ale po faktorech. Vyhledávání vzorku délky m pak trvá Θ(m). Díky minimalizaci má automat oproti sux tree mnohem mén¥ stav· odstran¥ním redundantních sux·. Odstran¥ním t¥chto redundancí v²ak p°icházíme o informaci, jakým zp·sobem (cestou) jsme se do stavu dostali. Postavíme-li tedy sux tree (ST), sux array (SA) a suxový automat (DAWG) vedle sebe a pokusíme se je porovnat, dojdeme k následujícím záv¥r·m. Rychlost indexování textu T do ST £i DAWG je lineární v·£i délce T a dá se provád¥t on-line. Rychlost in- dexování do SA je sice také lineární, ale prakticky spí²e se sloºitostí O(n · log n). P°esné vyhledávání je ve v²ech p°ípadech lineární v·£i délce vzorku coº je optimální asymptotická sloºitost. Zásadní rozdíl je v pam¥´ové náro£nosti. Ta je sice ve v²ech p°ípadech také lineární, ale významn¥ se li²í skrytými konstantami. Nejmén¥ pam¥´ov¥ náro£ná struktura je sux array, nejvíce pak sux tree. S optimalizací pam¥´ové náro£nosti se v²ak samoz°ejm¥ vytrácí n¥které informace. Sux tree je nejvíce redundantní struktura, av²ak má nejv¥t²í ²kálu moºných aplikací. Rozdíly mezi jednotlivými indexovacími p°ístupy a strukturami se v²ak ztrácí se snahou je optimalizovat na hranice moºností. 22 KAPITOLA 3. VYHLEDÁVÁNÍ V TEXTU A INDEXOVÁNÍ Kapitola 4 Efektivní indexování DNA V p°edchozích kapitolách jsme pro²li základy genetiky, vyhledávání v textu a indexování. Nyní se tedy m·ºeme zam¥°it konkrétn¥ na indexování DNA. Jak jsme se p°esv¥d£ili, klasické vyhledávací algoritmy se v oblasti genom· p°íli² neuplatní kv·li lineární hranici asymptotické sloºitosti v·£i délce textu (genomu). Tuto hranici bo°í indexování textu pomocí p°edzpracování do r·zných datových struktur. Uvedeny byly nejzákladn¥j²í indexovací struktury sux tree, sux array a suxový automat (DAWG). Krom¥ uvedených samoz°ejm¥ existuje mnoºství r·zných dal²ích indexovacích struktur jako nap°íklad invertovaný index [52], sux kaktusy [23], suxové binární vyhledávací stromy [21], prex index, string B-tree [11], q-gramy [44], wavelet tree £i FM-index [12]. Pro indexování biologických dat vznikly také specializované indexovací techniky. P°edstavení moºných indexovacích technik biologických dat (p°edev²ím DNA) bude v této kapitole následováno vybráním t¥ch nejefektivn¥j²ích z nich. 4.1 Pam¥´ové nároky naivní implementace Abychom se nepou²t¥li do zbyte£né optimalizace, ov¥°íme si nejprve její pot°ebu. Aplikujeme teoreticky sux tree, sux array a suxový automat (DAWG) na lidský genom. Jak bylo zmín¥no v p°edchozí kapitole, prvním problémem indexování je pam¥´. Doba konstrukce indexovací struktury je pak problémem druhým. Zam¥°me se tedy na p°esn¥j²í ur£ení pam¥´ové náro£nosti sux tree. Sux tree je datová indexovací struktura sloºená z uzl· a hran (respektive jejich datových struktur). Místo reprezentace hran samostatnými datovými strukturami je m·ºeme implementovat jako ukazatele (reference na jiné uzly) uvnit° datových struktur reprezentující uzly. Víme, ºe sux tree má stejn¥ list· 1 , jako je sux· textu T, jichº je p°esn¥ |T |, tedy n. Kaºdý uzel zabírá sám o sob¥ n¥jakou pam¥´. Velmi minimalistická struktura uzlu obsahuje pouze sux link (ukazatel na jiný uzel), pole nebo seznam ukazatel· na potomky (o velikosti maximáln¥ rovné arit¥ stromu, která je daná velikostí abecedy) a £íslo udávající po£átek suxu v textu T. T (index). Abychom mohli referovat ze sux tree do textu T, musíme mít také Tedy celkem se dá pam¥´ová asymptotická sloºitost indexování textu pomocí sux 1 Platí v p°ípad¥ pouºití terminálního symbolu roz²i°ujícího p·vodní text T , jako nap°íklad `$'. Bez pouºití terminálního symbolu je po£et list· ≤ n. 23 24 KAPITOLA 4. EFEKTIVNÍ INDEXOVÁNÍ DNA tree základním neoptimalizovaným zp·sobem vyjád°it jako O(n · log2 |Σ| + ( |Σ| · n − 1 ) · α). |Σ| − 1 První polovina výrazu je pam¥´ová náro£nost uloºení textu kde Σ bolu z je abeceda textu T. T T o délce n. Pomocí log2 |Σ|, zjistíme nejmen²í moºný po£et bit· pro uloºení jednoho sym- Pro uloºení textu T délky n tedy budeme pot°ebovat n · log2 |Σ| polovina výrazu udává pam¥´ovou náro£nost uloºení sux tree. Konstanta bit·. Druhá α |Σ|·n−1 |Σ|−1 je po£et v²ech uzl· úplného k·n−1 list·. (úplný k -nární strom o n listech má k−1 uzl·). likost struktury jednoho uzlu v bitech a udává ve- |Σ|-árního n α je daná jako (|Σ| + 1) · β + log2 n. |Σ| je po£et ukazatel· vedoucí na potomky (|Σ|-ární strom) plus jeden sux link. β udává velikost ukazatele na strukturu uzlu a log2 n je minimální po£et bit· pot°ebný pro adresaci v T délky n. Dosadíme-li tedy za β experimentáln¥ 9 ov¥°enou hodnotu 24 bit· a za n dosadíme 3, 2 · 10 pár· nukleotických bází lidského genomu a za Σ dosadíme {a, c, g, t}, vyjde nám nejmen²í moºná velikost indexovaného sux tree mající lidského genomu p°ibliºn¥ 60 GB. Nyní se pokusíme ur£it pam¥´ovou náro£nost sux array. Ta je jednodu²²í. Op¥t je sloºena ze dvou £ástí referovaného textu T a samotné struktury. Pokud budeme uvaºovat velmi primitivní sux array obsahující pouze pozice sux· v abecedního po°adí získáme sloºitost pam¥´ové nároky uloºení textu T O(log2 |Σ| · n + n · log2 n). se°azené podle První polovina udává a druhá polovina je pam¥´ová náro£nost uloºení celkem n sux·, které jsou uloºené pouze jako pozice jejich za£átk· v v T délky T T (indexy). Pro adresaci n pot°ebujeme log2 n bit·, takºe pro adresy v²ech n sux· pot°ebujeme n·log2 n n a Σ jako v p°edchozím p°ípad¥, získáme pam¥´ovou náro£nost bit·. Dosadíme-li op¥t za velmi triviálního sux array p°ibliºn¥ 12 GB. P°i dopln¥ní struktury o LCP (longest common prex) a dal²í vhodné informace pam¥´ová náro£nost n¥kolikrát vzroste. Nakonec ur£íme je²t¥ pam¥´ovou náro£nost základní varianty suxového automatu (DAWG). Situaci si výrazn¥ uleh£íme nereálnou podmínkou po£tu stav· DAWG. Nejmen²í moºný po£et stav· DAWG je roven n a ten budeme uvaºovat. DAWG musí mít T ), nicmén¥ velikost abecedy abecedy |{a, c, g, t}| je nemoºné, aby alespo¬ páte° tvo°enou nejdel²ím suxem (celým º¬uje, aby bylo stav· práv¥ n. P°i velikosti neumonedo²lo k nutnosti vytvo°ení nových stav· mimo páte° kv·li zaji²t¥ní deterministi£nosti DAWG. Pam¥´ová náro£nost DAWG m·ºe být Ω(n · β), kde β je pam¥´ová náro£nost jednoho uzlu sux automatu. Uzel obsahuje ukazatele na následovníky a ke kaºdému z t¥chto ukazatel· také symbol, p°i kterém k p°echodu dojde. Díky ukládání symbol· p°ímo do DAWG není pot°eba p·vodního textu T. Dosadíme-li v p°edchozích odstavcích pouºité hodnoty do uvedeného výrazu, dostaneme pam¥´ovou náro£nost p°ibliºn¥ 30 GB. 4.1.1 Shrnutí Pouºití naivních implementací datových indexovacích struktur pro indexování velmi velkých text· jako je nap°íklad kompletní lidský genom klade p°íli² vysoké pam¥´ové nároky. Ze zkoumání pam¥´ových sloºitostí plynou dva záv¥ry. Zaprvé, indexování velmi velkých text· jiº nelze provád¥t v hlavní pam¥ti (uvaºujeme-li po£íta£ové zpracování). Kapacita dne²ních opera£ních pam¥tí je v °ádu jednotek gigabajt· u osobních po£íta£·, desítek gigabajt· u server· a stovek aº tisíc· gigabajt· u superpo£íta£· (clustery 4.2. 25 SUFFIX STROMY NA DISKU A EENÍ I/O a podobn¥). Takzvané in-memory indexování lze provád¥t jen pro malé vstupy. Pro vstupy (texty) v¥t²í je pot°eba pouºít principu on-disk, p°i kterém je indexovací struktura trvale uloºena na pevném disku. Princip on-disk je nutno také pouºít v p°ípad¥, ºe se do opera£ní pam¥ti nevejde ani samotný vstup. Uloºení indexovacích struktur a vstup· na disk, tedy úloºi²t¥ s °ádov¥ hor²í p°ístupovou dobou, si automaticky vynucuje pouºití postup· zohled¬ující skryté pam¥ti (cache) a prostorovou lokalitu dat. Druhým poznatkem je pot°eba optimalizovat indexovací struktury a dobu jejich tvorby (po£et I/O operací). Rozhodn¥ je pot°eba sníºit pam¥´ové nároky bu¤ zavedením komprese [16] nebo efektivn¥j²í architekturou indexovacích struktur a zavedením efektivního postupu indexování. 4.2 Sux stromy na disku a °e²ení I/O 4.2.1 TDD, 2004 Klasický Ukkonen·v algoritmus konstrukce sux tree [46] má asymptotickou sloºitost O(n), kde n je velikost indexovaného textu. Tento algoritmus má ale zásadní problém p°i velkých vstupech. Implicitn¥ p°edpokládá, ºe pro konstrukci bude k dispozici dostate£né mnoºství pam¥ti. Spí²e neº praktickým algoritmem je tak d·kazem existence optimálního algoritmu konstrukce sux tree. V roce 2004 se pokusili Sandeep Tata, Richard Hankins a Jignesh Patel vytvo°it disk-based techniku konstrukce sux tree [45] zam¥°ující se na efektivní vyuºití I/O operací a skrytých pam¥tí tak, aby bylo moºné indexovat velmi velké vstupy. Kapacity dne²ních disk· jsou b¥ºn¥ stovky gigabajt· aº jednotky terabajt· u osobních po£íta£· a desítky terabajt· u st°edn¥ velkých diskových polí server·. To umoº¬uje bezproblémové ukládání indexovacích struktur velkých text·. Dá se také p°edpokládat, ºe kaºdá smysluplná databáze biologických dat je uloºena bezpe£n¥ na pevném disku. Takzvaným úzkým hrdlem je v²ak doba náhodného p°ístupu na disk. Naivní implementace sux tree p°i vytvá°ení i následném vyhledávání generuje velké mnoºství £tení p·vodního textu na zcela nesouvisejících, prakticky náhodných, adresách (pozicích). P°i efektivn¥j²ím vyuºití diskových vyrovnávacích pam¥tí a skrytých pam¥tí v hierarchii pam¥tí lze dosáhnout signikantn¥ lep²ího výkonu algoritm·. TDD (Top Down Disk-based) technika má asymptotickou sloºitost O(n2 ), nicmén¥ díky efektivnímu vyuºití pam¥´ových operací prakticky p°ekonává asymptoticky lep²í Ukkonen·v algoritmus a to dokonce i v p°ípad¥ in-memory konstrukce (bez odkládání struktur na disk). Ten totiº sice díky sux link·m (odkaz·m na krat²í suxy uvnit° stromu) lze provést v O(n), ale práv¥ ony sux linky zp·sobují mnoºství náhodných p°ístup· do jiº vytvo°eného stromu a indexovaného textu a tím algoritmus v praxi velmi zpomalují. P°ed p°edstavením TDD bylo vytvo°eno n¥kolik algoritm· zeefekt¬ující Ukkonen·v algoritmus práv¥ lep²ím pouºitím pam¥ti [20, 3], bu¤ odstran¥ním sux link·, lep²ím vyuºitím vyrovnávacích pam¥tí, líné konstrukce (£ásti stromu jsou konstruovány p°i prvních poºadavcích) £i konstrukce podle prex·. TDD se skládá z konstruk£ního algoritmu PWOTD (Partition and Write Only Top Down) a správy vyrovnávacích pam¥tí. Samotný sux tree je reprezentován lineárním polem [14], kde jeden indexovaný symbol obsazuje p°ibliºn¥ 8,5 bajtu. Algoritmus PWOTD má dv¥ fáze. V první rozd¥lí vstupní text na oblasti podle prex· a v druhé 26 KAPITOLA 4. EFEKTIVNÍ INDEXOVÁNÍ DNA Obrázek 4.1: Doba výkonu TDD a Ukkonen a zobrazení cache-misses fázi tyto oblasti vloºí do sux tree. Rozd¥lení vstupního textu na oblasti umoº¬uje konstruovat nezávislé podstromy v pam¥ti. Algoritmus PWOTD je zaloºen na algoritmu wotdeager [14]. Základní trik TDD je zám¥na náhodného p°ístupu k sux tree za náhodný p°ístup ke vstupnímu textu. Ukkonen·v algoritmus tomu £iní obrácen¥. Vstupní text zpracovává sekven£n¥ a k vytvá°enému sux tree p°istupuje náhodn¥. Tato zám¥na se m·ºe zdát zbyte£ná, ale po p°ihlédnutí k pom¥ru pam¥´ovým nárok·m sux tree a vstupního textu je od·vodn¥ní jasné. Sux tree je °ádov¥ pam¥´ov¥ náro£n¥j²í neº samotný vstupní text a tedy náhodný p°ístup k textu není tak velkým omezením jako pot°eba náhodného p°ístupu k budovanému sux tree. Efektivní vyuºití prostorové lokality TDD se uplatní nejen v p°ípad¥ diskových operací, ale i v p°ípad¥ £ist¥ in-memory konstrukce, díky procesorovým skrytým pam¥tím. TDD významn¥ omezuje cache-misses (obrázek 4.1, p°evzato z [45]) a je tak schopen p°ekonat asymptoticky lep²í Ukkonen·v algoritmus. Jednou slabinou TDD je v²ak velikost abecedy. Pro malé abecedy TDD provádí výpo£ty podstrom·, které Ukkonen·v algoritmus p°eskakuje. I pro DNA abecedu je v²ak TDD p°ibliºn¥ dvakrát aº t°ikrát rychlej²í (obrázek 4.1, unif4 a dmelano), nicmén¥ pro abecedy v¥t²í (|A| = 40) jiº TDD vykazuje p°ibliºn¥ desetkrát niº²í £as neº Ukkonen. Dal²í podstatnou nevýhodou TDD je absence sux link·, které n¥které algoritmy pro práci se sux stromy vyºadují [38]. TDD byla první technika schopná indexovat kompletní lidský genom na jednoprocesorovém po£íta£i za mén¥ neº 30 hodin. 4.2.2 dmsux Pokus· o optimalizaci konstrukce sux tree se od sedmdesátých let objevilo mnoho a n¥které z nich byly zaloºené na paralelním zpracování. Jeden z takových pokus· je algoritmus dmsux jeº vychází z TDD techniky. Auto°i TDD ve svém £lánku navrhli moºnost paralelizace TDD, která je moºná díky rozd¥lení textu na nezávislé oddíly podle 4.2. 27 SUFFIX STROMY NA DISKU A EENÍ I/O Sux Tree Construction [9]. Jejich práce v²ak skon£ila neúsp¥chem. Bez dostupné implemenprex·. Tohoto návrhu se ujali Arthur Dardia a Suzanne Matthews v práci nazvané tace TDD, porovnáním se siln¥ optimalizovaným Ukkonenovým algoritmem v jazyce C, bez kvalitní správy vyrovnávacích pam¥tí a pouºitím jazyka C++ se autor·m dmsux nepoda°ilo naimplementovat dostate£n¥ kvalitn¥ na to, aby jej bylo moºné s Ukkonenem a TDD smyslupln¥ porovnat. 4.2.3 STTD64, 2007 Halachev, Shiri a Thamildurai publikovali v roce 2007 [17] zp·sob uloºení sux tree nazvaný STTD64, p°i£emº se zam¥°ili nejenom na rozumnou dobu konstrukce a pouºitelné pam¥´ové nároky, ale i na sloºitost vyhledávání. Vycházeli z implementace sux tree tak jak ji navrhl Giegerich, Kurtz a Stoye v roce 1999 [14], kterou ozna£ili jako STTD32 (Sux Tree, Top Down, 32 bit·). Ta v nejhor²ím p°ípad¥ vyºaduje pro jeden symbol vstupního textu dvanáct bajt· v sux tree, v pr·m¥ru v²ak osm a p·l bajtu. STTD32 má omezení na velikost vstupního textu jeden gigabajt. Uzly STTD32 mají 32 bit·, p°i£emº 2 bity jsou pouºity na orientaci ve strom¥. To nechává pouze 30 bit· na adresaci do textu, který m·ºe být tedy maximáln¥ jeden gigabajt velký. Toto omezení obchází technika TDD tvorbou speciálních bitmap obsahující práv¥ ty dva kontrolní bity pro kaºdý uzel. Tím uvol¬uje plných 32 bit· pro kaºdý uzel stromu a umoº¬uje adresaci aº £ty° gigabajt· vstupního textu (velikost lidského genomu je p°ibliºn¥ 3 GB a mén¥ p°i efektivn¥j²ím zp·sobu ukládání). Nicmén¥ zavedením dodate£ných datových struktur (bitových map) se zvy²uje I/O vytíºení a tím se sniºuje výkon algoritmu konstrukce a vyhledávání. STTD64 °e²í tento gigabajtový problém zavedením 64 bit· místo 32 bit·. Uvol¬uje tak 32 bit· pro adresaci, 2 bity pro orientaci a zbývajících 30 bit· pro adresaci prvního potomka v p°ípad¥ vnit°ních uzl· stromu a pro zaznamenávání hloubky v p°ípad¥ listu. Pouºitím 64 bit· pro kaºdý uzel sux tree se znateln¥ zvy²uje pam¥´ová náro£nost. Navíc pro napln¥ní list· informace o jejich hloubce je pot°eba provést dal²í pr·chod v £ase O(n). Uchovávání hloubky list· v²ak zlep²uje výkon vyhledávání, protoºe poté je £tení z disku pro kaºdou shodu sekven£ní. Nepouºitím speciálních bitmap jako v p°ípad¥ TDD se výkon STTD64 zvy²uje. Podle m¥°ení v [17] je STTD64 vhodné pro st°edn¥ velké a velké vstupní texty (gigabajt a více). STTD64 vykazuje velmi dobré výsledky p°i vyhledávání, £asu indexování i pam¥´ové náro£nosti a dá se pouºít i pro velmi velké vstupy. 4.2.4 TRELLIS, 2007 Trellis je disk-based indexovací algoritmus, který popsali v roce 2007 Benjarath a Zaki [38]. Je zam¥°ený p°edev²ím na indexování velkých vstup·, konkrétn¥ DNA. Asymptotická sloºitost konstrukce je O(n2 ) a pam¥´ová náro£nost je O(n). Algoritmus zohled¬uje charakteristiku DNA vstupu, jeº má nerovnom¥rné rozloºení. P°i d¥lení podle prex· tak jak tomu £iní TDD se tak snadno m·ºe stát, ºe n¥které podstromy prex· m·ºou být ne£ekan¥ velké. Trellis se skládá ze £ty° fází. V první fázi sestavuje prexy, aby se p°ede²lo nerovnom¥rnému vytíºení pam¥ti p°i tvorb¥ podstrom·. Ve druhé fázi vytvá°í oddíly textu podobn¥ jako TDD a vytvá°í podstromy pomocí klasického in-memory 28 KAPITOLA 4. EFEKTIVNÍ INDEXOVÁNÍ DNA Ukkonenova lineárního algoritmu. Ve t°etí fázi tyto podstromy spojuje dohromady. Tato fáze má jako jediná asymptotickou sloºitost O(n2 ). Ve £tvrté fázi se vypo£ítají sux linky, p°i£emº tato fáze není povinná. V porovnání Trellis s TDD v [38] vít¥zí jasn¥ Trellis dobou konstrukce, ale vykazuje lehce vy²²í pam¥´ové nároky coº je zp·sobeno kompresními technikami TDD. Podstatn¥ rychlej²í je Trellis i p°i dotazování práv¥ díky sux link·m. V roce 2008 pak auto°i TRELLIS publikovali vylep²enou verzi algoritmu nazvaný TRELLIS+ [39], který je postaven na stejných principech jako p·vodní verze, ale sniºuje po£et oddíl· textu p°i tvorb¥ sux tree, £ímº sniºuje po£et vytvo°ených podstrom·, které se poté musí spojit. Protoºe fáze spojování podstrom· je asymptoticky nejhor²í v algoritmu TRELLIS, omezení po£tu do tohoto algoritmu vstupujících podstrom· zvy²uje výkon celého algoritmu. 4.2.5 DiGeST, 2008 Algoritmus DiGeST (Disk-based Genomic Sux Tree) navrºený v roce 2008 autory Barsky, Stege, Thomo a Upton [1] se zam¥°uje na tvorbu sux tree pro velmi velké DNA sekvence. V p°ípad¥ porovnávání více genom· je praktické je indexovat do jednoho sux tree (zobecn¥ného sux tree), £ímº se odhalí shodné a unikátní £ásti. Indexování více genom· najednou v²ak implikuje velikost vstupu p°esahující £ty°i gigabajty (záleºí na typu uloºení genomu a velikosti genomu v párech nukleotických bází), coº algoritmy jako TDD £i TRELLIS nezvládají (z£ásti kv·li 32 bitovému adresování). Auto°i DiGeST se rozhodli neroz²i°ovat TDD £i TRELLIS o moºnost indexovat v¥t²í vstupy, protoºe pro velmi velké vstupy by tyto algoritmy nemuseli být dostate£n¥ výkonné. P°edev²ím proto, ºe vykonávají p°íli² mnoho náhodných I/O £tení. V p°ípad¥ TDD jsou to £astá náhodná £tení vstupu a p°ípad¥ TRELLIS jsou to náhodná £tení sux tree p°i dereferenci sux link·. Algoritmus DiGeST má t°i fáze. V první je vstup (vstupy) rozd¥len na stejn¥ velké soubory o velikosti k a symboly DNA abecedy jsou kódovány dv¥ma bity. Ve druhé fázi jsou nad soubory vystav¥ny sux array (tedy suxy °et¥zc· v souborech jsou se°azeny). Ve t°etí fázi je na základ¥ t¥chto sux arrays sestaven sux tree postupným slu£ováním. DiGeST díky rozd¥lení vstupu na men²í soubory dokáºe indexovat prakticky velmi velké vstupy (p°ibliºn¥ jeden aº osm gigabajt·). Doba b¥hu konstrukce je díky zp·sobu vyuºití I/O operací také velmi dobrá a pro vstupy v¥t²í neº jeden gigabajt p°ekonává TRELLIS+. DiGeST £te vºdy sekven£n¥ a co lze £te pouze jednou jedinkrát a stejn¥ tak i zapisuje. Dle m¥°ení v [1] DiGeST zvládne indexovat kompletní lidský genom za jeden a p·l hodiny. 4.2.6 B ST, 2009 2 Stejný tým, který publikoval algoritmus DiGeST, publikoval v roce 2009 nový algoritmus nazvaný B 2 ST [2]. Cílem bylo je²t¥ sníºit náhodné p°ístupy do vstupního textu a zobecnit algoritmus tak, aby byl schopen indexovat vstupy, které se nevejdou do hlavní pam¥ti. Základní my²lenkou B 2 ST je op¥t stejn¥ jako v p°ípad¥ DiGeST budování sux tree ze sux array dopln¥ného o LCP informace. 4.3. 29 EENÍ PAM OVÉ NÁRONOSTI INDEXOVACÍCH STRUKTUR B 2 ST algoritmus má t°i fáze. V první rozd¥lí vstup na £ásti, které lze na£íst do pam¥ti. Ve druhé £ásti se°adí suxy v kaºdé £ásti zvlá²´ a ve t°etí fázi z nich postupn¥ postaví výsledný sux tree. Asymptotická sloºitost konstrukce je lineární. Podle experimentálních výsledk· v [2] zvládá B 2 ST indexovat kompletní lidský genom b¥hem t°í hodin. Velmi zajímavým výsledkem je schopnost indexovat velmi velké vstupy. B¥hem testování byl indexováno 12 gigabajt· reálných DNA sekvencí do jednoho sux tree, coº trvalo p°ibliºn¥ 25 hodin, p°i£emº dostupná opera£ní pam¥´ byla omezena na dva gigabajty. Výsledný sux tree uloºený na disku zabíral p°ibliºn¥ 250 gigabajt·. P°i pouºití £ty° gigabajt· opera£ní pam¥ti a jednoho terabajtu diskového prostoru je B 2 ST schopný indexovat p°ibliºn¥ 60 gigabajt· (!) vstupních DNA dat do jednoho sux tree. 4.2.7 String B-tree Po£et I/O lze omezit také vyuºitím string b-tree [11], který se zvlá²t¥ hodí pro externí datové úloºi²t¥ (disk). Jde o kombinaci klasického B-tree a patricia tree (sux tree). 4.3 e²ení pam¥´ové náro£nosti indexovacích struktur Jak uº jsme zjistili, indexování je velmi náro£né na dostupnou pam¥´. V p°ípad¥ v¥t²ích vstup· uº nedosta£uje opera£ní pam¥´ a je nutno pouºít on-disk p°ístup. S tím vzroste doba operací s indexovanou strukturou (vytvá°ení, vyhledávání) kv·li nadm¥rnému a náhodnému £tení z pomalé externí pam¥ti. Vý²e uvedené algoritmy °e²í tento problém efektivním °ízením £tení a zápis· s ohledem na skryté pam¥ti a celkovou hierarchii pam¥tí. Umoº¬ují nám tak indexovat velké vstupy v rozumném £ase. Nicmén¥, v p°ípad¥ je²t¥ v¥t²ích vstup· nám brzy p°estane sta£it i externí pam¥´. P°i indexování 12 GB dat pomocí state of the art algoritmu B 2 ST bylo obsazeno výsledným sux stromem p°i- bliºn¥ 250 GB. Velikost vstupu 12 GB odpovídá p°ibliºn¥ £ty°em kompletním lidským genom·m. Uváºíme-li pot°ebu indexovat genomy v¥t²ího mnoºství lidí, nap°íklad deseti milión·, dostaneme se velice rychle mimo dostupnou kapacitu pam¥tí. V roce 1989 navrhl Jacobson [22] datovou strukturu succinct. Tato datová struktura je obecná a lze ji pouºít pro ukládání vektor·, strom·, graf· a dal²ích jiných struktur. Succinct se vyzna£uje pam¥´ovou náro£ností, která je velmi blízko teoretickému minimu pot°ebné pam¥ti pro uloºení dané informace. Na rozdíl od kompresních algoritm· je v²ak moºné succinct strukturu pouºívat bez nutnosti dekomprese. V pracích zabývající se komprimovanými datovými strukturami se n¥kdy succinct pouºívá jako horní mez pam¥´ové náro£nosti. Komprimovanou datovou strukturou se pak rozumí taková datová struktura, která umoº¬uje provád¥t pot°ebné operace v p°ibliºn¥ stejném £ase jako její nekomprimovaný ekvivalent, ale na rozdíl od n¥j zabírá signikantn¥ mén¥ pam¥ti. P°ipome¬me si pam¥´ovou náro£nost sux array a sux tree. Ob¥ datové indexovací n sux· textu T délky n. Pro adresaci po£átku suxu v T je pot°eba adresa o minimální velikosti log2 n bit·. Celkem sux tree i sux array uchovává n sux· pomocí adres o velikosti log2 n bit·, tedy dohromady O(n · log2 n) bit·. Pro uchování samotného textu v²ak sta£í pouze O(n · log2 |Σ|) bit·. Indexovací struktura je struktury uchovávají celkem pam¥´ov¥ podstatn¥ náro£n¥j²í neº samotný text, který se navíc dá komprimovat jako n · Hk (T ) bit· (kde Hk (T ) je empirická entropie textu T k-tého °ádu). 30 KAPITOLA 4. Prolomení pam¥´ové hranice indexu EFEKTIVNÍ INDEXOVÁNÍ DNA O(n · log2 n) rozebíral Kärkkäinen [24]. Pouºil Lempel-Ziv kompresi k vytvo°ení indexu s pam¥´ovou náro£ností o(n · log2 |Σ|) O(n · Hk (T )) + bit·. as vyhledávání se v²ak zm¥nil z lineárního na kvadratický. Dal²í práce se pak v¥novaly zrychlení vyhledávání. 4.3.1 Compressed sux array Komprimované pole p°ípon (CSA) p°edstavené v roce 2000 Grossim a Vitterem [16] je se svojí pam¥´ovou náro£ností nejenom pod bariérou n · log2 n, ale má (tém¥°) lineární £as vyhledávání. Pouºitým trikem je vypo£ítávání n¥kterých informací z okolních hodnot aº v p°ípad¥ pot°eby. Strukturu pak roz²í°il Sadakane [40, 41] na self-indexing £ímº dále sníºil pam¥´ové nároky. Pomocí wavelet strom· odstra¬uje CSA redundanci v sekvencí a dosahuje tak kvalitní komprese. 4.3.2 FM-index FM-index je self-index datová struktura vyuºívající Burrows-Wheeler transformace pro dosaºení mén¥ neº lineární pam¥´ové náro£nosti a p°itom umoº¬uje vyhledávání v lineárním £ase [31]. Navrhli jej v roce 2000 Ferragina a Manzini [12]. 4.3.3 Kompromis Problém s FM-index i CSA je v jejich pot°eb¥ náhodných £tení, coº zp·sobuje mnoho I/O operací, které v p°ípad¥ uloºení FM-indexu £i CSA na disku významn¥ omezuje jejich pouºití [18]. Takºe si m·ºeme bu¤ vybrat velmi rychlou indexovací techniku jako nap°íklad B 2 ST a ob¥tovat desítky bajt· za kaºdý indexovaný symbol, nebo budeme ukládat index do self-indexing komprimované struktury, ale kv·li I/O operacím se vyhledávání °ádov¥ protáhne v £ase. Kompromis nabízí Cánovas a Navarro v [7]. Alternativní °e²ení pak publikoval Mäkinen, Navarro, Sirén a Välimäki v [32], kde je °e²ena otázka indexování °ádov¥ tisíc· genom·. Podle autor· je pot°eba nejenom aplikovat I/O efektivní, komprimované indexovací datové struktury, ale zam¥°it se i na fakt, ºe genomické sekvence obsahují mnoho opakujících se vzor·, a ºe genomy jsou si vºdy velmi podobné. Ve svojí práci navrhují novou rodinu self-indexing technik pro ukládání °et¥zc· s opakujícími se vzory a vhodný sux tree. 4.4 Efektivní indexování DNA Ideální technika pro indexování DNA by m¥la spl¬ovat následující poºadavky: 1. je schopná lineární konstrukce v·£i délce vstupu, 2. je schopná lineárního vyhledávání, 3. pracuje s indexem (a p°ípadn¥ i se vstupem) stylem on-disk, 4. efektivn¥ vyuºívá I/O operací, 4.4. 31 EFEKTIVNÍ INDEXOVÁNÍ DNA 5. pouºívá self-indexing strukturu, 6. má sublineární pam¥´ovou náro£nost uloºení indexu, 7. zvládá indexovat vstupy o velikosti mnoha kompletních genom· (homo sapiens), 8. je elegantní a jednoduchá na implementaci. ádná z popsaných technik nespl¬uje kaºdý poºadavek, dohromady v²ak pokrývají v²echny. Nejblíºe popsaným vlastnostem je technika TRELLIS (TRELLIS+), DiGeST a B 2 ST . Ty spl¬ují body 2, 3 a 4, technika B 2 ST navíc i bod 7. Bod 1 je diskutabilní, protoºe asymptoticky lineární konstrukce m·ºe být p°ekonána asymptoticky hor²ím algoritmem, který je v²ak lépe naimplementován (jak je vid¥t na TDD). Efektivní algoritmy vyuºívající sux tree zpravidla pouºívají stejný vzor práce. Nejprve rozd¥lí vstup na oddíly, které samostatn¥ zpracují jako sux array. Z nich pak sestaví les sux strom·, které spojí dohromady. Problémem, který je je²t¥ pot°eba °e²it je spojení bodu 5 a 6 spolu s bodem 3 a 4. Dostupné techniky indexování se sublineární pam¥´ovou náro£nosti nejsou momentáln¥ schopné provád¥t efektivní p°ístup on-disk [7]. 32 KAPITOLA 4. EFEKTIVNÍ INDEXOVÁNÍ DNA Kapitola 5 Knihovna V rámci této práce byla vypracována softwarová knihovna algoritm· pro efektivní indexování DNA. Cílem bylo vybrat algoritmy vhodné pro efektivní indexování DNA a shrnout je do jedné kompaktní knihovny za ú£elem snadného porovnávání. V této kapitole je popsán návrh a implementace této knihovny. 5.1 Vybrané algoritmy Na základ¥ poznatk· z p°edchozích kapitol bylo vybráno pár technik pro efektivní indexování DNA. Jejich výb¥r byl dán kritériem schopnosti indexovat on-disk, zpracovávat velké vstupy, rychlé konstrukce a efektivního p°ístupu k pam¥tím. Preferované byly techniky vyuºívající sux tree, protoºe jde o strukturu obecn¥ prakti£t¥j²í. Vybrány byly algoritmy TRELLIS (a TRELLIS+), DiGeST a B 2 ST . V²echny jsou navrºené s ohledem na efektivní indexování rozsáhlých DNA °et¥zc·. 5.1.1 Vlastnosti vybraných algoritm· Algoritmus TRELLIS [38] naimplementoval v roce 2007 Benjarath Phoophakdee. Implementace je dostupná na webové adrese pmwiki.php/Software/Software#bioseq, http://www.cs.rpi.edu/~zaki/www-new/ spolu s ostatními zajímavými programy. TRELLIS je napsaný v jazyce C++, má p°ibliºn¥ 4 kLOC (Lines of Code, °ádk· kódu) a je uzp·sobený pro pouºití s GNU C++ kompilátorem a GNU platformou. Algoritmus je sloºen ze £ty° fází. V první se rozd¥lí vstupní text na oddíly, ve druhé fázi se tyto oddíly samostatn¥ indexují do sux trees, které se ve t°etí fázi spojují. tvrtá fáze p°idává sux linky pro rychlé vyhledávání a je volitelná. Algoritmus DiGeST [1] je dostupný na webové adrese ca/~mgbarsky/digestpapercode.html. http://webhome.cs.uvic. Je napsaný v jazyce C, má p°ibliºn¥ 4,4 kLOC a je op¥t uzp·soben pro kompilaci GNU kompilátorem a pouºitím na GNU platform¥. Obsahuje mimo jiné algoritmus rychlého °azení sux· od Jespera Larssona, publikovaný Larssonem a Sadakane. Cílem návrhu algoritmu DiGeST je schopnost indexovat více DNA sekvencí do jednoho sux tree, coº implikuje schopnost indexovat dlouhé DNA sekvence. Podstatnou vlastností je také malý po£et I/O p°ístup·. 33 34 KAPITOLA 5. B 2 ST je dostupný na bbstpapercode.html. Je napsaný v Algoritmus adrese KNIHOVNA http://webhome.cs.uvic.ca/~mgbarsky/ jazyce C, má p°ibliºn¥ 4,2 kLOC a z v¥t²í £ásti vychází z algoritmu DiGeST. Zásadní vlastností B 2 ST je moºnost indexovat vstupy v¥t²í, neº je dostupná pam¥´. 5.2 Struktura knihovny Knihovna nazvaná libednai (library for ecient DNA indexing) se skládá se z n¥kolika komponent. Ty jsou vyobrazeny pomocí UML diagramu komponent na obrázku 5.1. Obrázek 5.1: Diagram komponent knihovny libednai Základem knihovny jsou originální implementace vybraných algoritm·, které jsou £áste£n¥ upravené. Tyto algoritmy (jejich funkce a globální symboly) jsou vyuºívány odpovídajícími ovlada£i, které sdruºují r·znorodé rozhraní r·zných implementací pod driver, které v²echny ovlada£e implementují. Tento p°ístup odpovídá fasáda (n¥kdy zvané téº front controller). Tato skupina ovlada£· spolu s originálními algoritmy a jednotnými rozhraními je knihovna libednai. Ke knihovn¥ je p°ipojena komponenta ednai, poskytující CLI rozhraní umoº¬ující p°ímou práci s kni- spole£né rozhraní návrhovému vzoru hovnou. P°i pouºití CLI rozhraní je moºné zvolit algoritmus a akci pro daná vstupní data, coº p°ipomíná návrhový vzor Strategy. Zapouzd°ení jednotlivých indexa£ních algoritm· a jejich zp°ístupn¥ní p°es fasádu umoº¬uje jednoduché roz²i°ování knihovny o dal²í algoritmy. Výhodou je také jednoduchost návrhu. 5.3. 35 IMPLEMENTACE 5.3 Implementace Výb¥r programovacího jazyka pro vytvo°ení knihovny byl zna£n¥ omezen originálními implementacemi indexa£ních algoritm·. Ty jsou psané v jazyce C++ £i jazyce C. Kompilátorem C++ se dá ve v¥t²in¥ p°ípad· bez problém· kompilovat zdrojový kód v jazyce C, nikoliv v²ak naopak. Volba tedy jasn¥ padla na C++. P°edností C++ je mimo jiné objektového programování, datové struktury vy²²í abstrakce (neº v C) a podpora jmenných prostor·. Dalo se také uvaºovat o programovací jazycích jako nap°íklad Perl, Lisp, Haskell £i Python, ale p°epis p·vodních algoritm· do jiného jazyka by byl pouze ztrátou £asu (a pravd¥podobn¥ efektivity) a p°ípadné propojování komponent psaných v jiných jazycích by také mohlo být problematické. Nejvhodn¥j²í alternativou by bylo pouºít jazyk Perl pro tvorbu knihovny a frontendu. Podobn¥ tak tomu £iní implementace TDD. Nejkrásn¥j²í alternativou by bylo p°epsat implementace do Haskellu a vyuºít elegantní matematické syntaxe a vysoce kvalitní automatické funkcionální optimalizace. Platforma knihovny je op¥t dána p·vodními implementacemi. Ta je ve v²ech p°ípadech shodná GNU/Linux (£i GNU kompatibilní). Knihovna je tedy psána s ohledem na GNU platformu, ale díky vysoce p°enositelnému jazyku C++ není velký problém p°eportovat knihovnu na jinou platformu. Knihovna je psána z£ásti objektovým a z£ásti procedurálním stylem podle toho, co se pro daný kus kódu zrovna více hodí. Knihovna byla tvo°ena velice pe£liv¥ s maximální moºnou kvalitou kódu na v²ech abstraktních úrovních, kde kvalita znamená £itelnost, srozumitelnost, p°ehlednost, efektivitu a exibilitu. Knihovna je rozd¥lena do n¥kolika odd¥lených £ástí podobn¥ jak je tomu na diagramu 5.1. Zdrojové kódy kaºdé indexa£ní metody jsou kompilovány jako samostatné objektové soubory (object les), které jsou poté spojeny v jeden celek. Tento celek je pak p°ipojen k odpovídajícímu ovlada£i a v²echny ovlada£e jsou poté op¥t spojeny do jednoho celku. Ten je nakonec p°ipojen k vn¥j²ímu rozhraní. Pro zaji²t¥ní nekoniktnosti jednotlivých £ástí knihovny byly pouºity jmenné prostory (namespaces). Kaºdý indexa£ní algoritmus se nachází ve vlastním jmenném prostoru libednai_xyz, kde xyz je název libednai. Aby bylo algoritmu. Zbytek knihovny je pak umíst¥n ve jmenném prostoru moºno zapouzd°it kaºdý indexa£ní algoritmus do jednoho objektového souboru, bylo pot°eba vy°e²it konikty globálních symbol· a vícenásobných denic funkcí. Pro vybrané algoritmy byl tento proces proveden úsp¥²n¥, ale v p°ípad¥, ºe by tento proces vyºadoval p°íli² mnoho £asu, je vhodné algoritmus rozd¥lit do více jmenných prostor· (nap°íklad libednai_xyz_filename). P°ístup do libednai_xyz je pot°eba povolit pro ovlada£ odpovídajícího algoritmu. 5.3.1 Úpravy originálních implementací Originální implementace algoritm· byly upraveny pro chod v rámci knihovny. Jejich rozhraní bylo upraveno pot°ebným zp·sobem a n¥které £ásti kódu byly inovovány (nap°íklad p°eklada£ FASTA formátu do interního NUM formátu algoritmu TRELLIS). Originálním implementacím chyb¥lo n¥kolik krok· k úsp¥²né kompilaci, jako nap°íklad o²et°ení návratových hodnot systémových volání, dopln¥ní pot°ebných import· hlavi£kových soubor·, korekce nevhodných p°etypování a n¥které dal²í drobnosti. Navzdory 36 KAPITOLA 5. KNIHOVNA ve²keré snaze v²ak originální implementace p°evzaté p°ímo od výzkumných týmu nejsou pln¥ funk£ní a p°i nesmyslných £i nesprávných vstupech zcela selhávají. Stabilita algoritm· se dá £áste£n¥ ovliv¬ovat pro kaºdý jednotlivý p°ípad nastavováním skrytých konstant uvnit° kódu algoritm·. Knihovna samotná je pln¥ funk£ní a b¥hem testování nebyly zaznamenány ºádné problémy. 5.3.2 Testování knihovny Knihovna byly testována p°edev²ím velmi citlivým nastavením úrovn¥ varování a chyb kompilátoru. Pouºit byl také statický analyzátor kódu cppcheck. Samotná funk£nost rozhraní a knihovny byla mnohokráte testována ru£ním zp·sobem vkládáním vstup· a sledováním výstup·. 5.3.3 Náhodný generátor sekvencí Sou£ástí distribuce knihovny je náhodný generátor DNA sekvencí ve FASTA formátu. P°i generování lze nastavit délku poºadované sekvence a je moºno rozd¥lit výstup do oddíl· dané délky. 5.3.4 Roz²i°itelnost Máme-li algoritmus v jazyce C £i C++, který chceme p°idat do knihovny libednai, je pot°eba provést celkem 5 (6) krok·. Jmenný prostor Uzav°eme kompletní kód algoritmu (ve v²ech zdrojových souborech a hlavi£kových souborech) do jmenného prostoru libednai_xyz, kde xyz je název algoritmu. Kompilace do objektových soubor· Kaºdý zdrojový soubor zkompilujeme do samostatného objektového souboru. Sestavení V²echny p°ipravené objektové soubory sestavíme linkerem do jednoho výsled- ného objektového souboru. V této fázi je pot°eba odstranit ve²kerý duplicitní kód a vícenásobné denice globálních prom¥nných. Vytvo°ení ovlada£e Pro daný algoritmus vytvo°íme ovlada£ implementující rozhraní driver podobn¥ jako ostatní ovlada£e v knihovn¥. Zárove¬ bude pot°eba denovat rozhraní algoritmu. P°ipojení ovlada£e Úprava ednai Vytvo°ený ovlada£ linkerem p°ipojíme do knihovny ednai do souboru actions.cc print.cc p°idáme ná² algoritmus do listování ednai v args.cc. Podle pot°eby p°idáme do frontendu sm¥rování na ná² algoritmus, do a p°ípadn¥ pozm¥níme rozhraní libednai. 5.4. 37 VSTUPNÍ FORMÁT 5.4 Vstupní formát DNA °et¥zce lze uchovávat r·znými zp·soby. Základem je textová reprezentace nukleotických bází jako samostatných symbol·. Tu denuje organizace International Union of Pure and Applied Chemistry (IUPAC) a je popsána v tabulce 5.1. N¥kterým symbol·m odpovídá více nukleotických bází. Nap°íklad N m·ºe být adenin, cytosin, guanin nebo thymin. Symbol význam A adenin C cytosin G guanin T thymin U uracil R G A Y T C K G T M A C S G C W A T B G T C D G A T H A C T V G C A N A G C T Tabulka 5.1: Kódy nukleotických bází dle IUPAC Plain DNA °et¥zec m·ºeme uloºit jako oby£ejný textový soubor v kódování ASCII s vyuºitím IUPAC kódování. Jde o plýtvání místem, ale data jsou lidsky £itelná a snadno se s nimi pracuje. FASTA Uchovává °et¥zec podobn¥ jako Plain, ale m·ºe jich uchovávat více v jednom souboru. Na za£átku kaºdé sekvence je jeden °ádek, který za£íná symbolem > a za ním následuje popis sekvence. FASTA formát má oby£ejn¥ omezenou délku °ádku na dohodnutou konstantu jako 120, 80 £i 70 symbol·. To usnad¬uje implementaci program· £toucích FASTA formát. GCG, GCG-RSF, GenBank Velmi podobné formáty ukládající °et¥zec (°et¥zce) ur£itým vzorem. Symboly jsou zapsané stejn¥ jako v p°ípad¥ Plain, ale jsou rozd¥lené do skupin po deseti symbolech, po ²esti skupinách na °ádek odd¥lených mezerou. ádky p°edchází £íslování po£tu symbol·. Formáty p°ipomínají hexadecimální výpisy. Na za£átku souboru (sekvence) je textová hlavi£ka blíºe popisující dal²í obsah. IG Uchovává sekvence stejn¥ jako Plain. M·ºe obsahovat komentá°e jako °ádky uvozené st°edníkem. P°ed samotnou sekvencí je název sekvence (bez mezer) a na konci sekvence je £íslo (1) ukon£ující sekvenci. 38 KAPITOLA 5. Genomatix KNIHOVNA Podobný formát jako GenBank, ale s velmi komplexní hlavi£kou. Krom¥ formát· zaloºených na ASCII kódování IUPAC kódu lze vyuºít r·zné binární reprezentace. Nejb¥ºn¥j²í je uloºit DNA symboly a, c, g, t jako dvojice bit· a ty poté seskupit do v¥t²ích celk·. Máme-li 32 bit· velký datový objekt pro ukládání £ísel (integer), m·ºeme do n¥j uloºit celkem ²estnáct DNA symbol·. Toho nap°íklad vyuºívá TDD £i B 2 ST algoritmus. B¥ºn¥ pouºívaným formátem je FASTA formát a p°ijímá jej v¥t²ina algoritm·. Do knihovny zahrnuté algoritmy také pouºívají FASTA formát (i p°esto, ºe z n¥j konvertují do interní podoby). Knihovna tedy také pouºívá FASTA formát. >chr1 taaccctaaccctaaccctaaccctaaccctaaccctaaccctaacccta accctaaccctaaccctaaccctaaccctaaccctaaccctaaccctaac cctaacccaaccctaaccctaaccctaaccctaaccctaaccctaacccc taaccctaaccctaaccctaaccctaacctaaccctaaccctaaccctaa ccctaaccctaaccctaaccctaaccctaacccctaaccctaaccctaaa ccctaaaccctaaccctaaccctaaccctaaccctaaccccaaccccaac cccaaccccaaccccaaccccaaccctaacccctaaccctaaccctaacc >chr2 CGTATcccacacaccacacccacacaccacacccacacacacccacaccc acacccacacacaccacacccacacaccacacccacacccacacaccaca cccacaccacacccacacaccacacaccacacccacacccacacacacca cacccacacaccacacccacacacaccctaaccctaacccctaaccccta accctaaccctacccgaaccctaaccctaaccctaacccctaaccctaac ccctaaccctaaccctaaccgtaaccctaaccctttaccctaacccgaac ccctaacccctaacccctaacccttaaccctaacccttaaccctgaccct gaccctgaccgtgaccctgaccctaacccgaacccgaacccgaaccccga accccgaaccccgaaccccaaccccaaccccaaccccaaccctaacccct Obrázek 5.2: Ukázka FASTA formátu Kapitola 6 Experimenty Knihovna libednai byla vystavena mnoha experiment·m. V této kapitole jsou prezen- továny ty zajímav¥j²í z nich. Slouºí p°edev²ím k ov¥°ení a porovnání vlastností algoritm· obsaºených v knihovn¥. 6.1 Pouºitá data, platforma a zp·sob m¥°ení Protoºe jde p°edev²ím o efektivní indexování DNA, experimenty byly provedeny s DNA °et¥zci. Pouºity byly skute£né kompletní sekvenované genomy a také náhodn¥ vytvo°ené DNA °et¥zce. P°ehled testovacích dat je v tabulce 6.1 a zdroje dat jsou uvedeny v 6.2. Jako generátor náhodných sekvencí byl pouºit program ednai. rndfasta p°iloºený v distribuci Opera£ním systémem pro testování knihovny byla GNU/Linux distribuce Ubuntu ve verzi 11.04 Server Edition (64 bit). Pouºitý kompilátor byl g++ verze 4.5.2. Pouºit byl GNU Make 3.81. Po£íta£ provád¥jící experimenty a m¥°ení m¥l procesor Intel Pentium G6950 2.80GHz (dv¥ 64-bit jádra), opera£ní pam¥´ o kapacit¥ 8 GB a externí pam¥t 1 TB pevný disk Western Digital. Po£íta£ poskytla rma OldanyGroup (www.oldanygroup.cz). Doba b¥hu experimentu byla m¥°ena pomocí funkce clock() ze standardní knihovny jazyka C. M¥°ena byla tedy skute£ná doba b¥hu algoritmu ( user a sys £as). M¥°ení bylo u kaºdého experimentu opakováno a pouºit byl nejniº²í dosaºený £as, £ímº se odstranily projevy soub¥ºn¥ b¥ºících proces·. M¥°ení obsazené kapacity bylo provedeno oby£ejnou utilitou du. 6.2 M¥°ení TRELLIS Algoritmus TRELLIS byl z po£átku nefunk£ní kv·li vadnému p°eklada£i vstupního FASTA formátu do interního NUM formátu. P°eklada£ byl v rámci této práce p°eprogramován a byly opraveny dal²í drobné chyby implementace TRELLIS. Ve výsledku algoritmus funguje bezchybn¥ na v²ech testovacích datech. Algoritmus byl jako jediný testován s 1 GB a 2 GB pam¥ti pro vstupy ec, sc a dm. Je znát pokles doby výkonu 39 40 KAPITOLA 6. Zkratka EXPERIMENTY Název Popis Velikost ec Escherichia Coli Kompletní genom známé bakterie 4.6 Mbp sc Saccharomyces Cerevisiae Kompletní genom pivní kvasinky dm Drosophila Melanogaster Kompletní genom octomilky obecné 172.1 Mbp am Apis Mellifera Kompletní genom v£ely medonosné 238.2 Mbp Náhodná DNA sekvence 1000.0 Mbp Homo Sapiens Kompletní lidský genom 3083.1 Mbp rnd1 hs 12.3 Mbp Tabulka 6.1: P°ehled pouºitých dat Zkratka ec sc dm am hs Zdroj http://genome.jgi-psf.org/esccb/esccb.download.html http://hgdownload.cse.ucsc.edu/goldenPath/sacCer1/bigZips/chromFa.zip http://hgdownload.cse.ucsc.edu/goldenPath/dm3/bigZips/chromFa.tar.gz ftp://ftp.ncbi.nih.gov/genomes/Apis_mellifera/ http://webhome.cs.uvic.ca/~mgbarsky/bbstpapercode.html Tabulka 6.2: Zdroje pouºitých dat algoritmu p°i p°id¥lení 2 GB pam¥ti. Tento trend je zcela v souladu s o£ekáváním. Algoritmus nevyniká rychlostí, ale má velmi nízké pam¥´ové nároky na uloºení sux tree oproti zbývajícím algoritm·m. Sou£ástí do£asných soubor· jsou v²ak d·leºitá data jako nap°íklad sux linky. Implementace TRELLIS se m·ºe chovat neo£ekávaným zp·sobem p°i p°id¥lení p°íli² málo opera£ní pam¥ti. Výsledky m¥°ení TRELLIS jsou v tabulce 6.3. Výsledky m¥°ení algoritmu TRELLIS+ nejsou uvedeny, protoºe nejsou zcela reprodukovatelné. Implementace algoritmu TRELLIS+ obsahuje p°íli² mnoho chyb a není tedy moºné bez velmi pe£livé manipulace s kódem získat poºadované výsledky 1 . Nicmén¥, algoritmus TRELLIS+ se od algoritmu TRELLIS li²í pouze vylep²enou správou pam¥ti, ale principy a kostra algoritmu z·stává stejná. Nam¥°ené výsledky jsou velmi podobné výsledk·m algoritmu TRELLIS. 6.3 M¥°ení DiGeST Algoritmus DiGeST je ur£en pro indexování velkých vstup·. P°i pokusech pouºít DiGeST na malý vstup jako je ec do²lo opakovan¥ k selhání algoritmu. Stejn¥ tak se d¥lo v p°ípad¥ p°id¥lení malého mnoºství opera£ní pam¥ti. Nicmén¥ pro v¥t²í vstupy (sc a v¥t²í) a p°i p°id¥lení dostate£ného mnoºství opera£ní pam¥ti se DiGeST chová podle o£ekávání a vykazuje velmi dobré výsledky jak v dob¥ indexování, tak i v mnoºství obsazených dat na disku. Výsledky m¥°ení algoritmu DiGeST jsou v tabulce 6.4. Algoritmus TRELLIS+ selhává p°edev²ím na vadné vnit°ní reprezentaci vstupních dat. Vstupní data ve formátu FASTA jsou p°eloºena do vnit°ního formátu NUM a ta jsou poté na£tena do pam¥ti. Mezi uloºenými daty ve formátu NUM a pam¥´ovou reprezentací po jejich na£tení jsou v²ak rozdíly, vedoucí k nesprávnému chování algoritmu. Problém se ani po intenzivním lad¥ní nepoda°ilo odstranit. Chyby se vyskytují i v nijak nezm¥n¥né p·vodní implementaci algoritmu. 1 6.4. M ENÍ Vstup B 2 ST 41 Dostupná pam¥´ [MB] Doba b¥hu [s] ec 1024 11,64 35 MB + 169 MB ec 2048 12,09 35 MB + 169 MB sc 1024 34,31 93 MB + 453 MB sc 2048 33,76 93 MB + 453 MB dm 1024 732,66 1,3 GB + 6,5 GB dm 2048 693,06 1,3 GB + 6,5 GB am 1024 912,45 1,8 GB + 8,6 GB 1,8 GB + 8,6 GB am 2048 836,89 rnd1 2048 4692,52 hs 2048 15346,73 Velikost indexu + do£asných soubor· 7,5 GB + 35 GB 22 GB + 109 GB Tabulka 6.3: Výsledky m¥°ení TRELLIS Vstup Dostupná pam¥´ [MB] Doba b¥hu [s] Velikost indexu + do£asných soubor· sc 2048 7,44 dm 2048 144,52 615 MB + 247 MB 8,1 GB + 3,3 GB am 2048 185,28 12 GB + 4,6 GB rnd1 2048 1069,31 50 GB + 20 GB hs 2048 2823,13 140 GB + 57 GB Tabulka 6.4: Výsledky m¥°ení DiGeST 6.4 M¥°ení B ST 2 Z algoritmu DiGeST vychází algoritmus B 2 ST , které se nevejdou do hlavní pam¥ti. P°i pouºití který je ur£en pro indexování vstup·, B 2 ST na p°íli² malý vstup nebo p°i p°id¥lení p°íli² mnoho pam¥ti je binárn¥ kódovaná DNA sekvence na£tena do pam¥ti celá a nevytvo°í se pot°ebné oddíly vstup·, které jsou v algoritmu dále pouºívány. P°i p°id¥lení p°íli² malého mnoºství opera£ní pam¥ti algoritmus selhává. Testovací vstupy ec a sc byly tedy vy°azeny (p°íli² malé) a testovací vstupy dm a am byly pouºity s p°id¥lením pouhých 200 MB opera£ní pam¥ti. P°i pouºití B 2 ST je d·leºité p°edloºit FASTA vstup takový, který není rozd¥len na více sekvencí. V jednom vstupním souboru musí být jen jedna sekvence. B 2 ST si totiº vstupní °et¥zec rozd¥luje podle p°id¥lené pam¥ti a pokud by ve vstupním souboru bylo více sekvencí, algoritmus by s kaºdou zacházel odd¥len¥ a nebyl by ji schopen rozd¥lit na více oddíl·. Výsledky m¥°ení Vstup B 2 ST Dostupná pam¥´ [MB] Doba b¥hu [s] dm 200 152,04 7,5 GB + 6,3 GB am 200 250,18 11 GB + 11 GB rnd1 1024 924,50 49 GB + 39 GB hs 1024 8090,61 jsou v tabulce 6.5. Velikost indexu + do£asných soubor· 130 GB + 215 GB Tabulka 6.5: Výsledky m¥°ení B 2 ST 42 KAPITOLA 6. EXPERIMENTY 6.5 Porovnání a diskuze Porovnání doby indexování je zobrazeno grafy na obrázcích 6.1 a 6.2. Porovnání není úpln¥ korektní z pohledu B 2 ST , protoºe byly pouºity výsledky m¥°ení doby b¥hu B 2 ST s p°id¥lením mén¥ pam¥ti (200 MB a 1024 MB) neº bylo p°id¥leno ostatním algoritm·m (2 GB). Jak je vid¥t na výsledcích m¥°ení TRELLIS, p°id¥lení pam¥ti ovliv¬uje dobu b¥hu algoritmu. Nicmén¥ i p°es toto postiºení dosáhl B 2 ST velmi dobrých výsledk·. Zajímav¥j²í je srovnání algoritm· pomocí jejich propustnosti, které je na obrázku 6.3. Propustnost byla vypo£ítána jako pom¥r velikosti vstupních dat v Mbp k dob¥ pot°ebné pro indexování. Propustnost postupn¥ u v²ech algoritm· klesá s velikostí vstupu. Na obrázku 6.3 jsou znázorn¥ny nejv¥t²í nam¥°ené propustnosti. Mnoºství obsazeného místa na disku výsledným indexem a do£asnými soubory zachycují grafy na obrázcích 6.4, 6.5, 6.6, 6.7. Mezi indexem a do£asnými soubory není p°esn¥ daná hranice a nap°íklad TRELLIS si mezi do£asné soubory ukládá i sux linky. Objektivn¥j²í je tak porovnávat algoritmy podle celkového zabraného místa, v£etn¥ do£asných soubor·. Z výsledk· je vid¥t, ºe TRELLIS tvo°í index pomalu, ale ten pak zabírá velmi málo místa na disku. TRELLIS je sice aplikovatelný na vstupy do velikosti aº 4 GB (diskutováno ve £tvrté kapitole), ale prakticky se hodí spí²e na vstupy men²í neº 100 Mbp. Propustnost TRELLIS je nejhor²í z m¥°ených algoritm·. Algoritmu DiGeST vykazuje velmi dobré výsledky v dob¥ indexování. Ze v²ech t°í algoritm· má nejvy²²í propustnost, ale jeho indexy zabírají více místa na disku neº ty vytvo°ené algoritmem TRELLIS. Algoritmus B 2 ST se i p°es signikantní handicap desetinásobn¥ (a dvojnásobn¥) niº²í povolené pam¥ti vyjevil jako vysoce výkonný algoritmus schopný indexovat ve velmi krátkém £ase (srovnatelný s DiGeST). Velikost indexu dexu B 2 ST je podobná velikosti in- DiGeST . Na základ¥ experimentálního vyhodnocení se tedy dá °íci, ºe algoritmus TRELLIS je vhodný pro men²í vstupy (do 100 Mbp), DiGeST se hodí na vstupy st°edn¥ velké (100 Mbp aº 3000 Mbp) a na v¥t²í vstupy se dá s výhodou pouºít B 2 ST . 6.5. 43 POROVNÁNÍ A DISKUZE Porovnání doby indexace Vstupy menší než 1 Mbp 900 800 700 Čas [s] 600 500 400 300 200 100 0 ec sc dm am Vstup TRELLIS (2GB) DiGeST (2GB) B2ST (200MB) Obrázek 6.1: Porovnání doby indexace vstup· men²ích neº 1 Mbp Porovnání doby indexace Vstupy větší než 1 Mbp 18000 16000 14000 Čas [s] 12000 10000 8000 6000 4000 2000 0 rnd1 hs Vstup TRELLIS (2GB) DiGeST (2GB) B2ST (1GB) Obrázek 6.2: Porovnání doby indexace vstup· v¥t²ích neº 1 Mbp 44 KAPITOLA 6. EXPERIMENTY Porovnání maximální propustnosti 1.8 1.6 Propustnost [Mbp/s] 1.4 1.2 1 0.8 0.6 0.4 0.2 0 TRELLIS DiGeST B2ST Algoritmus Obrázek 6.3: Porovnání doby maximální propustnosti algoritm· Porovnání velikosti indexu Vstupy menší než 1 Mbp. Bez započítání dočasných souborů. 14000 Velikost indexu [MB] 12000 10000 8000 6000 4000 2000 0 ec sc dm am Vstup TRELLIS DiGeST B2ST Obrázek 6.4: Porovnání velikosti indexu vstup· men²ích neº 1Mbp 6.5. 45 POROVNÁNÍ A DISKUZE Porovnání velikosti indexu Vstupy větší než 1 Mbp. Bez započítání dočasných souborů. 160000 140000 Velikost indexu [MB] 120000 100000 80000 60000 40000 20000 0 rnd1 hs Vstup TRELLIS DiGeST B2ST Obrázek 6.5: Porovnání velikosti indexu vstup· v¥t²ích neº 1Mbp Porovnání velikosti indexu Vstupy menší než 1 Mbp. Se započítáním dočasných souborů. 25000 Velikost indexu [MB] 20000 15000 10000 5000 0 ec sc dm am Vstup TRELLIS DiGeST B2ST Obrázek 6.6: Porovnání velikosti indexu a do£asných soubor· vstup· men²ích neº 1Mbp 46 KAPITOLA 6. EXPERIMENTY Porovnání velikosti indexu Vstupy menší než 1 Mbp. Se započítáním dočasných souborů. 25000 Velikost indexu [MB] 20000 15000 10000 5000 0 ec sc dm am Vstup TRELLIS DiGeST B2ST Obrázek 6.7: Porovnání velikosti indexu a do£asných soubor· vstup· v¥t²ích neº 1Mbp Kapitola 7 Shrnutí Tato práce p°edkládá stru£ný a srozumitelný úvod do genetiky a stringologie a unikátní ucelený p°ehled °e²ení problému efektivního indexování DNA s d·razem na praktické poznatky. Problematika byla probrána postupn¥, od klasického vyhledávání v textu, p°es základy indexování aº po aktuální v¥decké studie, p°i£emº byly odhaleny a diskutovány základní problémy efektivního indexování. Zmín¥ny byly i komprimované datové struktury a jejich vztah k indexování DNA. V rámci práce vznikla praktická a exibilní softwarová knihovna libednai obsahující opravené originální implementace algo- ritm· TRELLIS, TRELLIS+, DiGeST a B 2 ST . Ty byly následn¥ experimentáln¥ analy- zovány a porovnány. Práce je p°ehledným shrnutím moderních technik, které umoº¬uje £tená°i snadno pochopit základy a zákonitosti efektivního indexování a plynule navázat na poslední výzkumy v této oblasti. Na základ¥ této práce je moºné pokra£ovat roz²i°ováním knihovny libednai o dal²í indexovací algoritmy a pokra£ovat v analýze dostupných °e²ení. Dále je moºné na základ¥ této práce vy²et°it moºnosti efektivního indexování s niº²í pam¥´ovou náro£ností uºitím komprese nebo jiné techniky a kombinace t¥chto p°ístup· se zmín¥nými technikami. 47 48 KAPITOLA 7. SHRNUTÍ P°íloha A Uºivatelská p°íru£ka A.1 Kompilace Pro úsp¥²nou kompilaci knihovny • libednai je pot°eba mít k dispozici funk£ní UNIXový opera£ní systém, nejlépe z rodiny GNU. Pro vývoj a testování byl pouºit Ubuntu Linux 10.10 a Ubuntu 11.04 • kompilátor jazyka C++, nejlépe z balíku GCC. K vývoji byl vyuºit g++ verze 4.4.4 a verze 4.5.2 • kompila£ní nástroj make kv·li usnadn¥ní kompilace projektu Hardwarové nároky jsou irelevantní. Knihovna libednai není navrºená jako platformn¥ závislý software. Zdrojové kódy jsou sou£ástí výtisku této práce, uloºeny na p°iloºeném médiu. Pokud http://repo. or.cz/w/ednai.git. P°es webové rozhraní je moºné stáhnout snapshot (tar.gz nebo zip). Kód je spravován verzovacím systémem git (http://git-scm.com/). médium nemáte k dispozici, lze kód knihovny obdrºet na webové adrese Po získání zdrojových kód· p°ejdete do adresá°e make, src a pouºijete kompila£ní nástroj p°ípadn¥ následujte ru£n¥ kompila£ní p°edpis uvedený v souboru Makefile. Kompilace trvá °ádov¥ jednotky vte°in. Výsledkem kompilace je objektový soubor libednai.o, který je p°ipojen do spustitelného binárního souboru frontend ke knihovn¥ libednai. ednai obsahujícího A.2 Pouºití S knihovnou lze operovat pomocí p°ipojené komponenty ednai, která zprost°edkovává CLI (p°íkazové) rozhraní ke knihovn¥. Po úsp¥²né kompilaci je binární souboru v adresá°i ednai dostupná jako src. Pro vyvolání nápov¥dy sta£í pouºít p°epína£ -h nebo -u. 49 50 PÍLOHA A. UIVATELSKÁ PÍRUKA $ ./ednai -u libednai v0.0.0 Usage: ednai [args] -v show version -u show usage -h show help (same as -u) -a/--action <action> action to do -A/--algorithm <algorithm> algorithm to use -i/--inputfile <file> FASTA input to index -o/--outputdir <dir> output directory -t/--tmpdir <dir> temp directory [/tmp] -m/--memory (MB) <num> available memory [1000] -T/--time measure time -p/--preflen <num> prefix length (TRELLIS only) [3] -j/--maxstringsize <num> maximum string size (B2ST only) [0.1 * memory] -k/--memforinbuffers (MB)<num> memory for input buffers (B2ST only) [0.7 * memory] -l/--memforouttree (MB) <num> memory for output tree (B2ST only) [10] Use 'help' in place of algorithm or action to list availible P°ehled dostupných algoritm· v knihovn¥ lze provést argumentem help. -A s parametrem $ ./ednai -A help Available algorithms: dummy trellis trellis+ digest b2st -a lze specikovat poºadovanou akci vybraného algoritmu. P°íklad B 2 ST s vyuºitím 5 GB opera£ní adresá°e /output a odkládacího adresá°e /tmp: Pomocí parametru spu²t¥ní indexace lidského genomu pomocí algoritmu pam¥ti, výstupního ./ednai -a index -A b2st -i /input/genom.fasta -o /output -t /tmp/ -m 5000 A.3 Licence V²echny soubory knihovny libednai a rozhraní ednai jsou distribuovány pod licencí ISC pokud není uvedeno jinak. ISC licence je zjednodu²enou BSD licencí a pouºívá ji nap°íklad projekt OpenBSD. Plné anglické zn¥ní licence: A.3. LICENCE Copyright (c) 2011, Martin Kopta <[email protected]> Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 51 52 PÍLOHA A. UIVATELSKÁ PÍRUKA P°íloha B Obsah p°iloºeného média K ti²t¥né verzi této práce je p°iloºeno datové médium s následujícím obsahem. Adresá° algorithms/ data/ ednai/src/ ednai/prirucka.txt ednai/bin/ thesis/latex/ thesis/pdf/ Obsah originální implementace diskutovaných algoritm· data pouºitá p°i experimentech zdrojové kódy knihovny libednai uºivatelská p°íru£ka zkompilovaná knihovna libednai a frontend ednai, generátor AT X tato diplomová práce ve formátu L E tato diplomová práce ve formátu PDF 53 rndfasta 54 PÍLOHA B. OBSAH PILOENÉHO MÉDIA Literatura [1] BARSKY Marina, STEGE Ulrike, THOMO Alex, UPTON Chris. A new method for indexing genomes using on-disk sux trees. CIKM '08 Proceeding of the 17th ACM conference on Information and knowledge management ISBN 978-1-59593-991-3 [2] BARSKY Marina, STEGE Ulrike, THOMO Alex, UPTON Chris. Sux Trees for Very Large Genomic Sequences. CIKM '09 Proceeding of the 18th ACM conference on Information and knowledge management ISBN 978-1-60558-512-3 [3] BEDATHUR S., HARITSA J. Engineering a Fast Online Persistent Sux Tree Construction. In ICDE, 2004. [4] BIEGANSKI Paul, RIEDL John, CARLIS John, RETZEL Ernest F. Generalized Sux Trees for Biological Sequence Data. 1994, Biotechnology Computing Proceedings of the Twenty-Seventh Hawaii International Conference [5] BOYER R. S., MOORE J. S. A fast string searching algorithm. 1977, Comm. ACM 20: 762772. [6] CAMPBELL, Neil A.; REECE, Jane B. Biology. Seventh edition. San Francisco : Pearson, Benjamin Cummings, 2005. 1231 s. ISBN 0-321-27045-2. [7] CÁNOVAS Rodrigo, NAVARRO Gonzalo. Practical Compressed Sux Trees. In Proceedings of SEA'2010. pp.94 105 [8] CROCHEMORE Maxime, VÉRIN Renaud. Direct construction of compact directed acyclic word graphs. 1997, Combinatorial Pattern Matching, Lecture Notes in Computer Science, SpringerVerlag, pp. 116129, doi:10.1007/3-540-63220-4 55. 55 56 LITERATURA [9] DARDIA Arthur, MATTHEWS Suzanne. Sux tree construction. Rensselaer Polytechnic Institute [10] FARACH-COLTON M., FERRAGINA P., MUTHUKRISHNAN S. On the sorting-complexity of sux tree construction. Journal of the ACM, 47(6): 9871011, 2000. [11] FERRAGINA Paolo, GROSSI Roberto. The string B-tree: a new data structure for string search in external memory and its applications. Journal of the ACM (JACM), Volume 46 Issue 2, March 1999 [12] FERRAGINA Paolo, MANZINI Giovanni. Opportunistic Data Structures with Applications. 2000, Proceedings of the 41st Annual Symposium on Foundations of Computer Science, p.390 [13] FLOURI, T., HOLUB, J., ILIOPOULOS, C.S., PISSIS, S.P. An algorithm for mapping short reads to a dynamically changing genomic sequence. Proceedings of IEEE International Conference on Bioinformatics and Biomedicine (BIBM 2010), IEEE Computer Society, pp. 133-136, 2010. [14] GIEGERICH R., KURTZ S., STOYE J. Ecient Implementation of Lazy Sux Trees. WAE '99 Proceedings of the 3rd International Workshop on Algorithm Engineering ISBN 3-540-66427-0 [15] GREGOROVÁ Dagmar DNA t°ídi£ka elektron· [online]. 2011-02-23 [cit. 2011-03-16] Dostupné z WWW: <http://www.osel.cz/index.php?clanek=5565> [16] GROSSI Roberto, VITTER Jerey. Compressed sux arrays and sux trees with applications to text indexing and string matching (extended abstract). STOC '00 Proceedings of the thirty-second annual ACM symposium on Theory of computing ISBN 1-58113-184-4 [17] HALACHEV Mihail, SHIRI Nematollaah, THAMILDURAI Anand. Ecient and scalable indexing techniques for biological sequence data. BIRD'07 Proceedings of the 1st international conference on Bioinformatics research and development ISBN 978-3-540-71232-9 [18] Compression, indexing, and retrieval for massive string data. HON Wing-Kai, SHAH Rahul, VITTER Jerey Scott. CPM'10 Proceedings of the 21st annual conference on Combinatorial pattern matching. ISBN 3-642-13508-0 978-3-642-13508-8 LITERATURA 57 [19] HOPCROFT J. An n log n algorithm for minimizing states in a nite automaton. Proc. Inter. Symp. on the Theory of Machines and Computations. Academic Press, Haifa, Israel, 1971, 189196. [20] HUNT E., ATKINSON M., IRVING R. A Database Index to Large Biological Sequences. The VLDB J., 7(3):139148, 2001. [21] IRVING Robert W., LOVE Lorna. The sux binary search tree and sux AVL tree. Journal of Discrete Algorithms, Volume 1 Issue 5-6, October 2003 [22] JACOBSON Guy. Space-Ecient Static Trees and Graphs. SFCS '89 Proceedings of the 30th Annual Symposium on Foundations of Computer Science ISBN 0-8186-1982-1 [23] KÄRKKÄINEN Juha. Sux cactus: A cross between sux tree and sux array. Lecture Notes in Computer Science, 1995, Volume 937/1995, 191-204. [24] KÄRKKÄINEN J. Repetition-Based Text Indexes. Ph. d., University of Helsinki, 1999 [25] KÄRKKÄINEN Juha, SANDERS Peter, BURKHARDT Stefan. Simple Linear Work Sux Array Construction. Journal of the ACM, Volume 53 Issue 6, November 2006 [26] KING, Robert C.; STANSFIELD, William D.; MULLIGAN, Pamela K. A Dictionary of Genetics. Seventh Edition. New York : Oxford University Press, 2006. 608 s. ISBN 0-19-530762-3. [27] KNUTH Donald. Big Omicron and big Omega and big Theta. ACM SIGACT News, Volume 8 Issue 2, April-June 1976 [28] KNUTH Donald, MORRIS James, PRATT Vaughan. Fast pattern matching in strings. 1977, SIAM Journal on Computing 6 (2): 323350. [29] KNUTH Donald. The Art of Computer Programming. Volume 3: Sorting and Searching (2nd ed.). Addison-Wesley. ISBN 0201896850. [30] KO Pang, ALURU Srinivas. Space ecient linear time construction of sux arrays. Combinatorial Pattern Matching (CPM 03). LNCS 2676, Springer, 2003, pp 203210. 58 LITERATURA [31] LAKATOS Tomá². FM-Index implementation. Diploma Thesis, Czech Technical University in Prague, 2008 [32] MÄKINEN Veli, NAVARRO Gonzalo, SIRÉN Jouni, VÄLIMÄKI Niko. Storage and Retrieval of Individual Genomes. Research in Computational Molecular Biology - RECOMB , pp. 121-137, 2009. [33] MANBER Udi, MYERS Gene. Sux arrays: a new method for on-line string searches. 1991, SIAM Journal on Computing, Volume 22, Issue 5 (October 1993), pp. 935948. [34] MAYER Alan, Dimmock David, ARCA Marjorie, BICK David, VERBSKY James, WORTHEY Elizabeth, JACOB Howard, MARGOLIS David A timely arrival for genomic medicine Genetics in Medicine, March 2011. ISSN 1098-3600. [35] MELICHAR Bo°ivoj, HOLUB Jan, POLCAR Tomá². Text searching algorithms. eské vysoké u£ení technické v Praze, Listopad 2005 [36] MELICHAR Bo°ivoj. Jazyky a p°eklady. eské vysoké u£ení technické v Praze, 2007 ISBN 978-80-01-02776-9 [37] MIHULKA Stanislav Kapavka ukradla kousek lidské DNA [online]. 2011-02-17 [cit. 2011-03-16] Dostupné z WWW: <http://www.osel.cz/index.php?clanek=5554> [38] PHOOPHAKDEE Benjarath, ZAKI Mohammed. Genome-scale disk-based sux tree indexing. SIGMOD '07 Proceedings of the 2007 ACM SIGMOD international conference on Management of data ISBN 978-1-59593-686-8 [39] PHOOPHAKDEE Benjarath, Zaki Mohammed. Trellis+: An Eective Approach for Indexing Massive Sequence. Pacic Symposium on Biocomputing, 2008 [40] SADAKANE Kunihiko. Compressed Text Databases with Ecient Query Algorithms Based on the Compressed Sux Array. ISAAC '00 Proceedings of the 11th International Conference on Algorithms and Computation. ISBN 3-540-41255-7 [41] SADAKANE Kunihiko. New text indexing functionalities of the compressed sux arrays. Journal of Algorithms, Volume 48 Issue 2, September 2003 LITERATURA 59 [42] SALOMON David, MOTTA Giovanni. Handbook of Data Compression. 5th ed., Springer, 2010, XXII, 1361 p. ISBN 978-1-84882-902-2. [43] STONE Carol Leth. The basics of biology. Westpost, Connecticut : Greenwood Press, 2004. 280 s. ISBN 0313317860. [44] SUTINEN Erkki, TARHIO Jorma. On Using q-Gram Locations in Approximate String Matching. ESA '95 Proceedings of the Third Annual European Symposium on Algorithms. ISBN 3-540-60313-1. [45] TATA Sandeep, HANKINS Richard, PATEL Jignesh. Practical Sux Tree Construction. VLDB '04 Proceedings of the Thirtieth international conference on Very large data bases - Volume 30 ISBN 0-12-088469-0 [46] UKKONEN Esko. On-line construction of sux trees. 1995, Algorithmica 14 (3): 249260. doi:10.1007/BF01206331 [47] VENTER Craig. Synthetic life Ve°ejné prohlá²ení, 20. kv¥ten 2010, Craig Venter Institute Dostupné z WWW: <http://www.ted.com/talks/craig_venter_unveils_synthetic_life.html> [48] VIJG Jan. Aging of the Genome : The dual role of DNA in life and death. First edition. New York : Oxford University Press, 2007. 372 s. ISBN 9780198569220. [49] WEINER Peter. Linear Pattern Matching Algorithms. Switching and Automata Theory, 1973. SWAT '08. ISSN: 0272-4847 [50] DNA Interactive [online]. 2011 [cit. 2011-03-06]. Dostupné z WWW: <www.dnai.org>. [51] For the First Time, DNA Sequencing Technology Saves A Child's Life .[online]. 2011 [cit. 2011-03-16]. Dostupné z WWW: <http://www.popsci.com/science/article/2011-01/ dna-sequencing-appears-have-saved-its-first-child>. [52] Inverted index. [online]. [cit. 2011-04-20]. Dostupné z WWW: <http://en.wikipedia.org/wiki/Inverted_index> 60 LITERATURA [53] BLAST http://blast.ncbi.nlm.nih.gov/Blast.cgi [54] GenBank http://www.ncbi.nlm.nih.gov/sites/entrez?db=nucleotide [55] IBM Scientists Use DNA Scaolding To Build Tiny Circuit Boards [online]. 2009- 08-17 [cit. 2011-03-16]. Dostupné z WWW: <http://www-03.ibm.com/press/us/en/pressrelease/28185.wss>. [56] Geobacter Sulfurreducens [online]. [cit. 2011-03-16] Dostupné z WWW: <http://www.ebi.ac.uk/2can/genomes/bacteria/Geobacter_sulfurreducens. html> [57] Rhodopseudomonas Palustris [online]. [cit. 2011-03-16] Dostupné z WWW: <http://www.ebi.ac.uk/2can/genomes/bacteria/Rhodopseudomonas_ palustris.html> [58] Real world applications of bioinformatics [online]. [cit 2011-03-16] Dostupné z WWW: <http://www.ebi.ac.uk/2can/bioinformatics/bioinf_realworld_1.html> [59] The Human Genome Project Completion: Frequently Asked Questions [online]. [cit 2011-03-20] Dostupné z WWW: <http://www.genome.gov/11006943> [60] 23andme - genetics just got personal [online]. [cit 2011-03-20] Dostupné z WWW: <http://www.23andme.com> [61] City uses DNA to ght dog poop [online]. 2008-09-16 [cit. 2011-03-16] Dostupné z WWW: <http://uk.reuters.com/article/2008/09/16/uk-israel-dogs-idUKLG37942520080916> [62] Rakovinný genom poprvé celý rozlu²t¥n [online]. 2008-11-21 [cit. 2011-03-16] Dostupné z WWW: <http://www.gate2biotech.cz/rakovinny-genom-poprve-cely-rozlu/> [63] First Early Human Genome Sequenced [online]. 2010-02-10 [cit. 2011-03-16] Dostupné z WWW: <http://www.popsci.com/science/article/2010-02/ first-genome-ancient-human> [64] Japanese Researchers Announce Plan to Resurrect Woolly Mammoth Within Five Years [online]. 2011-01-18 [cit. 2011-03-16] Dostupné z WWW: <http://www.popsci.com/science/article/2011-01/ japanese-researchers-plan-resurrect-woolly-mammoth-within-five-years>