plik


ÿþAlgorytmy i struktury danych wykBad VII  Tablice z haszowaniem, statystyki pozycyjne dr in|. Andrzej Zalewski www: www.ia.pw.edu.pl/~azalews2 e-mail: a.zalewski@ia.pw.edu.pl konsultacje: [roda godz. 12:15  13:00. Plan wykBadu f& Tablice z haszowaniem f& Statystyki pozycyjne (c) Andrzej Zalewski (IAiIS PW) Tablice z mieszaniem (haszowanie, pami rozproszona) Haszowanie  pomysB i problem f& Zamiast porównywa wyszukiwany klucz, z kluczami w tablicy /drzewie (itp.)/ znajdujemy pozycj w tablicy na podstawie samej warto[ci klucza, tzn.  dana jest funkcja H(k): K  > I, gdzie: " K  zbiór kluczy, " I  zbiór indeksów  zauwa|my, |e zwykle: |K| >> |I| f& szansa: wyszukiwanie/wstawianie/usuwanie w czasie staBym (!)  je[li wyznaczenie H(k) nie jest  czasochBonne obliczeniowo f& K  zwykle zbiór liczb naturalnych (c) Andrzej Zalewski (IAiIS PW) Haszowanie  pomysB c.d. f& Problem: kolizja  prawdopodobieDstwo, |e H(k)=H(k ), dla k `" k /tzw. kolizja/ jest znaczce  paradoks dnia urodzin  prawd. braku kolizji daty urodzin |I|=365, dla liczby ludzi |K|>= 23 jest wiksze ni| 50%! (c) Andrzej Zalewski (IAiIS PW) Funkcje haszujce  wymagane wBa[ciwo[ci f& Równomierne rozrzucanie:  dla losowo wybranego klucza ka|da pozycja w indeksie jest jednakowo prawdopodobna niezale|nie od odwzorowania innych kluczy f&  CaBkowite wypeBnianie zbioru I f& W ogólno[ci dobór funkcji haszujcej zale|y od wBa[ciwo[ci zbioru kluczy  np. dla k"<0,1), H(k)=ðøk mûø, gdzie, |I| = m, haszuje równomiernie f& Typowo: |I| = N (c) Andrzej Zalewski (IAiIS PW) Haszowanie f& Dla kluczy nie caBkowitoliczbowych  przeksztaBcamy klucz w liczb naturaln  dla cigów znaków: H(k) = (h1(c1) + h2(c2) + ...) mod m, h1, h2 ...  pewna funkcja mieszajca  dla cigów skBadajcych si z kilku liczb sklejamy poszczególne fragmenty klucza korzystajc z operacji mod w lub xor  traktujemy tekst lub jego fragment jako liczb w okre[lonym systemie pozycyjnym  np. ab  w systemie 24-kowym... (c) Andrzej Zalewski (IAiIS PW) Funkcje mieszajce  haszowanie modularne f& H(k) = k mod m /k  klucz caBkowitoliczbowy/  problem dobór m: " dobre m  liczba pierwsza, " m parzyste  zBy wybór  miesza po poBowie przestrzeni 0...m (k  parzyste => H(k)  parzyste, k  nie parzyste => H(k) nieparzyste) " m  2k  obcicie klucza do k najmniej znaczcych bitów klucza (c) Andrzej Zalewski (IAiIS PW) Haszowanie przez mno|enie f& H(k) = ðøm (k A mod 1)ûø " x mod 1  uBamkowa cz[ x " A "(0,1), f& m  maBo istotne  dziaBa dla dowolnego m, f& (c) Andrzej Zalewski (IAiIS PW) Haszowanie uniwersalne f& Rodzina uniwersalna funkcji haszujcych  rodzina R = { H: K->I} , |e " liczba ró|nych funkcji H w R odwzorowujcych ró|ne klucze k i l w ten sam indeks H(k)=H(l) jest nie wiksza ni| |R|/m, m=|I| f& Haszowanie uniwersalne  losujemy funkcj haszujc z rodziny uniwersalnych funkcji haszujcych (c) Andrzej Zalewski (IAiIS PW) Rodzina uniwersalna funkcji haszujcych f& niech p  liczba pierwsza wiksza od najwikszego  haszowanego klucza f& niech a"{0,1, & p  1} , b"{1, 2, & , p  1} f& ha,b(k)= ((a*k+b) mod p) mod m, p>m f& ciekawe: m dowolna liczba, nie koniecznie pierwsza (m  liczba indeksów w tablicy) (c) Andrzej Zalewski (IAiIS PW) Rodzina uniwersalna funkcji haszujcych f& Rodzina funkcji Ha,b(k) jest rodzin uniweraln funkcji haszujcych f& Wyja[nienie (szkic dowodu):  q=(a*k1 + b) mod p i r=(a*k2 + b) mod p s ró|ne dla k1<>k2 /sprawdzi q  r/  prawdopodobieDstwo kolizji  to prawdopod., |e q mod m = r mod m (q i r kongruentne)  dla danego q z pozostaBych p  1 liczba mo|liwych warto[ci prawd., |e q i r kongruentne wynosi: îøp/mùø - 1 <= (p -1)/m  co daje prawdopodobieDstwo kolizji wynoszce 1/m.  dla |R| funkcji haszujcych dwa ró|ne klucze w to samo miejsce wynosi zatem |R|/m. (c) Andrzej Zalewski (IAiIS PW) Haszowanie  rozwizywanie kolizji f& metoda BaDcuchowa  tablica jest de facto tablic wskazników  normalnie wskazuje co zero lub jeden element, w przypadku kolizji dodajemy nastpne elementy f& adresowanie otwarte  stosujemy funkcj H(k, i), gdzie i  numer próby wyszukania/wstawienia  liniowe: próbkujemy kolejno: H(k), H(k)  1, H(k)  2 itd. je[li dotrzemy do pustego miejsca nie znalazBszy wcze[niej klucza  klucza nie ma w tablicy  mo|emy wstawi nowy klucz lub stwierdzi brak klucza szukanego  H(k, i) = (H (k) + i) mod m  haszowanie kwadratowe H(k, i)=(H (k)+c1i+c2i2) mod m, i  numer próby, c1, c2  staBe caBkowite; (c) Andrzej Zalewski (IAiIS PW) Haszowanie otwarte, podwójne f& Z podwójnym haszowaniem  H(k, i) = (h1(k)+ i*h2(k)) mod m; i  numer próby  h1  modularna funkcja haszujca  h2  dobrana tak, by przeglda caB tablic " m = 2n, h2  daje tylko warto[ci nieparzyste " m  liczba pierwsza, , h2  liczby dodatnie, mniejsze ni| m  np. 1 + (k mod m ), np.. m =m-1 (c) Andrzej Zalewski (IAiIS PW) Haszowanie - efektywno[ f& W haszowaniu met. BaDcuchow  czas prop. 1 + n / m /wypeBnienie tablicy/ f& W adresowaniu otwartym:  1/(n/m) ln (1/(1-n/m)), n/m<1  konkretnie: n/m=0,5  [rednia liczba porównaD < 1,385, n/m=0,9  2,559 /Cormen/ f& Wniosek:  haszowanie dla n/m<100% dziaBa ca. w czasie liniowym (c) Andrzej Zalewski (IAiIS PW) Haszowanie doskonaBe f& Cel:  zdefiniowa sposób wyszukiwania kluczy w czasie staBym w statycznym zbiorze danych. f& Def. Haszowanie jest doskonaBe, je[li w pesymistycznym przypadku wymaga staBej liczby odwoBaD do tablicy f& Rozwizanie:  analog do rozwizywania kolizji BaDcuchowo: " zamiast tworzy list elementów odwzorowywanych na dany indeks i tworzymy dodatkowe tablice z haszowaniem, starannie dobierajc funkcje Hj (c) Andrzej Zalewski (IAiIS PW) Haszowanie doskonaBe  konstrukcja rozwizania f& I poziom  haszowanie modularne f& II poziom  nj  liczba kluczy k, dla których H(k)=i;  rozwizanie:mj = ni2, stos. f-cj Hp, mi, p  l-ba pierwsza wiksza od ka|dej warto[ci klucza " mo|na pokaza, |e wtedy prawd. kolizji jest mniejsze ni| 0,5, je[li posBugujemy si r.u.f.h. (prawd. kolizji midzy k i l - 1/n, ró|nych k, l jest newton(ni, 2))  konkluzja: znalezienie funkcji haszujcej bez kolizji wymaga  kilku prób  ile powinno wynosi m (H(k)=k mod m) na pierwszym poziomie haszowania (c) Andrzej Zalewski (IAiIS PW) Haszowanie doskonaBe f& Co z pamici?  okazuje si, |e je[li m=n, to wart. oczekiwana sumy dBugo[ci tablic drugiego poziomu nie jest wiksza ni| 2n  prawdopodobieDstwo, |e tablice 2 poziomu zajm wicej ni| 4n<1/2 (c) Andrzej Zalewski (IAiIS PW) Statystyki pozycyjne  problem wyboru Stat. pozycyjne  definicja zadania f& Dany jest n-elementowy zbiór. Znalez i-ty najmniejszy element  PrzykBady: " min  1 szy " max  n ty " [rodkowy  mediana element ðø (n+1)/2ûø  y lub îø(n+1)/2ùø  y f& Rozwizanie intuicyjne:  sortujemy zbiór, sprawdzenie statystyki pozycyjnej (dowolnej!) w czasie staBym (c) Andrzej Zalewski (IAiIS PW) Rozwizanie efektywne f& Modyfikujemy sort. szybkie  proc. randomized-partition(A, p, r) mo|na nieco zmodyfikowa, tak by dzieliBa tablic na A[p& q-1], A[q+1& r], odp <= i > od el. rozdziel i A[q]  element rozdzielajcy. f& Tym samym mamy 3 przypadki:  A[q]  jest szukan i-t statystyk  i-ta statyst. jest w lewej podtablicy A[p& q-1]  i-ta statyst. jest w prawej podtab. A[q+1& r] (c) Andrzej Zalewski (IAiIS PW) Algorytm f& rand-select(A, p, r, i)  if p=r then return A[p] //znaleziono  q=rand.-partition(A, p, r)  k=q  p + 1  if i=k then return A[q] //znaleziono  if i<k then rand-select(A, p, q  1, i) /lewa podt.  else rand-select(A, q+1, r, i  k) (c) Andrzej Zalewski (IAiIS PW) Algorytm - wBa[ciwo[ci f& Co ciekawe  [redni czas dziaBania  liniowy!  intuicja: badamy tylko 1 z dwóch 2 drzew rekurencji  mo|emy jednak przeci rekurencj ju| na samym pocztku: " przyp. szukan statystyk element rozdzielajcy (c) Andrzej Zalewski (IAiIS PW) Wybór w pesym. czasie liniowym f& Szkic pomysBu  wyznaczamy median median dla îøn/5ùø - sortujc elementy w podtablicach  wyznaczamy median median dla kolejnych grup 5 elementowych /mediany tworz kolejn tablic, któr sortujemy i wyzn. med./  dzielimy tablic wzgl. mediany median x, k- indeks el. rozdziel.  szukamy rekurencyjnie w lewej lub prawej podtablicy lub koDczymy rekur. i=k (c) Andrzej Zalewski (IAiIS PW) Appendix do wyszukiwania wzg. klucza Wyszukiwanie metod Fibbon. f& Liczby Fibbonaciego F0=0, F1=1, F2=1, Fk+1 = Fk + Fk-1, czyli F3=2, F4=3, F5=5, F6=8 f& Drzewo Fibbonaciego w tablicy:  rzdu k=0, 1 po prostu 0  rzdu k>=2 korzeniem jest element Fk, lewym poddrzewem drzewo rzdu Fk-1, prawym poddrzewem drzewo rzdu Fk-2 z elementami o indeksach powikszonych o FK (c) Andrzej Zalewski (IAiIS PW) Drzewo Fibbonacciego 8 5 11 3 10 7 12 7 9 2 4 6 10 11 12 8 9 1 3 5 2 4 6 1 0 f& k=6, F6=8 (c) Andrzej Zalewski (IAiIS PW) Poruszanie si po drzewie Fibb. f& Niech i=Fk, p=Fk-1, q=Fk-2 (i  na pocztku wskazuje korzeD) f& Przej[cie do lewego poddrzewa  i = i  q (Fk=Fk-1+Fk-2 = > Fk-1=Fk  Fk-2)  (p,q) = (q, p  q) (Fk-2, Fk-3) f& Przej[cie do prawego poddrzewa  i = i + q (zgodnie z definicj drzewa)  p = p  q /Fk-3/, q = q  p /Fk-4= Fk-2  Fk-3/ (c) Andrzej Zalewski (IAiIS PW) Wskazówki do konstrukcji algorytmu f& Od tego miejsca ju| bardzo prosto:  zatrzymujemy si znalazBszy wBa[ciwy klucz  przy próbie przej[cia w lewo zatrzymujemy si, gdy q=0 (osignli[my F0)  przy próbie przej[cia w prawo zatrzymujemy si, gdy p=1 (c) Andrzej Zalewski (IAiIS PW) Koniec

Wyszukiwarka

Podobne podstrony:
Prog wyk TMM 2006
2006 04 Karty produktów
Wyk ad 02
Egzamin zawodowy 2006
Mat Bud wyk
wyk(Ia) wstęp PBiID
bank temat slajdy
Stan cywilny, wyk struktura ludnosci wg 5 str
UTK slajdy
us intelligence exploitation of enemy material 2006

więcej podobnych podstron