U računarskoj nauci, niz sufiksa je sortirani niz svih sufiksa stringa. To je struktura podataka koja se koristi, između ostalog, u indeksima kompletnog teksta, algoritmi za kompresiju podataka unutar polja bioinformatike.[1]

Suffix array
Tip Array
Smislili Manber & Myers 1990
Time complexity

in big O notation

Prosek Najgori slučaj
Vreme
Konstrukcija

Nizovi sufiksa su predstavili Manber & Myers 1990 kao jednostavnu, prostorno efikasnu alternativu sufiks drvima. Nezavisno su otkrivene od strane Gaston Gonnet u 1987 pod imenom PAT niz.[2]

Definicija uredi

Neka je   string i neka je   označi podstring od   koje je od   do  .

Niz sufiksa   od   je sada definisan kao niz celih brojeva koji daju startne pozicije sufiksima od   u leksikografskom redu. Ovo znači, da ulaz   sadrži startnu poziciju od  -tog najmanjeg sufiksa u   i tako za svako  :  .

Primer uredi

Uzmite u obzir tekst  =banana$ da je indeksiran:

Tekst se završava specijalnim stražarskim znakom $ koji je poseban i leksikografski manji od bilo kog drugog karaktera. Tekst ima sledeće sufikse:

Suffix i
banana$ 1
anana$ 2
nana$ 3
ana$ 4
na$ 5
a$ 6
$ 7

Sufiksi mogu biti poređani u rastućem poretku:

Suffix i
$ 7
a$ 6
ana$ 4
anana$ 2
banana$ 1
na$ 5
nana$ 3

Niz sufiksa   sadrži startne pozicije ovih sortiranih sufiksa: Niz sufiksa sa sufiksaima ispisanim vertikalno ispod radi jasnoće: Na primer,   sadrži vrednost 4, i premda referira na sufiks koji počinje na poziciji 4 unutar  , što je sufiks ana$.

Povezanost sa sufiks drvima uredi

Nizvi sufiksa su usko povezani sa sufiks drvima:

  • Nizovi sufiksa mogu da se konstruišu izvođenjem prelaza prvo u dubinu na drvetu sufiksa. Niz sufiksa odgovara oznakama listova datim u redu u kome su posećene tokom prolaska, ako su ivice posećene u leksikografskom redu njihovog prvog karaktera.
  • Sufiks drvo može da se konstruiše u linearnom vremenu korišćenjem kombinacije sufiksa i LCP niza. Za opis algoritma, pogledajte odgovarajući deo u  LCP array članku.

Pokazano je da svaki algoritam sufiks drveta može sistematski da se zameni sa algoritmom koji koristi sufiks nizove koji ima dodatne informacije (kao LCP niz) i rešava isti problem u istoj vremenskoj kompleksnosti.[3] Prednosti nizova sufiksa nad drvima sufiksa su poboljšani prostorni zahtevi, jednostavniji algoritmi u linearnom vremenu (tj., u poređenju sa Ukonenovim algoritmom) i poboljšana lokalnost keša.[1]

Prostorna efikasnost uredi

Nizove sufiksa su uveli Manber & Myers 1990 da bi poboljšali zahteve prostora sufiks drveća: Nizovi sufiksa čuvaju   celih brojeva. Pretpostavljajući da ceo broj zahteva 4 bajta, niz sufiksa zahteva   bajtova ukupno. Ovo je drastično manje od   bajtova koji su potrebni za imlementaciju preciznog drveta sufiksa.[4]

Međutim, u određenim priimenama, prostorni zahtevi nizova sufiksa mogu da budu previsoki. Analizirano u bitovima, niz sufiksa zahteva   prostora, a originalni tekst iz alfabeta veličine   zahteva samo   bitova. Za ljudski genom sa   and   niz sufiksa bi prema tome okupirao 16 puta više memorije nego sam genom.

Ovakva odstupanja su pokrenula trend prema kompresovanim nizovima sufiksa i BWT-zasnovanim celotekstualnim indeksima kao što je FM-index. Ove strukture podataka zahtevaju samo prostor unutar veličine teksta ili čak i manje.

Konstrukcioni algoritmi uredi

Sufiks drvo može da se napravi u   i može biti konvertovan u niz sufiksa prelaženjem drveta prvo u dubinu takođe u   , tako da postoje algoritmi koji mogu da izgrade niz sufiksa u  .

Naivni pristup za izgradnju niza sufiksa je korišćenjem algoritma za sortiranje koji je zasnovan na poređenju. Ovi algoritmi zahtevaju    sufiks poređenja, ali poređenje sufiksa radi u   vremenu, tako da je ukupno vreme ovog pristupa  .

Napredniji algoritmi uzimaju u korist činjenicu da sufiksi koji trebaju da se sortiraju nisu arbitrarni stringovi nego su povezani međuobno. Ovi algoritmi teže da dostignu sledeće ciljeve:[5]

  • minimalnu asimptotsku kompleksnost  
  • lakoću u prostoru, što znači malo ili bez radne memorije pored teksta i niza sufiksa
  • brzinu u praksi

Jedan od prvih algoritama koji su postigli sve ciljeve je SA-IS algoritam koji su napravili Nong, Zhang & Chan 2009. Algoritam je takođe jednostavan (< 100 LOC) i može biti nadograđen da istovremeno konstruiše LCP niz.[6]  SA-IS algoritam je jedan od najbržih poznatih algoritama za konstrukciju niza sufiksa. Pažljiva implementacija implementation by Yuta Mori Arhivirano na sajtu Wayback Machine (26. jul 2014) prevazilazi većinu drugih linearnih ili super-linearnih pristupa konstrukciji.

