Zaawansowane algorytmy i struktury danych/Wykład 1: Różnice pomiędzy wersjami
Linia 29: | Linia 29: | ||
<center><table> | <center><table> | ||
<tr> | <tr> | ||
<td>warunek1(j,s): dla każdego k <math> | <td>warunek1(j,s): dla każdego k <math> j<k\leq m\ \Rightarrow\ s>k</math> lub <math>x[k-s]=x[k]</math>,</td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
Linia 38: | Linia 38: | ||
</table></center> | </table></center> | ||
< | |||
<center>[[Grafika:zasd_1.jpg]]<br> Rysunek 1: Przesunięcie w algorytmie BM. Przypadek gdy <math>s=BMShift[j]<j</math>.</center> | |||
< | |||
Definiujemy dwa rodzaje przesunięć, każde z nich dotyczy sufiksu wzorca zaczynającego się od pozycji<math>j<m</math>. | |||
<math>BMShift'[j]=\min \{ s>0:\ warunek1(j,s) \},</math> | |||
<math>BMShift[j] =\min \{ s>0:warunek1(j,s) \textrm{ oraz } warunek2(j,s) \}</math>. | |||
< | |||
Definiujemy również | |||
<center> | |||
</ | <math>BMShift'[m]=BMShift[m]=m-P[m]=period(x)</math>.</center> | ||
< | Algorytm {BM} jest wersją algorytmu Naiwny-BM, w którym przeunięcie <math>i</math> o jeden zamieniamy na przesunięcie o<math>BMShift[j]</math>, zobacz Rysunek 2. | ||
{{algorytm| BM| algorytm_bm| | |||
<math>i:=0</math><br> | |||
'''while''' <math>i<n-m</math> '''do'''<br> | |||
<math>j:=m</math>; | |||
'''while''' <math>j>0</math> '''and''' <math>x[j]=y[i+j]</math> '''do'''<math>j:=j-1</math>;<br> | |||
'''if''' <math>j=0</math> '''then return''' true;<br> | |||
{ <math>niezmiennik(i,j)</math> \} <math>i:=i+BMShift[j]</math>; <br> | |||
'''return''' false; | |||
}} | |||
Udowodnimy potem, że algorytm ten ma złożoność liniową. Jednakże w przeciwieństwie do łatwejanalizy algorytmu KMP w tym przypadku analiza jest skomplikowana. Mamy tu przykład algorytmu, któregopoprawność jest dosyć oczywista, a analiza kosztu jest nietrywialna. | |||
<!--%************************************************************-->\begin{figure}%[htb]\begin{center}\includegraphics[width=12.3cm]{teksty_fig11.eps}\caption{ Historia algorytmu {BM} na przykładowych tekstach x, y.} <span id="figure2-6" \> \end{center}\end{figure}<!--%**********************************************************-->Jeśli zastąpimy tablicę <math>BMShift</math> przez <math>BMShift'</math> wówczas czas algorytmu BM staje się kwadratowy. Przykłademtekstów dla których osiągana jest wtedy złożoność kwadratowa są teksty:<center><math>x=ca(ba)^{k} \mbox{ oraz } y=a^{2.k+2}(ba)^{k}.</math></center>Pozostawiamy jako ćwiczenie podanie wzoru na liczbę porównań z tablicą <math>BMShift'</math> dla tych tekstów.<!--%--><!--%************************************************************-->\begin{figure}%[htb]\begin{center}\includegraphics[width=13.3cm]{teksty_fig12.eps}\caption{Działanie dwóch wersji algorytmu BM na przykładowych tekstach. Algorytm BM stosujący przesunięcie<math>BMShift'</math> wykonuje 30 porównań symboli więcej (rysunek z lewej strony) niż normalny algorytm BM stosującytablicę BM (rysunek prawej strony).<!--%BM with <math>D</math>-Shifts makes only 12 comparisons (right).-->} <span id="figure4.2" \> \end{center}\end{figure}<!--%**********************************************************--> | <!--%************************************************************-->\begin{figure}%[htb]\begin{center}\includegraphics[width=12.3cm]{teksty_fig11.eps}\caption{ Historia algorytmu {BM} na przykładowych tekstach x, y.} <span id="figure2-6" \> \end{center}\end{figure}<!--%**********************************************************-->Jeśli zastąpimy tablicę <math>BMShift</math> przez <math>BMShift'</math> wówczas czas algorytmu BM staje się kwadratowy. Przykłademtekstów dla których osiągana jest wtedy złożoność kwadratowa są teksty:<center><math>x=ca(ba)^{k} \mbox{ oraz } y=a^{2.k+2}(ba)^{k}.</math></center>Pozostawiamy jako ćwiczenie podanie wzoru na liczbę porównań z tablicą <math>BMShift'</math> dla tych tekstów.<!--%--><!--%************************************************************-->\begin{figure}%[htb]\begin{center}\includegraphics[width=13.3cm]{teksty_fig12.eps}\caption{Działanie dwóch wersji algorytmu BM na przykładowych tekstach. Algorytm BM stosujący przesunięcie<math>BMShift'</math> wykonuje 30 porównań symboli więcej (rysunek z lewej strony) niż normalny algorytm BM stosującytablicę BM (rysunek prawej strony).<!--%BM with <math>D</math>-Shifts makes only 12 comparisons (right).-->} <span id="figure4.2" \> \end{center}\end{figure}<!--%**********************************************************--> | ||
==TXT== | ==TXT== | ||
Różnica między <math>BMShift</math> i <math>BMShift'</math> wydaje się być podobna do tej między silnymiprefisko-sufiksami i prefikso-sufiksami w algorytmie KMP. W obu przypadkach różnica sprowadza się dowykorzystania jednego bitu informacji, niezgodności dwóch symboli. Podczas gdy nie robi to istotnej różnicy wpesymistycznej złożoności algorytmu KMP, w tym przypadku jest to znacząca różnica między czasemkwadratowym i liniowym. Porównajmy działanie algorytmu z przesunięciem <math>BMShift'</math> i of <math>BMShift</math> na tekstach(patrz rysunek)\\\centerline{ <math>x\ =\ cababababa</math> oraz <math>y\ =\ aaaaaaaaaababababa</math>.}<!--%--><!--%==================================================================================-->Okresem tekstu <math>x</math> jest każda liczba naturalna niezerowa <math>p</math> taka, że <math>x[i]=x[i+p]</math>, dla każdego i dlaktórego obie strony są zdefiniowane. Przez period(x) oznaczmy minimalny okres x. Okres jest {\em pełny} gdyjest dzielnikiem <math>|x|</math>. | Różnica między <math>BMShift</math> i <math>BMShift'</math> wydaje się być podobna do tej między silnymiprefisko-sufiksami i prefikso-sufiksami w algorytmie KMP. W obu przypadkach różnica sprowadza się dowykorzystania jednego bitu informacji, niezgodności dwóch symboli. Podczas gdy nie robi to istotnej różnicy wpesymistycznej złożoności algorytmu KMP, w tym przypadku jest to znacząca różnica między czasemkwadratowym i liniowym. Porównajmy działanie algorytmu z przesunięciem <math>BMShift'</math> i of <math>BMShift</math> na tekstach(patrz rysunek)\\\centerline{ <math>x\ =\ cababababa</math> oraz <math>y\ =\ aaaaaaaaaababababa</math>.}<!--%--><!--%==================================================================================-->Okresem tekstu <math>x</math> jest każda liczba naturalna niezerowa <math>p</math> taka, że <math>x[i]=x[i+p]</math>, dla każdego i dlaktórego obie strony są zdefiniowane. Przez period(x) oznaczmy minimalny okres x. Okres jest {\em pełny} gdyjest dzielnikiem <math>|x|</math>. |
Wersja z 12:23, 16 sie 2006
Zaawansowane algorytmy tekstowe I
Tekst jest ciągiem symboli, przyjmujemy żejest on zadany tablicą x[1..k] elementami której są symbole. Liczba jest długością (rozmiarem)tekstu.W większości naszych algorytmów jedyne operacje dopuszczalne na symbolach wejściowych to porównania dwóch symboli.
Postawowym problemem tekstowem jest problem string matchingu polegający na szukaniu wzorca wteście . Elementami tablic są symbole. Na kursie z ASD przerabialiśmy algorytm Knutha-Morrisa-Pratt(w skrócie KMP) i jego wariacje. Zaprezentujemy teraz bardziej zaawansowany algorytm dla tego problemu: algorytm Boyera-Moore'a (w skrócie BM). Pomimo tego, że jest jasne jak ten algorytm działa to jednak jegopełna analiza (złożoność, preprocessing) jest zawansowana.
Algorytm Boyera-Moore'a
Algorytm przykłada x do tesktu y startując od pozycji i-tej w y, sprawdzamy czy Parser nie mógł rozpoznać (nieznana funkcja „\y”): {\displaystyle x[1..m]\ =\y[i+1..i+m]} . Pozycja wędruje ze strony lewej do prawej. Jednakże, w przeciwieństwie do algorytmuKMP, równość sprawdzamy od strony prawej do lewej. Zaczniemy od algorytmu naiwnego.
Algorytm Naiwny-BM
'while do
,br>
while and do
if then return true;
{zachodzi niezmiennik}
return false;
Jeśli zachodzi równość to stwierdzamy, że znaleźliśmy wystąpienie x i kończymy. W przeciwnym razie mamy niezmiennik:
Korzystając z niezmiennika liczymy większe przesunięcie niż 1. Przesunięcie jest bezpieczne gdy jesteśmy pewni że w każdej sytuacji pomiędzy oraz nie zaczyna się żadne wystąpienie wzorca x wtekście y. Przypuśćmy, że x zaczyna od pozycji (zobacz Rysunek 1, gdzie jest przedstawiony przypadek .)
Zachodzi wtedy następujący warunek:
warunek1(j,s): dla każdego k lub , |
warunek2(j,s): { własność niezgodności }. |

