• Nie Znaleziono Wyników

2 Uniwersalna klasa funkcji haszuj¡cych

N/A
N/A
Protected

Academic year: 2021

Share "2 Uniwersalna klasa funkcji haszuj¡cych"

Copied!
5
0
0

Pełen tekst

(1)

Algorytmy i Struktury Danych, 12. ¢wiczenia

2009-01-19

1 Plan zaj¦¢

• konstrukcja uniwersalnej klasy funkcji haszuj¡cych z Cormena (rozdziaª 11)

• adresowanie otwarte (rozdziaª 11.4)

• algorytm Rabina

• liczenie tablicy P w algorytmie KMP

• rozszerzenie KMP na wiele wzorców

• wzorzec-tekst dwuwymiarowy

2 Uniwersalna klasa funkcji haszuj¡cych

[[CLR, rozdziaª 11. Strona 234]]

Dla dowolnej pary liczb a ∈ Zp ({1, . . . , p − 1}), b ∈ Zp, niech:

ha,b(k) = ((ak + b) mod p) mod m Rodzina wszystkich takich funkcji to:

Hp,m= {ha,b: a ∈ Zpi b ∈ Zp}

Twierdzenie 1 Klasa funkcji haszuj¡cych Hp,m, jest klas¡ uniwersaln¡.

Dowód: Niech k, l ∈ Zp (k 6= l). Dla danej funkcji haszuj¡cej ha,b, niech:

• r = (ak + b) mod p,

• s = (al + b) mod p. Zauwa»my, »e r 6= s:

r − s ≡ a(k − l) mod p

Poniewa» a i (k − l) s¡ ró»ne od zera, st¡d te» ich iloczyn (modulo p) jest równie» ró»ny od zera. Co wi¦cej ka»da mo»liwa para (a, b) z a 6= 0 daje inn¡

par¦ (r, s) z r 6= s. Poniewa» mo»liwych par (r, s) z r 6= s jest tylko p(p − 1),

(2)

istnieje zatem wzajemnie jednoznaczne odwzorowanie mi¦dzy parami (a, b) z a 6= 0i parami (r, s) z r 6= s. Tak wi¦c dla ka»dej pary ró»nych kluczy k i l, je±li wybierzemy (a, b) równomiernie losowo z Zp× Zp, to wynikow¡ par¡ (r, s) mo»e by¢ z jednakowym prawdopodobie«stwem ka»da para ró»nych liczb modulo p.

Wynika st¡d, »e prawdopodobie«stwo kolizji dwóch ró»nych kluczy k i l jest równe prawdopodobie«stwu, »e r ≡ s ( mod m), gdzie r i s s¡ ró»nymi losowymi warto±ciami modulo p. Dla ustalonego r liczba tych s, spo±ród pozostaªych p−1 mo»liwych warto±ci, dla których s 6= r i s ≡ r ( mod m), wynosi co najwy»ej:

dp/me − 1 ≤ (p − 1)/m

Prawdopodobie«stwo, »e r i s koliduj¡ modulo m wynosi co najwy»ej:

(p − 1)/m

(p − 1) = 1/m

Zatem dla ka»dej pary ró»nych warto±ci k, l ∈ Zp mamy:

P r{ha,b(k) = ha,b(l)} ≤ 1/m



3 Adresowanie otwarte

[[CLR, rozdziaª 11.4. Strona 236]]

• adresowane liniowe:

h(k, i) = (h0(k) + i) mod m

• adresowanie kwadratowe:

h(k, i) = (h0(k) + c1i + c2i2) mod m

• haszowanie dwukrotne:

h(k, i) = (h1(k) + ih2(k)) mod m [[CLR, Rozdziaª 11, strona 242]]

Twierdzenie 2 Je±li wspóªczynnik zapeªnienia tablicy z haszowaniem wynosi α = n/m < 1, to oczekiwana liczba sprawdzanych pozycji w czasie wyszukiwania elementu, który nie wyst¦puje w tablicy, jest nie wi¦ksza ni» 1−α1 , o ile jest speªnione zaªo»enie o równomiernym haszowaniu.

Dowód: Niech X b¦dzie zmienn¡ losow¡ równ¡ liczbie sprawdzanych pozycji.

P r[X ≥ i] = n

m· n − 1

m − 1· · · n − i + 2

m − i + 2 ≤ αi−1 (zauwa»my, »e m−jn−jmn dla 0 ≤ j < m)

