• Nie Znaleziono Wyników

Algorytmy i Struktury Danych, 15. ćwiczenia

N/A
N/A
Protected

Academic year: 2021

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

Copied!
3
0
0

Pełen tekst

(1)

Algorytmy i Struktury Danych, 15. ćwiczenia

2010-01-18

1 Plan zajęć

• algorytm Karpa-Rabina

• liczenie tablicy P w algorytmie KMP

• rozszerzenie KMP na wiele wzorców

• wzorzec-tekst dwuwymiarowy

2 Zastosowanie haszowania do wyszukiwania wzorca

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

// Zakładamy, że dysponujemy funkcją haszującą h ;

1

Oblicz wartość p = h(P [1..m]) ;

2

for i = 1 to n − m do

3

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

4

if p = x then

5

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

6

odnalezienie wzorca na pozycji i ;

7 8

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.

1

(2)

3 KMP – ciekawostki

KMP(T, P )

n = length(T ) ;

1

m = length(P ) ;

2

π = Compute-Prefix-Function(P ) ;

3

q = 0 ;

4

for i = 1 to n do

5

while q > 0 and P [q + 1] 6= T [i] do

6

q = π[q] ;

7

if P [q + 1] = T [i] then

8

q = q + 1 ;

9

if q = m then

10

wzorzec występuje w T na pozycji i + 1 − m ;

11

q = π[q] ;

12 13 14

• przykład, że KMP może spędzić nad jedną pozycją O(m) razy: T = am−1b, W = am,

• możemy zdefiniować tablicę P0 jako “ulepszoną” tablicę prefikso-sufiksów, P0[i] = max(−1, {j : W [1..j] = W [(i − j + 1)..i] and W [j + 1] 6= W [i + 1]})

• przykład, że KMP’ (dla tablicy P0) może spędzić nad jedną pozycją Ω(log n) razy:

– dla KMP’ delay = O(log m): Z lematu o okresowości można udowod- nić, że jeśli P0[i] = j, P0[j] = k, to i ≥ k + j, czyli P0[Fi] ≤ i. Jeśli i ≤ k + j to można udowodnić, że W [k + 1] = W [j + 1].

– niech F0= a, F1= ab, Fn+1= Fn+ Fn−1, Fn0 oznacza Fn z usunię- tymi dwoma ostatnimi znakami, rozważmy T = Fn0cc, W = Fn

Lemat o okresowości: jeśli słowo x ma okresy p i q, takie, że p + q ≤ |x| to nwd(p, q) jest również okresem x (wystarczy pokazać, że (dla p > q) p − q jest również okresem x).

4 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)

2

(3)

• 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)))

5 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)

6 Zadanie z 2. klasówki 2010-01-15

Mamy n stałych funkcji fi : [ai, bi] → 1, ..., n, 1 ≤ ai ≤ bi ≤ n. Zaproponuj algorytm obliczenia maksimum z wartości fi(j), dla każdego j z {1, 2, . . . , n} i tych funkcji fi, które zawierają j w swojej dziedzinie. Jeśli takiej funkcji nie ma, to za maksimum przyjmujemy 0.

Uwagi: rozwiązania w czasie O(n log n) będą punktowane za maksimum 7 punktów; 11 punktów można uzyskać za rozwiązanie w czasie o(n log n).

3

Cytaty

Powiązane dokumenty

[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

Algorytmy i Struktury

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]

Ponieważ M jest najliczniejszym skojarzeniem, nie wśród nich