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.