Rysunek 1: Przesunięcie w algorytmie BM. Przypadek gdy .
Definiujemy dwa rodzaje przesunięć, każde z nich dotyczy sufiksu wzorca zaczynającego się od pozycji.
.
Definiujemy również
Algorytm {BM} jest wersją algorytmu Naiwny-BM, w którym przeunięcie o jeden zamieniamy na przesunięcie o, zobacz Rysunek 2.
Algorytm BM
while do
;
while and do;
if then return true;
{ \} ;
return false;
Udowodnimy potem, że algorytm ten ma złożoność liniową. Jednakże w przeciwieństwie do łatwejanalizy algorytmu KMP w tym przypadku analiza jest skomplikowana. Mamy tu przykład algorytmu, któregopoprawność jest dosyć oczywista, a analiza kosztu jest nietrywialna.
\begin{figure}%[htb]\begin{center}\includegraphics[width=12.3cm]{teksty_fig11.eps}\caption{ Historia algorytmu {BM} na przykładowych tekstach x, y.}
\end{center}\end{figure}Jeśli zastąpimy tablicę przez wówczas czas algorytmu BM staje się kwadratowy. Przykłademtekstów dla których osiągana jest wtedy złożoność kwadratowa są teksty:TXT
Różnica między i wydaje się być podobna do tej między silnymiprefisko-sufiksami i prefikso-sufiksami w algorytmie KMP. W obu przypadkach różnica sprowadza się dowykorzystania jednego bitu informacji, niezgodności dwóch symboli. Podczas gdy nie robi to istotnej różnicy wpesymistycznej złożoności algorytmu KMP, w tym przypadku jest to znacząca różnica między czasemkwadratowym i liniowym. Porównajmy działanie algorytmu z przesunięciem i of na tekstach(patrz rysunek)\\\centerline{ oraz .}Okresem tekstu jest każda liczba naturalna niezerowa taka, że , dla każdego i dlaktórego obie strony są zdefiniowane. Przez period(x) oznaczmy minimalny okres x. Okres jest {\em pełny} gdyjest dzielnikiem . Jeśli jest własciwym (mniejszym od ) dzielnikeim to x nazywamy rozkładalnym, wprzeciwnym przypadku x nazywamy słowem {\em pierwotnym} (albo nierozkładalnym). Na przykład jest rozkładalne, natomiast jest pierwotne.\myskip %Lemat\(Kombinatoryczna własność słów pierwotnych) Jeśli jest pierwotne to x nie ma wystąpienia wewnątrz xx. \myskip\begin{figure}[bh]\begin{center}\includegraphics[width=6cm]{teksty_fig13.eps}\caption{Jeśli tekst x jest pierwotny to taka sytuacja jest niemozliwa (x nie może wystepowac wewnatrz tekstuxx.) } \end{center}\end{figure}\myskip Własność ta {\em mówi}, że nie może zajść sytuacja przedstawiona na Rysunku #pierwotne.Dowód własności korzysta z tzw. {\em lematu o kresowości} dla tekstów: \ jeśli x ma okresy p, q oraz to jest również okresem x. \myskip Popatrzmy na rysunek, gdyby x wystepowal w xx to xxmiałby dwa okresy p,q, takie, że , z lematu o okresowości wynika wtedy, że xx ma okres mniejszyof i będący dzielnikiem . Zatem słowo x nie byłoby pierwotne, co jest sprzeczne z założeniem.\myskip Jako ćwiczenie pozostawiamy problem sprawdzania w czasie liniowym czy słowo x jest pierwotne. Dokładne oszacowanie na liczbę porównań w algorytmie BM wynosi około 3n. Dowód tego faktu jest jednakzbyt skomplikowany. Pokażemy tutaj oszacowanie górne 4n oraz dolne 3n. Zaczniemy od prostszego oszacowaniadolnego. Zastosujmy algorytm BM do tekstów: , gdzie usuwamy ostatni symbol,oraz . \noindentPozostawimay jako ćwiczenie sprawdzenie tego, że dla tych danych liczba porównań symboli wynosi wprzybliżeniu , gdzie jest długością .\myskipPrzejdziemy teraz do górnego oszacowania . \myskipJeśli się głębiej zastanowić to liniowy czasalgorytmu BM jest zdumiewający, algorytm zapomina jaka część tekstu y pasowała do wzorca x, i sprawdzawielokrotnie te same fragmenty które już poprzednio były sprawdzone z wynikem pozytywnym. Zjawisko takie niema miejsca w algorytmie KMP, gdzie raz sprawdzony pozytywnie symbol w tekście y nie jest już nigdy więcejsprawdzany. \begin{figure}%[htb]\begin{center}\includegraphics[width=15cm]{teksty_fig14.eps}\caption{Segment tekstu y jest aktualnym dopasowaniem, oznacza najkrótszy pełny okressufiksu wzorca x, jest również okresem aktualnego dopasowania. Zaciemniony obszar jest częścią tekstu,która nigdy wcześniej nie była odwiedzana (sprawdzana). } \end{center}\end{figure} Załóżmy, że w danej nieterminalnej iteracji algorytm BM sprawdza segment tekstu y, anstępnie wykonuje przesunięcie, gdzie oraz. Przez \textit{aktualne dopasowanie} rozumiemy aktualnie sprawdzany segment tekstu y bez pozycji, na którejwystępuje niezgodność symboli, (patrz Rysunek #figure3-4). Niech będzie najmniejszym pełnym okresem tekstu , a niech będzie słowemodpowiadającym temu okresowi. Inaczej mówiąc zakładamy, że mamy taką sytuację jak naRysunku #figure3-4). Zauważmy, że rozważamy tu okresowość w dwóch aspektach: jako liczbę(długość) oraz jako słowo. \noindent Zdefiniujmy własność pierwszego odwiedzenia: \begin{quotation}\noindent: \ pozycje w segmencie nie były sprawdzane w poprzednich iteracjach.\end{quotation}\myskipUdowodnimy następujący silny i całkowicie nietrywialny fakt. \noindent Lemat}.\ Własność {\em pierwszego odwiedzenia zachodzi w każdej nieterminalnejiteracji algorytmu BM. \noindent Dowód będzie polegał na zauważeniu kilku drobniejszych własności. Następująca własnośćwynika w sposób oczywisty z założeń: \ jest słowem-okresem aktualnego dopasowania oraz jestsufiksem wzorca.\myskipWprowadzimy kluczowe pojęcie {\em pozycji krytycznej} jako pozycji w aktualnym dopasowaniu, która jest odległa od końca aktualnego dopasowania o wielokrotność ,oraz od początku co najmniej o .\myskipMówimy, że poprzednie dopasowane kończyło się na pozycji w tekście , jeśli wpewnej poprzedniej iteracji koniec wzorca był przyłożony do pozycji w .\paragraph{Własność 1} żadne poprzednie dopasowanie nie kończy się na pozycji krytycznej w aktualnym dopasowaniu. \noindent Dowód własności 1}.\ Dowód ma charakter {\em filozoficzny: gdyby własność 1 dla pewnejiteracji nie zachodziła to by tej iteracji nie było. Gdyby poprzednia iteracja kończyła się na pozycjikrytycznej to następnym końcem dopasowania byłaby pozycja . W ten sposób byśmy przeskoczyliaktualną iterację. Zatem własność 1 zawsze zachodzi.\paragraph{Własność 2} Wielkość wspólnej częśc aktualnego dopasowania idanego poprzedniego dopasowania jest mniejsza od . \myskip Dowód własności 2.\ Z własności 1wynika, że koniec poprzedniego dopasowania nie kończy się na pozycji krytycznej. Gdyby wspólna część byławiększa niż to słowo pierwotne występowałoby wewnątrz słowa , co zaprzecza własności słówpierwotnych. Zatem musi zachodzić własność 2.\noindent \paragraph{Własność 3.}\ Jeśli poprzednie dopasowanie kończy się na pozycji wewnątrzaktualnego dopasowania i zawiera się całkowicie w aktualnym dopasowaniu. Wtedy nie ma krytycznej pozycji naprawo od .\myskipDowód własności 3.\ Przypuśćmy, że jest pewna pozycja krytyczna na prawo od . Wówczas jest dobrym kandydatem na przesunięcie w Algorytmie {BM}. Ponieważ algorytm BM wybiera najmniejszeprzesunięcie spośród kandydatów na przesunięcie spełniających warunek1 i warunek2 otrzymamy nową pozycję jako koniec następnego dopasowania. Wynika stąd, że mamy sekwencję , końcowych pozycjipoprzednich dopasowań z których każda jest mniejsza od . Wszystkie te liczby są różnymi liczbaminaturalnymi, w pewnym momencie jedna z nich musi być równa . W tym momencie mamy poprzednie dopasowaniekończące się na pozycji krytycznej . Przeczy to własności 2. Zatem własnośc 3 musi zachodzić.\paragraphDowód własności pierwszego odwiedzenia.\Trzy własności przed chwilą udowdnione wystarczją do tego, żeby uzasadnienie własności pierwszego odwiedzeniabyło proste. Dowód jest przez zaprzeczenie. Przypuśćmy, że w pewnej poprzedniejiteracji odwiedziliśmy {\em zabroniony} obszar aktualnego dopasowania (zacienioną częśćtekstu y na Rysunku #figure3-4). Niech będzie końcem tego poprzedniego dopasowania. Zatem nie jest pozycją krytyczną, na prawo od niej jestpewna pozycja krytyczna. Jest to sprzeczne z własnością 3.Kończy to dowód własności pierwszego odwiedzenia.\myskipMożemy teraz przystąpić do ostatecznej analizy algorytmu BM. \begin{theorem} \\Algorytm BM wykonuje co najwyżej porównań symboli do momentu znalezieniapierwszego wystąpienia wzorca lub zakończenia szukania z wynikiem negatywnym.Algorytm działa w czasie , współczynnik kosztu nie zależy od rozmiarualfabetu.\end{theorem} \noindentZ własności {\em pierwszego odwiedzenia} wynika bezpośrednio: jeśli jest przesunięciem w nieterminalnej iteracji, to co najwyżej pozycji tekstu y sprawdzanych wtej iteracji było sprawdzane w poprzednich iteracjach. \myskip Koszt każdej nieterminalnej iteracji możnarozdzielić na dwie części.
- Koszt odwiedzenia symboli w tekście po raz pierwszy,
- Potrojone przesunięcie.
\subsection*{Tablica Prefisko-Prefiksów}W fazie {\em preprocessing}u algorytmu BM (obliczanie tablicy ) potrzebny będzie algorym liczeniatablicy prefikso-prefiksów. Modyfikacją tablicy prefikso-sufiksów jest tablica prefikso-prefiksów: jest długośćią najdłuższego prefiksu tekstu x, którego wystąpienie rozpoczyna się na pozycji .Bardziej formalnie:
\begin{center} jest prefiksem \}.\end{center}\myskip Przykład.\ Dla mamy:Jako ćwiczenie pozostawiamy redukcję problemu liczenia tablicy do liczenia tablicy , co jużpotrafimy. przeskalowanym względem s) jest małe, patrz rysunek. Przedstawimy niezależny interesujący algorytm liczenia tablicy . W algorytmie liczymy tablicę PREFprzeglądając tekst od lewej do prawej. Załóżmy, że przetwarzamy pozycję -tą (gdzie ), wtedyzachodzi następujący niezmiennik (patrz Rysunek #pref):\begin{quotation}\noindentwartości dla są już policzone\\ jest pozycją maksymalizującą .\end{quotation}\noindent Dodajemy specjalny znacznik końca tekstu na pozycji w .Korzystamy z dodatkowej prostej funkcji : \begin{center} = takie, że .\end{center}Jeśli nie ma takiego to . Wartość PREF[1] nie jest dla nas interesująca. \begin{figure}%[hb]\begin{center}\includegraphics[width=15.5cm]{teksty_fig2.eps}\caption{Typowa sytuacja w algorytmie Prefikso-Prefiksy. Liczymy PREF dla nowej pozycji , zakladając, żeznamy wartości tablicy PREF dla pozycji wczesniejszych. } \end{center}\end{figure}\myskip\begin{center}\begin{minipage}{12cm}\vskip0.3cm \hspace*{0.6cm}\textbf{Algorytm} ;\vskip 0.1cm \noindent\hspace*{1.2cm}; ;\vskip 0.1cm \noindent \hspace*{1.2cm}\textbf{for} \textbf{to} \textbf{do}\vskip 0.1cm \noindent \hspace*{1.8cm};\ ;\vskip 0.1cm \noindent\hspace*{1.8cm}\textbf{if} \textbf{then }\\\hspace*{2.4cm};\\\hspace*{2.4cm} \textbf{if} \textbf{then} :=; \\\hspace*{1.8cm}\textbf{else if} \textbf{then}\\\hspace*{2.4cm}\\\hspace*{1.8cm}\textbf{else}\\\hspace*{2.4cm};\\\hspace*{2.4cm};\ ;\\\vskip0.4cm\end{minipage}\end{center}\myskipNajważniejszą częścią algorytmu jest przekopiowywanie, w pewnych sytuacjach, wartości wcześniejpoliczonych na . Dzieje się to wtedy, gdy jest duże i jest małe ( jestwartością przeskalowaną względem ). Pokażemy że czas konstrukcji tablcy jest liniowy, podstawową częścią będzieobliczanie tablicy . Używając algorytmu liczenia obliczamy w czasie liniowym symetryczną tablicę sufisko-sufiksów: jest długością maksymalnego sufiksu tekstu który kończy się na pozycji. Tablica odpowiada tablicy obliczonej dla odwróconego wzorca . \begin{center}\begin{minipage}{10cm}\vskip0.3cm\hspace*{0.6cm}\textbf{Algorytm} Sufikso-sufiksy;\\\hspace*{1.2cm}:=odwrócony wzorzec ;\\\hspace*{1.2cm}oblicz tablicę dla tekstu ;\\\hspace*{1.2cm}\textbf{for each {} do}\ \ ;\\\vskip0.4cm\end{minipage}\end{center}\myskip\begin{figure}%[htb]\begin{center}\includegraphics[width=15cm]{teksty_fig9.eps}\caption{Przypadek gdy . Dla , oraz przykładowgo tekstu rozmiaru , mamy. Otrzymujemy , zatem . Dla ,mamy , zatem . } \end{center}\end{figure} \myskip Obserwacja.\ Jeśli , to . \myskip Przykład.\ Dla iprzykładowego wzorca x na Rysunku #BM-shifts mamy: , oraz . \myskip Korzystając z powyższej obserwacji przesunięcia w algorytmie BMobliczane są następująco. Inicjalizujemy dla każdego . \myskip\begin{center}\begin{minipage}{8cm}\vskip0.3cm\hspace*{0.6cm}\textbf{Algorytm} Oblicz-BMShift;\\\hspace*{1.2cm}\textbf{for} \textbf{to} \textbf{do }\\\hspace*{1.8cm}; ;\\\vskip0.4cm\end{minipage}\end{center}\myskipDla przypadku, gdy po wykonaniu powyższego algorytmu,otrzymane wartości nie muszą być poprawne. W tym przypadku heurystykaniezgodności na jednej pozycji jest ignorowana i sprowadzamy obliczenie do prefikso-sufiksów całego wzorca. Załóżmy wtedy, że , niech będzie długości"maksymalnego prefiksu wzorca, który jest sufiksemcałego wzorca, oraz , wtedy przyjmujemy