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, SOUƒASNOST 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 E’ENÍ 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 E’ENÍ 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
E’ENÍ PAM…”OVÉ NÁROƒNOSTI 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.
UšIVATELSKÁ PÍRUƒKA
$ ./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.
UšIVATELSKÁ PÍRUƒKA
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 PILOšENÉ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>