Sunteți pe pagina 1din 1

Algoritmul Kasai este destul de usor si lucreaz n O ( n) .

S ne uitm la cele dou sufixe continue n matrice de sufixe .


S pp ca indexurile lor n sufix ar fi i1 si i1 + 1. Dac LCP lor > 0 ,
atunci dac am sterge prima poz de la amndoi. Putem vedea cu
usurint c noile siruri de caractere va avea aceeasi ordine relativ .
De asemenea, se poate observa c LCP de noile siruri de caractere va
fi exact LCP - 1 .
S ne uitam acum la sirul care avem sufixul i prin eliminarea
primul su caracter . Evident, aceasta este o parte al sirului sufix
de asemenea . Indicele su fie i2 . S ne uitm la LCP
de sufixe i2 si i2 + 1. Se poate vedea c LCP va fi LCP cel putin
deja mentionat - 1. Acest lucru este asociat cu anumite proprietti
ale LCP matrice , n special , c
LCP ( i, j) = min ( lcpi , lcpi + 1 , ... , lcpj - 1 ) .
si, n cele din urm s facem algoritmul bazat pe cele de mai sus .
Vom avea nevoie de un vector suplimentar rank [ n ] , ce va contine
indicele n vector de sufixe a sufixului de pornire poz i .
n primul rnd ar trebui s calculeze LCP a sufixului cu rank [ 0 ] .
Atunci s repeta prin toate sufixele n ordine n care le ndeplinesc
n sir si se calculeaz LCP [ rank [ i] ] n mod naiv , dar pornind
de la LCP[ rang [ i - 1 ] ] - 1. Usor vedea c acum avem O ( n) algoritmul
pentru c pe fiecare pas LCP nostru descreste nu mai mult de 1
( cu exceptia cazului cnd rank [ i ] = n - 1 ) .

S-ar putea să vă placă și