ALG!9

ALG!9



8,2. Nowe algorytmy poszukiwań 219

słowa wejściowego o długości M wydaje się tak samo kosztowny - jak nie bardziej! - jak zwykle sprawdzanie tekstu znak po znaku (patrz algorytm brute-force). Tym bardziej że jak do tej pory nie powiedzieliśmy ani słowa na temat funkcji 77... Z poprzedniego rozdziału pamiętamy zapewne, iż jej wybór wcale nie byl taki oczywisty.

Omaw iany algorytm jednak istnieje i na dodatek działa szybko! Zatem, aby to wszystko, co poprzednio zostało napisane, logicznie się ze sobą łączyło, potrzebny nam będzie zapewne jakiś trik... Sztuka polega na właściwym wyborze funkcji 77. Robin i Karp wybrali taką funkcję, która dzięki swym szczególnym właściwościom umożliwia dynamiczne wykorzystywanie wyników obliczeń dokonanych krok wcześniej, co znacząco potrafi uprościć obliczenia wykonywane w kroku bieżącym.

Załóżmy, że ciąg M znaków będziemy interpretować jako pewną liczbę całkowitą. Przyjmując za b - jako podstawę systemu — ilość wszystkich możliwych znaków, otrzymamy:

x = tfijbM-' + t[i +1 ]bM"3+...t[i + M - U.

Przesuńmy się teraz w tekście o jedną pozycję do przodu i zobaczmy jak zmieni się wartość x:

x' — l[i + l|bM I+t[i + 2]bM-2+... t[i + M],

Jeśli dobrze przyjrzymy się .v i x'. to okaże się, że x' jest w dużej części zbudowana z elementów tworzących X - pomnożonych przez h z uwagi na przesunięcie. Nietrudno jest wówczas wywnioskować, że:

x’-(x - t[i]bM I) + t[i + MJ.

Jako funkcji 77użyjemy dobrze nam znanej z poprzedniego rozdziału H(x)=x % j), gdzie /i jest dużą liczbą pierwszą. Załóżmy, że dla danej pozycji i wartość ll(x) jest nam znana. Po przesunięciu się w tekście o jedną pozycję w prawo pojawia się konieczność wyliczenia dla tego „nowego” słowa wartości funkcji H(x'j. Czy istotnie zachodzi potrzeba powtarzania całego wyliczenia? Być może istnieje pewne ułatwienie bazujące na zależności jaka istnieje pomiędzy* i x1

Na pomoc przychodzi nam tu własność funkcji modulo użytej w wyrażeniu arytmetycznym. Można oczywiście obliczyć modulo z wyniku końcowego, lecz to bywa czasami niewygodne z uwagi na na przykład wielkość liczby, z którą mamy do czynienia - a poza tym, gdzie tu byłby zysk szybkości?! Identyczny wynik otrzymuje się jednak aplikując funkcję modulo po każdej operacji cząst-


Wyszukiwarka

Podobne podstrony:
ALG!3 8.2. Nowe algorytmy poszukiwań 213 Analogiczny przykład znajduje się na rysunku 8-5. 8.2. Nowe
ALG!5 8.2. Nowe algorytmy poszukiwań 215 l int i=-1 ; start: i++; etO: if (t: i]! = ■ i + + ; a
ALG 1 8.2. Nowe algorytmy poszukiwań 221 Kolejne uwagi należą się parametrom p i b. Zaleca się, aby
ALG!7 3.2. Nowe algorytmy poszukiwań 217 Algorytm jest jak widać klarowny, prosty i szybki. Jego rea
ALG!1 82. Nowe algorytmy poszukiwań 211 dodatek jest to algorytm łatwo dający się generalizować na p
16 Wstęp wykonuje pewien proces (algorytm) poszukiwania tego słowa (świadomie — gdyż bez udziału
0000055 2 98 KINEZYTERAPIA 98 KINEZYTERAPIA kowcj długości. Dzieje się tak pomimo tego, ze sama tkan
Programowanie równoległeSuma elementów tablicy a[n] n procesorów Algorytm poszukiwania minimum i alg
Image390 słowa wejściowego. Generator przedstawiony na rys. 4.455 wymaga zastosowania tylu przełączn
11813 Maśliński4984 gicznc mechanizmów przerzutowania wytyczyły nowe kierunki poszukiwania metod ich
0097 3 I fi u Drabiny montażowe wolnostojące: a) z obustronnym wejściem, b) z jednostronnym wejściem
04 20 21 POTYCZKI ALGORYTMICZNE edycja Potyczek pięć wejściowych wzmacniacza W1 dla każdego z wybra
słowa wejściowego nie będzie istnieć przejście maszyny ze stanu, w którym będzie się ona akurat znaj
Podstawowe cechy algorytmu Algorytm powinien: • Posiadać dane wejściowe (w ilości większej lub równe

więcej podobnych podstron