ALG!4

ALG!4



214 Rozdział 8. Przeszukiwanie tekstdw

inicjacji tej tablicy. Funkcja inicjująca tablicę jest przewrotna-jest ona praktycznie identyczna z kmp z tą tylko różnicą, iż algorytm sprawdza zgodność wzorca., z nim samym!

int shiftlM];

int init_shifts(char -w)

(

int i,j;

Shift[0j =-l;

for !i=0,j=-l;i<M-l;i++,j++, shift[i]=j) whiie((j >=0)&&(W[i] !=w|j J)) j=shift[j];

)

Sens tego algorytmu jest następujący: tuż po inkrementacji i i j wiemy, żc pierwsze j znaków wzorca jest zgodne ze znakami na pozycjach: pfi-j-lj... p/i-lj (ostatniej pozycji w pierwszych ; znakach wzorca). Ponieważ jest to największe / spełniające powyższy warunek, zatem, aby nie ominąć potencjalnego miejsca wykrycia wzorca w tekście, należy ustawić shift/ij na j

a)    b)

a

n

a

u

a

s

a

11

a

ii

a

8

a

n

a

n

a

s

a

n

a

ii

a

s J

C)

d)

a

n

a

n

u

s

a

n

a

n

a

s

a

n

a

n

a

a

n

a

n

a s


Rys. 8-6.

Optymalne przesunięcia wzorca .. ananas ”.

e;

a

n

a

n

a

s

a

ii

a

n

a

s

Popatrzmy, jaki będzie efekt zadziałania funkcji initshifts na słowie „ananas” (patrz rysunek 8 - 6). Zacieniowanc litery oznaczają miejsca, w' których wystąpiła niezgodność wzorca z tekstem. W każdym przypadku graficznie przedstawiono efekt przesunięcia wzorca - widać wyraźnie, które strefy pokrywają się przed strefą zacieniowaną (porównaj rysunek 8 - 5). Przypomnijmy jeszcze, że tablica shift zaw iera nową wartość dla indeksu j, który przemieszcza się po wzorcu.

Algorytm K-M-P można zoptymalizować, jeśli znamy z góry wzorce, których będziemy poszukiwać. Przykładowo jeśli bardzo często zdarza nam się szukać w tekstach słowa „ananas”, to w funkcji kmp można „wbudować” tablicę przesunięć:

int kmp_ananas(char *t)


Wyszukiwarka

Podobne podstrony:
ALG 8 8.‘ 208 Rozdział 8. Przeszukiwanie tekstów Rys. H - 1. Algorytm typu
ALG!2 212 Rozdział 8. Przeszukiwanie teksfe Rys. 8 - 3. 1 Wyszukiwanie tekst przebadany tekst do
ALG!6 216 Rozdział 8. Przeszukiwanie tekslói8.2.2.Algorytm Boyera i Moore’a Kolejny algorytm, który
ALG!8 218 Rozdział 8. Przeszukiwanie tekstów for(i—M 1,j —M-l; j>0; i — , j—) while(t[i]!=włj)) (
ALG 0 220 Rozdział 8. Przeszukiwanie tekstwI iLi kowej i przenosząc otrzymaną wartość do następnego
ALG!0 210 Rozdział 8. Przeszukiwanie tekstów Zaprezentowany w tym paragrafie algorytm wykorzystuje k
ashmore3 214 Rekonstruowanie przeszłości cja tego, co zachodziło w takiej przestrzeni, dokonywana j
ALG&8 268 Rozdziału. Algorytmy numeryczne11.1.Poszukiwanie miejsc zerowych funkcji Jednym z częstych
ALG9 Rozdział 7Algorytmy przeszukiwania Pojęcie „przeszukiwania” pojawiało się w tej książce już ki
ALG 2 202 Rozdział 7. Algorytmy przeszukiwani! gdzie a jest współczynnikiem zapełnienia tablicy T. A
0929DRUK00001726 214 ROZDZIAŁ V, UST. 48 przejściu promienia z warstwy {m + l)-szej do m-tej przez
ALG6 Rozdział 7. Algorytmy przeszukiwania r > dzielenie modulo RmM: H(v) = v% Rmax Przykład: Dla
ALG 0 200 Rozdział 7. Algorytmy przeszukiwania Rekordy E i F zostały zapamiętane w momencie stwierdz
ALG 4 204 Rozdział 7. Algorytmy przeszukiwania i (gdzie a jest, tak jak poprzednio, współczynnikiem
ALG#4 234 Rozdział 9. Zaawansowane techniki programowania problemu. Mimo iź wersje iteracyjne i reku
ALG 8 258 Rozdział 10. Elementy algorytmiki grafa 1 Rys. 10- 10. Przeszukiwanie grafu „ w głąb Listu
ALG&0 260 Rozdział 10. Elementy algorytmiki grafów przebadane podczas przeszukiwania. Dopiero potem
ALG 4 274 Rozdział11. Algorytmy numeryczne (1,    7.00), // tablicy: wpisane sa dwie

więcej podobnych podstron