• Nie Znaleziono Wyników

Algorytmy i Struktury Danych, 11. ćwiczenia

N/A
N/A
Protected

Academic year: 2021

Share "Algorytmy i Struktury Danych, 11. ćwiczenia"

Copied!
2
0
0

Pełen tekst

(1)

Algorytmy i Struktury Danych, 11. ćwiczenia

2016-12-22

Spis treści

1 Algorytm Aho-Corasick 1

2 Algorytm Bakera 1

3 Algorytm Karpa-Rabina 2

1 Algorytm Aho-Corasick

Wyszukiwanie wielu wzorców w czasie liniowym (do sumy długości wzorców i przeszukiwanego tekstu).

Dane są wzorce W1, . . . , Wk.

• Przygotowujemy drzewo TRIE zawierające wzorce W1, . . . , Wk,

• Dla każdego węzła drzewa L(v) oznacza napis powstały z konkatenacji etykiet na ścieżce z korzenia do v,

• Dla każdego węzła musimy obliczyć f (v) (failure function), f (v) = x jeśli L(x) jest najdłuższym sufiksem L(v)

• Dla każdego węzła oblicz out(v) (zbiór wzorców które są rozpoznawane po osiągnięciu v) (początkowo out(v) = {i} jeśli Wi kończy się w v, potem idąc od korzenia uzupełniamy out(v) := out(v) + out(f (v)))

2 Algorytm Bakera

Wyszukiwanie dwuwymiarowych wzorców.

Dany jest tekst T [1..n, 1..n] oraz wzorzec W [1..m, 1..m] należy wyznaczyć pary (i, j) t.że T [i..(i + m − 1), j..(j + m − 1)] = W .

• przygotuj zbiór wzorców {Wi= W [i, 1..m] : 1 ≤ i ≤ m} (kolejne kolumny wzorca),

• za pomocą algorytmu Aho-Corasick znajdź wystąpienia wzorców Wiw po- szczególnych kolumnach tekstu, wynikiem niech będzie tablica A[1..n, 1..n]

t.że A[i, j] = k jeśli A[i, j..(j + m)] = Wk lub A[i, j] = −1 wpp.

• za pomocą algorytmu KMP w poszczególnych wierszach tabli A odszukaj wystąpienia ciągu 1, 2, . . . , m (jeśli kolumny Wi się powtarzają, to ciąg będzie trochę inny)

1

(2)

3 Algorytm Karpa-Rabina

Algorithm 1: Algorytm KarpaRabina Data: Tekst T [1..n] i wzorzec P [1..m]

// Zakładamy, że dysponujemy funkcją haszującą h Oblicz wartość p = h(P [1..m])

for i = 1 to n − m do

Oblicz wartość x = h(T [i..(i + m − 1)]) if p = x then

sprawdź czy P = T [i..(i + m − 1)] i jeśli tak, to wypisz odnalezienie wzorca na pozycji i

Do efektywnej implementacji algorytmu musimy tak dobrać funkcję h aby było możliwe obliczenie w czasie O(1) wartości h(T [i..(i + m − 1)]) na podstawie h(T [(i − 1)..(i + m − 2)]) i T . Przykład:

h(c1c2. . . cm) = (c1pm−1+ c1pm−2+ . . . cmp0) mod q

h(T [i..(i+m−1)]) = ((h(T [(i−1)..(i+m−2)])−T [i−1]pm−1)·p+T [i+m−1]) mod q Powyższy algorytm można łatwo rozszerzyć do wyszukiwania dwuwymiaro- wego wzorca.

2

Cytaty

Powiązane dokumenty

Zaprojektuj optymalny algorytm pod względem pesymistycznej liczby porów- nań, który znajduje dwa środkowe elementy w zbiorze czterech elementów.. Chcemy ją uporządkować tak,

Udowodnij, że jeśli algorytm sortujący tablicę A[1..n] porównuje i zamienia wy- łącznie elementy odległe co najwyżej o 2015 (tzn. jeśli porównuje A[i] z A[j], to.. |i-j|

[r]

Jeśli graf nie jest regularny, to należy dodać nowe krawędzie i ewentualnie wierz- chołki tak by przerobić go na regularny.. Algorithm

Wstarczy tak długo jak drzewo zawiera węzeł z lewym synem, wykonujemy na nim (i lewym synie) prawą

• v należy do poddrzewa p.right, jednak zauważmy, że liczba kroków tego typu nie może przekroczyć O(log n). 3

[r]

[r]