-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathzaver.tex
68 lines (59 loc) · 4.22 KB
/
zaver.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
\chapter*{Záver}
\addcontentsline{toc}{chapter}{Záver}
V tejto práci sme sa zaoberali indexáciou potenciálne veľkej sady
čítaní tak, aby bolo možné vyhodnocovať dotazy na podreťazce dĺžky presne $k$.
Základným prístupom k problému bolo nájdenie $k$-nadslova
k čítaniam a vytvorenie pomocných polí a štruktúr, aby sme vedeli
odpovedať na dotazy o pôvodných čítaniach.
Popísali sme si spôsob, ako nájsť zaručene najkratšie $k$-nadslovo
v polynomiálnom čase, pokiaľ je nutný podgraf $k$-grafu čítaní
súvislý. Ďalej sme si popísali spôsob, ako vieme hľadať $k$-nadslovo
aj v nesúvislom $k$-grafe, pričom toto $k$-nadslovo bude dlhšie
od najkratšieho možného o najviac $(k-1)$-násobok počtu komponentov.
Taktiež sme si popísali, ako vieme s využitím náhody nájsť nejaké
o málo dlhšie nadslovo v čase lineárne závislom od veľkosti $k$-grafu.
Pri indexácii sme si popísali tri základné typy dotazov, na ktoré vieme
s využitím $k$-nadslova odpovedať.
Podobne ako spomenuté dotazy vieme riešiť aj zvyšné dotazy spomenuté v
článku N. Philippe a kol. \cite{gk_arrays}, spomenuté v prvej kapitole
tejto práce:
\begin{enumerate}
\item Ktoré čítania obsahujú daný podreťazec $f$? \\
Túto otázku sme riešili priamo v práci v sekcii \ref{sekcia:index_ktore}.
\item Koľko čítaní obsahuje daný podreťazec $f$? \\
Túto otázku vieme riešiť podobne, ako počet výskytov podreťazca
v čítaniach, stačí odlišne vypočítať pole počtov výskytov.
\item Na ktorých pozíciach v čítaniach sa nachádza daný podreťazec $f$? \\
Táto otázka sa dá zodpovedať pomocou rovnakých štruktúr, ako prvá.
Pri počítaní si nebudeme ukladať iba, ktoré čítanie sme práve našli,
uložíme si aj pozíciu v ňom.
\item Koľkokrát sa dohromady vyskytuje daný podreťazec $f$ v čítaniach? \\
Túto otázku sme riešili piamo v práci v sekcii \ref{sekcia:index_pocet}.
\end{enumerate}
Zvyšné dotazy sú len modifikáciou prvých štyroch, keď nás zaujímajú iba čítania,
ktoré daný podreťazec obsahujú iba raz. Takéto dotazy vieme spracovať s pomocou
malých prispôsobení navrhovaných dátových štruktúr.
Testovanie našej štruktúry ukázalo, že naša štruktúra je pre
väčšie $k$ efektívnejšia než CR-index \cite{cr_index}, zatiaľ čo pre menšie $k$
je od neho horšia. Na dátach pochádzajúcich zo sekvenovania s väčšou chybovosťou naša štruktúra síce zaberá
o niečo viac pamäte, ale dotazy vie spracovávať rýchlejšie.
V tejto práci sme neriešili chyby v čítaniach, keďže vieme odhadnúť, že každá
chyba v dátach môže $k$-nadslovo predĺžiť najviac o $2*k - 1$. Keďže je však
naša štruktúra efektívnejšia pre väčšie $k$, riešenie chýb môže patriť
k nevyhnutným krokom k použiteľnosti našej štruktúry pre relatívne veľké hodnoty $k$.
Na druhú stranu, s riešením chýb podobným ako v CR-indexe prichádzajú aj skryté úskalia. Jedným z nich
je nutnosť pri každom dotaze na podreťazec $r$ spracovať viacero reťazcov,
ktoré mohli vzniknúť ako oprava nejakého čítania, ktoré pôvodne $r$ obsahovalo.
Druhým z nich je odpovedanie na otázky o počte výskytov. Keďže niektoré $k$-tice
sú uložené v pozmenenej podobe, je nutné aj pri počítaní overovať jednotlivé
čítania.
Malým problémom, ktorý sme nepreskúmali je spôsob, akým sa dá vysporiadať sa
s dotazmi na podreťazce kratšie ako $k$. Keďže jediný problém spôsobujú začiatky
čítaní, jedno možné riešenie by mohlo využívať nejako vhodne reprezentované
pozície, na ktorých sa nachádza prvá $k$-tica z nejakého čítania.
Ďalším problémom do budúcnosti je otázka, či neexistuje ešte iný spôsob, ako
sformulovanť nadslovo, s pomocou ktorého by sa dali implementovať
ešte efektívnejšie štruktúry. Jedna možná formulácia je nadslovo so skóre,
v ktorom si môžeme dovoliť rozdeliť čítanie na dve časti za cenu nejakého
záporného skóre, do ktorého sa premietne nutnosť nejakým spôsobom uložiť
informáciu o tomto rozdelení.