Adam Górski – Przykłady algorytmów wyszukiwania wzorca w tekście

Transkrypt

Adam Górski – Przykłady algorytmów wyszukiwania wzorca w tekście
Adam GÓRSKI – V rok
Koło Naukowe Techniki Cyfrowej
Dr inŜ. Wojciech Mysiński – opiekun naukowy
Examples of text searching algorithms
Przykłady algorytmów wyszukiwania wzorca w tekście
Keywords: algorithm, text, key, search
Słowa kluczowe: algorytm, tekst, klucz, szukać
1. Algorytm KR (Karpa-Rabina)
W algorytmie tym zakładamy, Ŝe kaŜdy symbol jest liczbą dziesiętną. Wtedy tekst k będzie
liczbą k – cyfrową w układzie dziesiętnym. MoŜna więc utoŜsamić symbole z cyframi
dziesiętnymi. Nas interesuje wartość modulo 13, która jest obliczana.
Algorytm ten ma duŜe zastosowanie w praktyce poniewaŜ pozwala na szybkie znalezienie
szukanego wzorca.
2. Algorytm Boyera-Moore’a
W algorytmie tym porównuje się ostatni znak wzorca. JeŜeli liczba znaków we wzorcu
wynosi n to porównuje się znaki stojące na n-tej pozycji zarówno we wzorcu jak i w tekście. JeŜeli
liczba stojąca na n-tej pozycji w tekście nie wchodzi w znak wzorca wówczas moŜemy
przeskoczyć o całą długość wzorca. Ogromną zaletą tego algorytmu jest to, Ŝe wykonane skoki są
większe od 1 (poniewaŜ długość wzorca jest przewaŜnie większa od 1).
Jako przykład chciałbym przeanalizować wyszukiwanie wzorca nau w tekście: matematyka
to piękna nauka.
Nasz wzorzec ma trzy znaki więc porównujemy trzecią literę w teście z ostatnią literą
naszego wzorca. Pierwsze porównanie natrafia na literę t, która to nie występuje we wzorcu nau.
MoŜna więc przeskoczyć o długość wzorca (w tym przypadku o trzy znaki) do przodu.
Przeskakując jednak o długość wzorca pominęliśmy literę a, która we wzorcu występuje, jednak
poniewaŜ a występuje na drugiej pozycji a na końcu jest litera t nie ma ryzyka, Ŝe pominięty został
szukany tekst. Kolejne wyszukanie natrafia na literę a, która we wzorcu występuje na drugim
miejscu. NaleŜy więc skoczyć zaledwie o jedną pozycję tak, aby litery a pokrywały się i sprawdzić
czy trzecia litera we wzorcu nie odpowiada następnej literze w tekście. PoniewaŜ następna litera to
t moŜna przeskoczyć o kolejną długość wzorca do przodu. Następne porównanie znów natrafia na
literę a naleŜy więc ponownie ustawić wzorzec tak by litery się pokrywały. PoniewaŜ kolejne
porównywanie natrafia na odstęp, który równieŜ nie występuje we wzorcu równieŜ i w tym
przypadku moŜna przeskoczyć o całą długość wzorca. Dalsze porównywania natrafiają na odstęp
oraz literę ę oraz jeszcze raz odstęp, które nie występują we wzorcu więc wyszukiwanie jest
kontynuowane. Wreszcie kolejne wyszukiwanie natrafia na literę u, która jest ostatnią literą w
naszym kluczu. Sprawdzana jest więc przedostatnia litera naszego wzorca z literą poprzedzającą u
i okazuje się być identyczna. Sprawdzanie kontynuuje się w ten sposób aŜ do początku wzorca.
PoniewaŜ wszystkie litery w kluczu są identyczne z literami w tekście szukany wzorzec został
znaleziony.
Algorytm ten dzięki zastosowaniu skoków o długość wzorca pozwala na szybkie znalezienie
szukanego tekstu.
3. Algorytm KMP (Knutha-Morrisa-Pratta)
Algorytm Knuta-Morrisa-Pratta jest liniowym algorytmem wyszukiwania wzorca w teście.
Algorytmy liniowe wyszukiwania wzorca są z reguły najwolniejszymi. Podczas ich
stosowania wykonuje się największą liczbę porównań. Polegają one na kolejnym porównywaniu
wzorca w tablicy w celu znalezienia szukanej wartości.
W algorytmie tym stosuje się funkcję pomocniczą r obliczonej dla danego wzorca O(m).
Funkcja ta jest stosowana zamiast funkcji przejść d. Funkcja pomocnicza pozwala na efektywne
obliczenie funkcji przejść tylko wtedy, gdy jest ona niezbędna.
Stosuje się równieŜ funkcję prefiksową P dla wzorca, która zawiera informacje na temat
porównywania wzorca z samym sobą.
Wyszukiwanie liniowe moŜna zastosować gdy nie wiemy nic na temat struktury
przeszukiwanych danych. MoŜna równieŜ uŜywać tego algorytmu gdy struktura danych nie została
uporządkowana.
Literatura
[1] Cormen T.H., L e i s e r s o n C . E . , W i v e s t R . L . Wstęp do algorytmów, Wyd. 13,
Wydawnictwo WNT, Warszawa 1994.

Podobne dokumenty