E[X] =

X

i=1

P r[X ≥ i] ≤

X

i=1

αi−1=

X

i=0

αi= 1 1 − α



(3)

Twierdzenie 3 Je»eli wspóªczynnik zapeªnienia tablicy z haszowaniem wynosi α, to wstawianie z adresowaniem otwartym wymaga ±rednio co najwy»ej 1−α1 sprawdze« pozycji w tablicy, o ile speªniony jest warunek równomiernego haszo- wania.

Dowód: Wynika bezpo±rednio z twierdzenia 2.  [[CLR, Rozdziaª 11, strona 243244]]

Twierdzenie 4 Zaªó»my, »e element znajduje si¦ w tablicy z haszowaniem przez adresowanie otwarte, a wspóªczynnik zapeªnienia tablicy α speªnia nierówno±¢

α < 1. Wtedy oczekiwana liczba sprawdze« pozycji w tablicy wykonywanych w czasie wyszukiwania tego elementu jest nie wi¦ksza ni» α1ln1−α1 .

Dowód: Wyszukanie elementu k wymaga tyle samo czasu ile kosztowaªo jego wstawienie, st¡d mo»emy u±redni¢ koszt wstawienia wszystkich elementów.

1 n

n−1

X

i=0

m m − i= m

n

n−1

X

i=0

1 m − i = 1

α(Hm− Hm−n) (Hi  ita liczba harmoniczna).

1

α(Hm− Hm−n) = 1 α

m

X

k=m−n+1

1 k ≤ 1

α Z m

m−n

1 xdx = 1

αln m m − n = 1

αln 1 1 − α



(stary CLR) 12.4-3  adresowanie otwarte, dwukrotne haszowanie, wykaza¢, »e ci¡g kontrolny jest permutacj¡ gdy h2(k)jest wzgl¦dnie pierwsze z m

Dowód: Bez utraty ogólno±ci mo»emy zaªo»y¢, »e h1(k) = 0. Niech a = h2(k), d = gcd(a, n). Ci¡g kontrolny ma posta¢ ax( mod n). Rozwa»my równanie ax ≡ z( mod n).

• z = d, z algorytmu Euklidesa wynika, »e istnieje rozwi¡zanie równania ax + ny = gcd(a, n) = d x0,

• z = kd x := kx0

• d 6 |z  powiedzmy, »e istniej¡ caªkowite x, y speªniaj¡ce równanie ax = z + ny, jednak d|n i d|a st¡d lewa strona jest podzielna przez d, natomiast prawa nie!  sprzeczno±¢.



(4)

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

5 KMP  ciekawostki

KMP(T, P ) n = length(T );

1

m = length(P );

2

π =Compute-Prex-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,

(5)

• mo»emy zdeniowa¢ tablic¦ P0 jako ulepszon¡ tablic¦ prekso-suksó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).

6 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 suksem 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)))

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

Cytaty

Powiązane dokumenty

Powiemy, że algorytm Alg działający w strukturze danych S jest całkowicie poprawny ze względu na specyfikację &lt;wp,wk&gt; wttw dla wszystkich danych w strukturze S

Problem Dany jest ciąg rosnący e[1],..,e[n] oraz element x pewnej przestrzeni liniowo uporządkowanej &lt;E, &gt;. Następnie porównujemy x z kolejnymi elementami ciągu

(3) Jeżeli tak otrzymane drzewo nie jest częściowo uporządkowane, to przechodząc wzdłuż drogi od liścia x do korzenia, poprawić etykiety zamieniając etykietę ojca z

Jeśli element e należy do kolejki q, to po skończonej liczbie usunięć kolejnych elementów minimalnych.. dotrę do tego

takie drzewo &lt;V, T&gt; rozpinające grafu G, że suma kosztów jego krawędzi  eT c (e) jest najmniejsza.. Mirkowska, ASD_12 Algorytmy na

Niech będzie tekst 100000 znakowy, w którym występują tylko litery a,b,c,d,e,f i a-45tys razy, b-13tys., c-12tys.,.. d-16tys., e -

Powiemy, że problem jest rozstrzygalny, jeśli istnieje algorytm, który dla dowolnych danych x po skończonej liczbie kroków daje rozwiązanie problemu. W przeciwnym

Dowód przez indukcję ze względu na liczbę wywołań rekurencyjnych funkcji min_max.. Dla jednego tylko wywołania