Algorytm Karpa-Rabina
Z Wikipedii
Algorytm Karpa-Rabina jest algorytmem dopasowania wzorca - służy do lokalizowania w tekście określonego podciągu.
Dany jest wzorzec (złożony z m znaków) oraz przeszukiwany ciąg (złożony z n znaków; n > m). Problem dopasowania wzorca polega na znalezieniu takiego indeksu i, dla którego .
W algorytmie Karpa-Rabina wykorzystuje się funkcję mieszającą h. Przeglądane są wszystkie podciągi dla , ale bezpośrednie porównania podciągu yi z x (które jest bardzo kosztowne) ma miejsce tylko wtedy, gdy h(yi) = h(x).
O efektywności algorytmu decyduje konstrukcja funkcji mieszającej h - powinna istnieć funkcja N która niskim kosztem wyznacza h(yi + 1) na podstawie znanej już wartości h(yi). W praktyce traktuje się tekst, jako liczbę zapisaną w systemie o określonej podstawie (najczęściej biorąc jako wartości cyfr kody ASCII znaków).
Oczekiwany koszt obliczeniowy jest rzędu O(m + n).
Pseudokod (dane x, y, n, m):
- for to n − m do
- begin
- if Sx = Sy then
- begin
- porównaj ciąg z podciągiem
- if wynik porównania prawdziwy then zwróć indeks i
- end
- if Sx = Sy then
- end
- begin