Pored vremenskih i prostornih zahteva, algoritmi za konstrukciju nizova sufiksa takođe variraju u zavisnosti od alfabeta koji podržavaju: konstantni alfabeti su alfabeti čija je veličina vezana za konstantu, celobrojni alfabeti gde su karakteri celi brojevi u rasponu zavisnom od   i generalni alfabeti gde su samo poređenja karaktera dozvoljena.[6]

Većina algoritama za konstrukciju nizova sufiksa je zasnovano na sledećim pristupima:[5]

  • Algoritmi dupliranja prefiksa su zasnovani na strategiji Karp, Miller & Rosenberg 1972. Ideja je da se nađu prefiksi koji poštuju leksikografsko slaganje sufiksa. Pretpostavljena dužina prefiksa se duplira u svakoj iteraciji algoritma dok prefiks ne postane poseban i donese rang povezanog sufiksa.
  • Rekurzivni algoritmi prate pristup algoritama konstrukcije sufiks drveta koje je napravio Farach 1997 da bi rekurzivno sortirali podset sufiksa. Podset se onda koristi da zaključi niz sufiksa za preostale sufikse. Oba od ovih nizova sufiksa se spajaju da bi izračunali konačni niz sufiksa.
  • Algoritmi za indukovano kopiranje su slični rekurzivnim algoritmima u smislu da koriste već sortiran podset da indukuje brzo sortiranje preostalih sufiksa. Razlika je u tome što ovi algoritmi služe iteraciju nad rekurzijom da bi sortirali označeni podset sufiksa. Anketa ove raznolike grupe algoritama je spojena od strane Puglisi, Smyth & Turpin 2007.

Poznati rekurzivni algoritam za celobrojne alfabete je DC3 / skew algoritam koji su napravili Kärkkäinen & Sanders (2003). Radi u linearnom vremenu i uspešno je korišćen kao bazična paralela[7] i eksterna memorija[8] algoritama za konstrukciju nizova sufiksa.

Skorašnji rad Salson et al. (2009) predlaže algoritam za obnavljanje niza sufiksa teksta koji je editovan umesto da se stvara novi niz sufiksa od početka. Čak i u teoretskoj vremenskoj kompleksnosti je brzina  , izgleda da radi dobro u praksi: eksperimentalni rezultati autora su pokazali da je njihova implementacija dinamičkih nizova sufiksa generalno efikasnija nego ponovno pravljenje ubacivanja nekoliko slova u originalni tekst.

Primene uredi

Niz sufiksa stringa može biti korišćen kao indeks da se brzo locira svaka pojava obrasca podstringa   unutar stringa  . Pronalaženje svake pojave obrasca je ekvivalentno traženju svakog sufiksa koji počinje sa podstringom. Zahvaljujući leksikografskom raspoređivanju, ovi sufiksi se grupišu zajedno u niz sufiksa i mogu da se efiksano pronađu uz dva binarna pretraživanja. Prvo pretraživanje locira početnu poziciju intervala, a druga određuje poziciju kraja:

    def search(P):
        l = 0; r = n
        while l < r:
            mid = (l+r) / 2
            if P > suffixAt(A[mid]):
                l = mid + 1
            else:
                r = mid
        s = l; r = n
        while l < r:
            mid = (l+r) / 2
            if P < suffixAt(A[mid]):
                r = mid
            else:
                l = mid + 1
        return (s, r)

Traženje obrasca podstringa   dužine   u stringu   dužine   zahteva   vremena, uz to da jedna komparacija sufiksa treba da uporedi   karaktera. Manber & Myers (1990) opisuju kako granica može da se poboljša na   vremena korišćenjem LCP informacija. Ideja je da poređenje obrazaca ne mora da ponovo upoređuje određene karaktere, kada se već zna su deo najdužeg čestog prefiksa obrasca i trenutnog intervala pretraživanja. Abouelhoda, Kurtz & Ohlebusch (2004) su poboljšali granicu još dalje i dostigli vreme pretraživanja   poznatog iz sufiks drveća.

Algoritmi za sortiranje sufiksa mogu da se koriste za izračunavanje Burrows–Wheeler transform (BWT). BWT zahteva sortiranje svih cikličnih permutacija stringa. Ako se ovaj string završava posebnim karakterom koji je leksikografski manji od svih drugih (tj., $), onda red sortirane rotirane BWT matrice korespondira redu sufiksa u nizu sufiksa. BWT premda može da bude izračunata u linearnom vremenu prvo konstruišući niz sufiksa teksta, a zatim dedukovanjem BWT stringa:  .

Nizovi sufiksa mogu takođe da se koriste za traženje podstringova u Example-Based Machine Translation, tražeći mnogo manje prostora nego puna phrase table koja se koristi u Statistical machine translation.

Mnogo dodatnih primena nizova sufiksa zahteva LCP array. Neke od ovih su opisani u application section.

Reference uredi

  1. ^ a b Abouelhoda, Kurtz & Ohlebusch 2002.
  2. ^ Gonnet, Baeza-Yates & Snider 1992.
  3. ^ Abouelhoda, Kurtz & Ohlebusch 2004.
  4. ^ Kurtz 1999.
  5. ^ a b Puglisi, Smyth & Turpin 2007.
  6. ^ Fischer 2011.
  7. ^ Kulla & Sanders 2007.
  8. ^ Dementiev et al. 2008.

Reference uredi

Spoljašnje veze uredi