ALG!8

ALG!8



218 Rozdział 8. Przeszukiwanie tekstów

for(i—M 1,j —M-l; j>0; i — , j—) while(t[i]!=włj))

(

int x=shift[indeks(t[i])]; if(M-j>x) i+=M-i;

elsa

i+=x; if (i >=N)

return -1;

j“M-1;

ł

return i;

t

Algor>tm Boyera i Moorc’a, podobnie jak i K-M-P, jest klasy M+N - jednak jest on o tyle od niego lepszy, iż w przypadku krótkich wzorców i długiego alfabetu kończy się po około MW porównaniach. W celu obliczenia optymalnych przesunięć'1 autorzy algorytmu proponują skombinowanie powyższego algorytmu z tym zaproponowanym przez Knulha, Morrisa i Pralta. Celowość tego zabiegu wydaje się jednak wątpliwa, gdyż optymalizując sam algorytm, można w bardzo łatwy sposób uczynić zbyt czasochłonnym sam proces prekompilacji wzorca.

8.2.3.Algorytm Rabina i Karpa

Ostatni algorytm do przeszukiwania tekstów, który będziemy analizowali, wymaga znajomości rozdziału 7 i terminologii, która została w nim przedstawiona. Algorytm Rabina i Karpa polega bowiem na dość przewrotnej idei:

•    wzorzec n> (do odszukania) jest kluczem (patrz terminologia transformacji kluczowej w rozdziale 7) o długości M znaków, charakteryzującym się pewną wartością wybranej przez nas funkcji H. Możemy zatem obliczyć jednokrotnie Hw-H<w) i korzystać z tego wyliczenia w sposób ciągły.

•    tekst wejściowy / (do przeszukania) może być w taki sposób odczytywany. aby na bieżąco znać Mostatnich znaków1 2. Z tych M znaków wyliczamy na bieżąco H,=H(t).

Zakładając jednoznaczność wybranej funkcji H, sprawdzenie zgodności wzorca z aktualnie badanym fragmentem tekstu sprowadza się do odpowiedzi na pytanie: czy Hw jest równe //,? Spostrzegawczy Czytelnik ma jednak prawo pokręcić w tym miejscu z powątpiewaniem głową: przecież to nie ma prawa działać szybko! Istotnie, pomysł wyliczenia dodatkowo funkcji H dla każdego

1

   Rozważ np. wielokrotne występowanie takich samych liter we wzorcu.

2

   Na samym początku będzie to oczywiście M pierwszych znaków- tekstu.


Wyszukiwarka

Podobne podstrony:
ALG 8 8.‘ 208 Rozdział 8. Przeszukiwanie tekstów Rys. H - 1. Algorytm typu
ALG!0 210 Rozdział 8. Przeszukiwanie tekstów Zaprezentowany w tym paragrafie algorytm wykorzystuje k
ALG!2 212 Rozdział 8. Przeszukiwanie teksfe Rys. 8 - 3. 1 Wyszukiwanie tekst przebadany tekst do
ALG!4 214 Rozdział 8. Przeszukiwanie tekstdw inicjacji tej tablicy. Funkcja inicjująca tablicę jest
ALG!6 216 Rozdział 8. Przeszukiwanie tekslói8.2.2.Algorytm Boyera i Moore’a Kolejny algorytm, który
ALG 0 220 Rozdział 8. Przeszukiwanie tekstwI iLi kowej i przenosząc otrzymaną wartość do następnego
ALG9 Rozdział 7Algorytmy przeszukiwania Pojęcie „przeszukiwania” pojawiało się w tej książce już ki
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 2 202 Rozdział 7. Algorytmy przeszukiwani! gdzie a jest współczynnikiem zapełnienia tablicy T. A
ALG 4 204 Rozdział 7. Algorytmy przeszukiwania i (gdzie a jest, tak jak poprzednio, współczynnikiem
ALG 7 Rozdział 8Przeszukiwanie tekstów Zanim na dobre zanurzymy się w lekturę nowego rozdziału, nale
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 294 Rozdział 13. Kodowanie i kompresja danych jednak w przypadku zwykłych tekstów, zawierający

więcej podobnych podstron