Suffix array
I datalogi, en endelse vifte er en matrix , der specificerer de suffikser en tekststreng i leksikografisk rækkefølge.
eksempel
Overvej strengen = længde 11. Da den tomme streng også er et gyldigt suffiks, tilføjer vi slutmarkøren til slutningen af for at kunne udtrykke den tomme streng eller slutningen af . Strengen med de tilknyttede positioner for dens tegn er således:
abracadabra$
| jeg | 1 | 2 | 3 | 4. plads | 5 | 6. | 7. | 8. plads | 9 | 10 | 11 | 12. |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| -en | b | r | -en | c | -en | d | -en | b | r | -en | $ |
Denne streng har tolv suffikser, som også kan beskrives ved deres startposition ii :
| suffiks | jeg |
|---|---|
abracadabra$ |
1 |
bracadabra$ |
2 |
racadabra$ |
3 |
acadabra$ |
4. plads |
cadabra$ |
5 |
adabra$ |
6. |
dabra$ |
7. |
abra$ |
8. plads |
bra$ |
9 |
ra$ |
10 |
a$ |
11 |
$ |
12. |
Den tomme streng er leksikografisk mindre end ethvert suffiks af . Derfor er slutmarkøren ifølge konvention også leksikografisk mindre end nogen anden karakter i strengen. Således kan alle suffikser sorteres leksikografisk:
$
| suffiks | jeg |
|---|---|
$ |
12. |
a$ |
11 |
abra$ |
8. plads |
abracadabra$ |
1 |
acadabra$ |
4. plads |
adabra$ |
6. |
bra$ |
9 |
bracadabra$ |
2 |
cadabra$ |
5 |
dabra$ |
7. |
ra$ |
10 |
racadabra$ |
3 |
Repræsenteret som en matrixresultater {$, a$, abra$, …}.
Hvis den originale streng er kendt, kan hvert suffiks angives ved hjælp af indekset for det første tegn for at spare plads. Suffiksarrayet er en matrix af disse indekser i leksikografisk rækkefølge. For strengen abracadabra$er suffikset array således = : Suffikset "a" eller "a $" begynder ved det ellevte tegn, "abra" ved det ottende tegn osv.
{12,11,8,1,4,6,9,2,5,7,10,3}
Slutmarkøren $er nyttig, når du kombinerer flere strenge. For eksempel er det i = det umiddelbart klart, at teksten består af de to strenge og . Hvis der kun tages en streng i betragtning, kan dette suffiks ignoreres: Da den tomme streng altid sorteres leksikografisk før alle andre, går ingen oplysninger tabt i dette tilfælde.
abracadabra$mississippi$abracadabramississippi
Algoritmer
Der er et antal algoritmer til konstruktion af et suffiksarray ud fra en given tekst med længde n . Metoderne til sortering af suffikser kan groft opdeles i tre klasser: Iterativ, rekursiv og induceret sortering.
Iterativ delvis sortering
Den enkleste måde er at bruge en effektiv sammenligningsbaseret sorteringsalgoritme, der højst kræver sammenligninger. Da sammenligningen af to suffikser tager tid, er hele procedurens kørselstid . Yderligere udviklede algoritmer forbedrer dette ved at bruge resultaterne af delvise sammenligninger og dermed undgå overflødige sammenligninger.
Til dette formål betragtes kun det første bogstav i hvert suffiks, og der bygges et foreløbigt suffiksarray ud af dette, som endnu ikke har sorteret suffikser med det samme første bogstav indbyrdes. Dog er suffikser med forskellige indledende bogstaver allerede inkluderet i den rigtige rækkefølge. I et andet trin sorteres hver gruppe af suffikser med det samme indledende bogstav, så de sorteres korrekt med hensyn til de to første indledende bogstaver. Det tredje trin sorterer alle suffiksgrupper med to identiske første bogstaver, så de sorteres korrekt i forhold til de første fire, det fjerde trin, så de sorteres korrekt i forhold til de første otte osv. Efter trin sorteres hvert suffiks helt korrekt, og suffiksarrayet er helt opbygget. Hvert delvist trin er muligt i tide , således at den samlede driftstid opnås.
Denne klasse inkluderer den klassiske suffiks array-algoritme fra Manber og Myers samt algoritmen af Larsson og Sadakane, som er meget mere effektiv i praksis.
Rekursive algoritmer
Denne klasse af algoritmer er kun blevet undersøgt siden 2003. Stringens tegn er opdelt i to tegnstrenge x og y . Algoritmen kaldes derefter rekursivt på x . Med det således beregnede suffiksarray af x kan suffiksarrayet for y beregnes effektivt ("induceret"). Da opdelingen i x og y er kendt, kan suffikset array af læses fra den.
Ved smart at vælge x og y har de fleste af disse algoritmer en kørselstid på . Men fordi rekursion i praksis er dyrt, er det ikke altid at foretrække.
Fremkaldt sortering
Også her, med et allerede beregnet suffiks array af en tegnstreng x, beregnes (arrangeret) suffikset array af en tegnstreng y effektivt. I stedet for en rekursiv arbejdsmetode kan strengen f.eks. Køres flere gange i forskellige retninger. Tegnene er klassificeret i x eller y , delvist sorteret og yderligere sorteret i et senere trin på basis af andre delresultater. Algoritmerne i denne klasse er meget forskellige. Næsten alle har det til fælles, men at de normalt er hurtigere end rekursive algoritmer i praksis på trods af den ofte dårlige worst case runtime . De kræver generelt også betydeligt mindre lagerplads end andre algoritmer.
Den aktuelt hurtigste algoritme i denne klasse er den endelsen vifte inducerede sortering algoritme (SAIS for korte) af Nong, Zhang og Chan. Det har kun brug for en runtime i . SAIS-algoritmen viser sig også at være meget hurtig i praksis, når forskellige effekter såsom B. Cache-fejl tages i betragtning.
Ansøgninger
Når det er konstrueret, kan suffiksarrayet bruges som et indeks over teksten til effektivt at udføre efterfølgende operationer. Disse operationer inkluderer søgeforespørgsler og komprimeringsmetoder.
Præcise søgeforespørgsler (strengmatchning)
En nøjagtig søgeforespørgsel består af et søgemønster , der skal søges i en tekst . En tekstpassage tæller kun som en nøjagtig forekomst af, hvis hvert tegn i tekstpassagen stemmer overens. På denne måde adskiller disse forespørgsler sig fra de upræcise forespørgsler, hvor et specificeret antal afvigende tegn er tilladt. Det er på de præcise søgeforespørgsler mellem anmodninger beslutningsprocesser ( "Kom i før?"), Antal anmodninger ( "Hvor ofte i foran?") Og tælling anmodninger ( "På hvilke punkter er i foran?"), Afhængig af hvor anmodninger beslutningsprocesser om nødvendigt ved hjælp af nummeranmodninger og nummerforespørgsler kan besvares med enumerationsforespørgsler.
For at bestemme antallet af nøjagtige forekomster af skal alle suffikser, der begynder med , søges efter i suffiksarrayet for . Da suffiksarrayet er sorteret, er disse suffikser alle direkte bag hinanden og danner en blok. Derfor er det tilstrækkeligt at bestemme det leksikografisk mindste og leksikografisk største suffiks, der begynder med . Ved hjælp af binær søgning kan disse findes i, hvor i det følgende står for længden af og for længden af . Antallet af forekomster af er derefter lig med antallet af suffikser i denne blok. Dette gør det muligt at bestemme det samlede antal forekomster . Hvis der desuden kræves output fra startpositionerne for alle nøjagtige forekomster, skal værdierne af suffiksarrayet i blokken returneres i stedet. Runtiden for dette er hvor står for antallet af forekomster af in .
Raffinerede metoder kan opnå bedre driftstider ved hjælp af yderligere datastrukturer. Hvis den såkaldte LCP-array (længste fælles præfiks) er blevet bestemt, og der er konstrueret en passende RMQ-datastruktur (rækkevidden minimumsforespørgsel) til LCP-arrayet, kan beslutning og nummerforespørgsler i og optællingsforespørgsler besvares .
Konstruktion af et suffiksetræ
Suffiksarrayet for en tekst bruges ofte som et mellemliggende trin for at konstruere det tilknyttede suffikstræ i lineær tid. Suffikstræet kan derefter også bruges som et indeks til at besvare søgeforespørgsler.
kompression
Forskellige komprimeringsmetoder kan implementeres effektivt ved hjælp af suffiksarrayet. På denne måde kan faktoriseringen af LZ77- kompressionen implementeres i lineær tid. Derudover kan Burrows-Wheeler-transformation af teksten beregnes ud fra et eksisterende suffiks array med meget lidt indsats . For at gøre dette bestemmes og gemmes det tegn, der er nøjagtigt en position før suffikset i teksten, for hvert suffiks i suffikseringsarrayen. Den resulterende matrix er derefter identisk med Burrows-Wheeler-transformation af teksten og kan f.eks. Bruges til bzip2- komprimeringsmetoden.
historie
Suffix arrays blev oprindeligt udviklet af Gene Myers og Udi Manber i 1990 for at reducere hukommelsesforbruget sammenlignet med suffiksetræer . Efter et par år uden væsentlige fund har suffiksarrays været et populært forskningsemne siden omkring 2000. Siden da er der udviklet en række designalgoritmer, der har adskillige ønskelige egenskaber.
Algoritmer har eksisteret siden 1999, der er hurtigere end de eksisterende lineære tid algoritmer i de fleste applikationer, men i værste fald kræve en tid i området til . De første garanterede lineære tidsalgoritmer (dvs. dem med worst case runtime ) har kun været kendt siden 2003. Det har været kendt siden 2004, at suffiksarrays kan løse ethvert problem med samme tidskompleksitet som suffiksetræer . Siden da har suffiksarrays senest været den valgte metode til næsten alle opgaver med suffiks og strengesortering.
Fra 2005 blev den effektive opbevaring af suffiksarrays også overvejet ud over designet. Ud over rene suffiksarrays kan komprimerede suffiksarrays nu også konstrueres og bruges effektivt. De er også nyttige til komprimerede fuldtekstindekser baseret på Burrows-Wheeler-transformation .
litteratur
- Udi Manber, Gene Myers: Suffix arrays: en ny metode til online strengesøgning . I: SIAM Journal on Computing , bind 22, udgave 5, oktober 1993, s. 935-948.
- Pang Ko, Srinivas Aluru: Rumeffektiv lineær tidskonstruktion af suffiksarrays . I: Combinatorial Pattern Matching (CPM 03) . LNCS 2676, Springer, 2003, s. 203-210.
- Juha Kärkkäinen, Peter Sanders: Enkel lineær arbejdssuffiks array konstruktion . (PDF; 193 kB) I: Proc. 30. internationale kollokvium om automatik, sprog og programmering (ICALP '03) . LNCS 2719, Springer, 2003, s. 943-955.
- Enno Ohlebusch: Bioinformatikalgoritmer: Sekvensanalyse, genomlejringer og fylogenetisk rekonstruktion . Oldenbusch, Bremen 2013, uni-ulm.de
- Klaus-Bernd Schürmann, Jens Stoye: En inkompleks algoritme til hurtig suffiks array konstruktion . (PDF; 204 kB) I: Proceedings of ALENEX , 2005.
Weblinks
Individuelle beviser
- ↑ a b c Simon J. Puglisi, WF Smyth, Andrew H. Turpin: A Taxonomy of Suffix Array Construction Algorithms . I: ACM Computing Surveys (CSUR) 39.2 (2007)
- ↑ a b U. Manber, GW Myers: Suffix arrays: En ny metode til online strengesøgning . I Proceedings of the 1st ACM-SIAM Symposium on Discrete Algorithms (1990)
- ↑ a b J.N. Larsson, K. Sadakane: Hurtigere sortering af suffikser . I tech rep. LU-CS-TR: 99-214 , Dep. for datalogi, Lund Universitet, Sverige (1999)
- ^ Nong Ge, Sen Zhang, Wai Hong Chan: To effektive algoritmer til lineær tidssuffiksarraykonstruktion . I: IEEE-transaktioner på computere 60 , nr. 10 (oktober 2011), s. 1471-1484.
- ↑ Nataliya Timoshevskaya, Wu-chun Feng: SAIS-OPT: Om karakterisering og optimering af SA-IS-algoritmen til suffiksarraykonstruktion . I: 2014 IEEE 4th International Conference on Computational Advances in Bio and Medical Sciences (ICCABS) , 2014.
- ↑ Enno Ohlebusch: Bioinformatik algoritmer. Sekvensanalyse, genomlejringer og fylogenetisk rekonstruktion. Oldenbusch Verlag, Bremen 2013, ISBN 978-3-00-041316-2 , s.116 .
- ↑ Enno Ohlebusch: Bioinformatik algoritmer. Sekvensanalyse, genomlejringer og fylogenetisk rekonstruktion. Oldenbusch Verlag, Bremen 2013, ISBN 978-3-00-041316-2 , s. 120-125.
- ↑ Enno Ohlebusch: Bioinformatik algoritmer. Sekvensanalyse, genomlejringer og fylogenetisk rekonstruktion. Oldenbusch Verlag, Bremen 2013, ISBN 978-3-00-041316-2 , s. 117-118.
- ↑ Enno Ohlebusch: Bioinformatik algoritmer. Sekvensanalyse, genomlejringer og fylogenetisk rekonstruktion. Oldenbusch Verlag, Bremen 2013, ISBN 978-3-00-041316-2 , s. 113-114.
- ↑ Enno Ohlebusch: Bioinformatik algoritmer. Sekvensanalyse, genomlejringer og fylogenetisk rekonstruktion. Oldenbusch Verlag, Bremen 2013, ISBN 978-3-00-041316-2 , s.130 .
- ↑ Juha Kärkkäinen: Hurtig BWT i lille rum ved sortering efter blokformat. I: Teoretisk datalogi. Bind 387, nr. 3, 2007, s. 251 ( PDF; 227KB )
- ↑ S. Burkhardt, J. Kärkkäinen: Hurtig letvægts suffix matrix konstruktion og kontrol . I: Proceedings of the 14.th Annual Symposium CPM 2003
- ↑ P. Ko, S. Aluru: Pladsbesparende lineær tid konstruktion af suffix arrays . I: Proceedings of the 14.th Annual Symposium CPM 2003
- Ha Juha Kärkkäinen, Peter Sanders: Enkel lineær arbejdssuffiks array konstruktion . (PDF; 193 kB) In_ Proc. 30. internationale kollokvium om automatik, sprog og programmering (ICALP '03) . LNCS 2719, Springer, 2003, s. 943-955
- ↑ MI Abouelhoda, S. Kurtz, E. Ohlebusch: Udskiftning suffix træer med suffix arrays . I J. Disc. Algor. 2 , 1, 2004, s. 53-86
- ^ R. Grossi, J. Vitter: Komprimerede suffiksarrays og suffiks træer med applikationer til tekstindeksering og strengmatchning . I SIAM J. Comput. 35.2, 2005, s. 378-407
- ^ G. Navarro, V. Mäkinen: Komprimerede fuldtekstindekser . In_ ACM Comput. Serv. , 39, 1.2, 2007