Tablice hashowe. indeksowana

Podobne dokumenty
Drzewa AVL definicje

Algorytmy i złożoności Wykład 5. Haszowanie (hashowanie, mieszanie)

Algorytmy i struktury danych. Wykład 4 Tablice nieporządkowane i uporządkowane

Drzewa podstawowe poj

Architektura systemów komputerowych

Pracownia Komputerowa wyk ad V

Rozdzia l 3. Laboratorium 3. danych zawierajac

Haszowanie (adresowanie rozpraszające, mieszające)

Haszowanie. dr inż. Urszula Gałązka

Pracownia Komputerowa wykład V

Plan wyk ladu. Kodowanie informacji. Systemy addytywne. Definicja i klasyfikacja. Systemy liczbowe. prof. dr hab. inż.

Wyk lad 7 Baza i wymiar przestrzeni liniowej

Techniki wyszukiwania danych haszowanie

Tablice z haszowaniem

Podstawy programowania 2. Przygotował: mgr inż. Tomasz Michno

12. Wprowadzenie Sygnały techniki cyfrowej Systemy liczbowe. Matematyka: Elektronika:

Tablice z haszowaniem

Drzewa wielokierunkowe trie

Pascal typy danych. Typy pascalowe. Zmienna i typ. Podział typów danych:

Wstęp do programowania. Drzewa podstawowe techniki. Piotr Chrząstowski-Wachtel

Tadeusz Pankowski

Kod U2 Opracował: Andrzej Nowak

Wyk lad 3 Wielomiany i u lamki proste

Wyk lad 9 Podpierścienie, elementy odwracalne, dzielniki zera

Wyk lad 4 Dzia lania na macierzach. Określenie wyznacznika

Grzegorz Mazur. Zak lad Metod Obliczeniowych Chemii UJ. 14 marca 2007

Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Informatyka 1. Wyrażenia i instrukcje, złożoność obliczeniowa

Przykładowe B+ drzewo

Zapis liczb binarnych ze znakiem

Równoleg le sortowanie przez scalanie

2 Arytmetyka. d r 2 r + d r 1 2 r 1...d d 0 2 0,

Wyk lad 5 W lasności wyznaczników. Macierz odwrotna

Sortowanie. Bartman Jacek Algorytmy i struktury

Podstawy programowania 2. Temat: Drzewa binarne. Przygotował: mgr inż. Tomasz Michno

Pracownia Komputerowa wyk ad IV

< K (2) = ( Adams, John ), P (2) = adres bloku 2 > < K (1) = ( Aaron, Ed ), P (1) = adres bloku 1 >

Funkcje systemu Unix

Wstęp do programowania. Listy. Piotr Chrząstowski-Wachtel

Algorytmy przeszukiwania wzorca

Wyk lad 7: Drzewa decyzyjne dla dużych zbiorów danych

wagi cyfry pozycje

Wyk lad 7 Metoda eliminacji Gaussa. Wzory Cramera

Indeks odwzorowania zmiennej zespolonej wzgl. krzywej zamknietej

Wstęp do Informatyki

Pracownia Komputerowa wykład IV

Algorytmy i struktury danych. Wykład 6 Tablice rozproszone cz. 2

Functionalization. Funkcje w C. Marcin Makowski. 30 listopada Zak lad Chemii Teoretycznej UJ

Tablice i funkcje. Marcin Makowski. 26 listopada Zak lad Chemii Teoretycznej UJ

Algorytmy i Struktury Danych

wykład Organizacja plików Opracował: dr inż. Janusz DUDCZYK

Algorytmy i struktury danych. wykład 1

Lista, Stos, Kolejka, Tablica Asocjacyjna

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

1. Operacje logiczne A B A OR B

Wstęp do programowania. Różne różności

Informatyka 1. Przetwarzanie tekstów

Algorytmy i struktury danych. wykład 5

Wykład 2. Informatyka Stosowana. 9 października Informatyka Stosowana Wykład 2 9 października / 42

Metoda znak-moduł (ZM)

Wykład 2. Informatyka Stosowana. 10 października Informatyka Stosowana Wykład 2 10 października / 42

Wykład 2. Drzewa zbalansowane AVL i 2-3-4

Wyszukiwanie binarne

5040 =

Pracownia Komputerowa wyk ad VI

PODSTAWOWE W LASNOŚCI W ZBIORZE LICZB RZECZYWISTYCH

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat

Algorytmy i. Wykład 5: Drzewa. Dr inż. Paweł Kasprowski

Systemy zapisu liczb.

Paradygmaty programowania

Podstawy programowania. Wykład 7 Tablice wielowymiarowe, SOA, AOS, itp. Krzysztof Banaś Podstawy programowania 1

Temat: Działania pisemne powtórzenie wiadomości z QR kodami.

Celem tego projektu jest stworzenie

P. Urzyczyn: Materia ly do wyk ladu z semantyki. Uproszczony 1 j. ezyk PCF

Podstawą w systemie dwójkowym jest liczba 2 a w systemie dziesiętnym liczba 10.

Algorytmy i struktury danych

Architektura komputerów

Arytmetyka liczb binarnych

Wykład 3 Składnia języka C# (cz. 2)

Statystyka w analizie i planowaniu eksperymentu

Algorytmy i struktury danych Sortowanie IS/IO, WIMiIP

Języki programowania zasady ich tworzenia

Techniki multimedialne

Dla człowieka naturalnym sposobem liczenia jest korzystanie z systemu dziesiętnego, dla komputera natomiast korzystanie z zapisu dwójkowego

Podstawy Informatyki. Metody dostępu do danych

Statystyka w analizie i planowaniu eksperymentu

2 Kryptografia: algorytmy symetryczne

operacje porównania, a jeśli jest to konieczne ze względu na złe uporządkowanie porównywanych liczb zmieniamy ich kolejność, czyli przestawiamy je.

ARCHITEKTURA KOMPUTERÓW Systemy liczbowe

Wprowadzenie do informatyki - ć wiczenia

Paradygmaty programowania. Paradygmaty programowania

Rejestry procesora. Nazwa ilość bitów. AX 16 (accumulator) rejestr akumulatora. BX 16 (base) rejestr bazowy. CX 16 (count) rejestr licznika

Wyk lad 2 Podgrupa grupy

Algorytmy i struktury danych

Wyk lad 5 Grupa ilorazowa, iloczyn prosty, homomorfizm

Rachunek zdań - semantyka. Wartościowanie. ezyków formalnych. Semantyka j. Logika obliczeniowa. Joanna Józefowska. Poznań, rok akademicki 2009/2010

Algorytmy i struktury danych. Drzewa: BST, kopce. Letnie Warsztaty Matematyczno-Informatyczne

Podstawy Informatyki Metody dostępu do danych

Transkrypt:

Tablice hashowe Tablica hashowa jest zwyk l a tablica indeksowana liczbami, np. od 0 do N 1, do której do l aczona jest funkcja hashowa wyliczajaca pozycje w tablicy na podstawie wartości klucza. Jeśli oznaczymy zbiór wszystkich kluczy przez K, to funkcja hashowa h(k) jest postaci: h : K 0..N 1 Zauważmy najpierw, że w pewnym sensie same klucze moga s lużyć jako indeksy do tablicy. Weźmy, na przyk lad, zestaw bitów tworzacych kody wszystkich znaków (liter lub cyfr) wchodzacych w sk lad kluczu. Taki kod bitowy jest liczba, i bedzie różny dla różnych kluczy, tworzy zatem poprawna funkcje hashowa. Tablice hashowe 1

W lasności funkcji hashowych Bitowe kodowanie kluczy ma poważna wade daje wielkie liczby, które wymuszaja użycie ogromnych tablic hashowych. W praktyce tak wielkie tablice nie sa zapewne potrzebne, wiec można stosować uproszczone funkcje hashowe. Jest to wskazane z drugiego punktu widzenia: tablice hashowe maja być niezwykle szybka struktura danych, wiec obliczanie funkcji hashowej powinno być bardzo prosta operacja arytmetyczna, sta loprzecinkowa, operujac a na ma lych liczbach. Dla wielu prostych przypadków wystarczajace jest obliczenie dowolnie zdefiniowanej wartości funkcji hashowej dla klucza, być może o nieco zbyt dużej wartości, i sprowadzenie go do przedzia lu wyznaczonego wielkościa tablicy N, na przyk lad za pomoca wzoru: h(k) = kod(k) MOD N Tablice hashowe 2

To jednak nie wystarcza. Idealna funkcja hashowa powinna być różnowartościowa, czyli różnym kluczom przyporzadkowywać różne wartości. Zapewnienie tego jest już trudniejsze, dażmy wiec do tego, żeby funkcja hashowa generowa la wartości jak najbardziej zróżnicowane, prawie przypadkowe. Jednak i w tym wypadku można nie ustrzec sie niezamierzonych regularności. Przyk lad: notatnik adresowy o pojemności 26 pozycji. Dlatego też do konstrukcji takiej funkcji wprowadza sie elementy zwiekszaj ace rozrzut wartości i przypadkowość. Na przyk lad, jako wielkość tablicy N, przez która dzieli sie wstepny kod klucza, przyjmuje sie na ogó l liczby pierwsze. Niezależnie jednak od tych podejmowanych środków zmierzajacych do zróżnicowania wartości funkcji hashowej, konieczne jest sprawdzenie, czy funkcja jednak nie posiada jakiejś regularności. Tablice hashowe 3

Funkcje hashowe użycie wybranych cyfr Jeśli klucze sa liczbami ca lkowitymi, to wygodna funkcja hashowa jest wybranie pewnej grupy cyfr klucza i potraktowanie tak uzyskanej liczby jako wartości funkcji. Na przyk lad, jeśli chcemy przechowywać dane o pewnej grupie ludzi wed lug ich numerów PESEL, to ostatnie 3 cyfry dadza, być może, dość przypadkowy i równomierny rozk lad wartości: h(d 1 d 2 d 3 d 4 d 5 d 6 d 7 d 8 d 9 d 10 d 11 ) = d 9 d 10 d 11 Liczba wybranych cyfr jest zwiazana z rozmiarem tablicy, dla 3 cyfr tablica bedzie mia la tysiac elementów. Gdyby zatem liczba elementów do przechowywania by la wieksza wtedy musielibyśmy wybrać wiecej cyfr z numeru. Zw laszcza w takich kluczach jak numer PESEL istnieja regularności, które trzeba eliminować. Tablice hashowe 4

Funkcje hashowe zwijanie Gdy liczby zawarte w kluczach albo powstajace w procesie wyliczania funkcji hashowej sa tak duże, że ich przetwarzanie jest k lopotliwe, można zastosować jedna z technik zwijania, to znaczy zmniejszania zakresu liczb. Na przyk lad: h(d 1 d 2 d 3 d 4 d 5 ) = d 1 + d 2 + d 3 + d 4 + d 5 Zakres wartości powyższej funkcji wynosi 46 wartości (0 do 45), wiec ponieważ zwykle bedzie to zbyt ma lo, możemy zastosować modyfikacje powyższego wzoru. polegajac a na dodawaniu cyfr grupami, np.: h(d 1 d 2 d 3 d 4 d 5 ) = d 1 + d 2 d 3 + d 4 d 5 lub h(d 1 d 2 d 3 d 4 d 5 ) = d 1 d 2 + d 3 d 4 d 5 co daje zakresy odpowiednio 207 i 1098. Tablice hashowe 5

Funkcje hashowe kodowanie znaków Gdy klucze sa znakami lub napisami, można do funkcji hashowych brać kody znaków. Ponieważ jednak napisy sa zwykle d lugie i liczba kodujaca pe lny napis by laby bardzo duża, stosuje sie zwykle wybieranie znaków, analogiczne do metody wybierania cyfr. Na przyk lad: h(z 1 z 2 z 3 z 4...) = 16384 ORD(z 1 ) + 128 ORD(z 2 ) + ORD(z 3 ) Powyższy wzór da równomierny rozrzut dla napisów, których przynajmniej pierwsze trzy znaki rozk ladaja sie równomiernie. Jednak wiele zbiorów kluczy ma inny charakter, na przyk lad nazwiska, w których pierwszy znak jest duża litera, a pozosta le znaki ma lymi. W dodatku nazwiska grupuja sie wokó l pewnych typowych poczatków, np. Gor, Kra, Sta, a inne sa rzadko spotykane, np. Kwr, Mpt, Oai, itd. Co gorsza, nawet wziecie kodów tylko pierwszych trzech liter daje w powyższym wzorze duże wartości, przekraczajace typowe wielkości tablic hashowych, jak również bezpieczny zakres operacji sta loprzecinkowych dla niektórych komputerów. Tablice hashowe 6

Funkcje hashowe dzielenie Poza przedstawionymi metodami wyboru kodu klucza można zastosować wspomniana metode dzielenia (ca lkowitoliczbowego) w celu sprowadzenia wartości funkcji hashowej do określonego przedzia lu. h(k) = kod(k) MOD N CONST WielkTabl = 7; TYPE Pozycja = 0..WielkTabl-1; T_Elem = RECORD k: INTEGER; dane: T_dane; END; T_TabH = ARRAY[Pozycja] OF T_Elem; Pozycja Zawartość [0] pusta [1] pusta [2] pusta [3] 374, dane [4] pusta [5] pusta [6] pusta VAR tablica: T_TabH; Tablice hashowe 7

Funkcje hashowe kombinacje metod h(k) = (kod(z pierwszy ) 676 + kod(z ostatni ) 26 + kod(zśrodkowy )) MOD 251 kod(z) = ORD(ma la-litera(z)) ORD( a ) h( Stasiak ) = (kod( S ) 676 + kod( k ) 26 + kod( s )) MOD 251 = 147 h( Stoklosa ) = (kod( S ) 676 + kod( a ) 26 + kod( k )) MOD 251 = 130 h( Stachowicz ) = (kod( S ) 676 + kod( z ) 26 + kod( h )) MOD 251 = 24 h( Starczewski ) = (kod( S ) 676 + kod( i ) 26 + kod( z )) MOD 251 = 102 h( Starczynski ) = (kod( S ) 676 + kod( i ) 26 + kod( z )) MOD 251 = 102 Tablice hashowe 8

Funkcje hashowe kolizje Kolizja wystepuje, gdy dwa różne klucze maja te sama wartość funkcji hashowej. Nawet dla bardzo dobrych funkcji hashowych trudno jest zwykle udowodnić, że funkcja nigdy nie spowoduje kolizji. Zatem każda implementacja tablic hashowych powinna zawierać w sobie jakaś metode postepowania w razie wystapienia kolizji, która pozwoli laby jakoś przechować oba kolidujace klucze, i oczywiście odnaleźć obydwa w razie potrzeby. Tablice hashowe 9

Rozwiazywanie kolizji metody wolnych pozycji Prosta technika w chwili wykrycia kolizji dla klucza na pozycji i w tablicy jest próba umieszczenia go na pozycji i + 1, albo na pierwszej wolnej pozycji za i. Oczywiście w trakcie wyszukiwania elementu trzeba również, w razie gdyby na pozycji i nie by lo poszukiwanego elementu, ale by l inny, przeszukać fragment tablicy za i. Dopiero po dojściu do pierwszej wolnej pozycji bez znalezienia poszukiwanego elementu możemy mieć pewność, że nie ma go w tablicy. Pozycja Zawartość [0] pusta [1] 911 [2] pusta [3] 374 [4] pusta [5] pusta [6] 1091 Pozycja Zawartość [0] pusta [1] 911 [2] pusta [3] 374 [4] 220 [5] pusta [6] 1091 Pozycja Zawartość [0] pusta [1] 911 624 [2] 449 624 [3] 374 624 [4] 220 624 [5] pusta 624 [6] 1091 Tablice hashowe 10

Ten podstawowy wariant techniki ma wade, określana mianem sklejania (ang. clustering). Oczywiście powoduje to, że wyszukiwanie, ani wstawianie elementów do tablicy hashowej, nie jest już natychmiastowe. Jeżeli lańcuchy wyrastajace z dwóch lub wiecej pozycji tablicy o dużej liczbie kolizji skleja sie ze soba, to bed a już rosnać wspólnie, wzajemnie sie przeplatajac. Taki wyd lużony lańcuch jest w tablicy hashowej dużym celem, w który mog a trafiać nastepne klucze, powodujac jeszcze szybsze rośniecie lańcucha. Ulepszone metody wolnych pozycji po wykryciu kolizji nie wykorzystuja bezpośrednio nastepnej wolnej pozycji w tablicy, lecz pozycje oddalona o pewna odleg lość, np. kwadratowo rosnac a, albo wyznaczona przez pomocnicza funkcje hashowa. Inna wada metod wolnych pozycji jest fakt, że przy usuwaniu elementu z tablicy jego pozycja nie może być po prostu zwalniana, lecz musi być zaznaczona jako poprzednio wykorzystana. W przeciwnym wypadku jakiś inny element może stać sie niedostepny przy przeszukiwaniu, ponieważ gdy elementu nie ma na swojej w laściwej pozycji, przeszukiwanie trwa tylko do końca lańcucha, tzn. do wystapienia pierwszej wolnej pozycji. Tablice hashowe 11

Rozwiazywanie kolizji do l aczanie elementów na zewnatrz tablicy Inna grupa metod rozwiazywania kolizji polega na do l aczaniu kluczy do pozycji tablicy w postaci list wskaźnikowych. Pozycja Zaw. [0] NIL [1] NIL [2] NIL [3] NIL [4] NIL [5] NIL [6] NIL Pozycja Zawart. [0] NIL [1] 911 [2] NIL [3] 374 [4] NIL [5] NIL [6] 1091 Pozycja Zawartość [0] NIL [1] 911 449 624 [2] NIL [3] 374 220 [4] NIL [5] NIL [6] 1091 Metody do l aczania elementów na zewnatrz tablicy sa niezawodne, jednak przy dużej liczbie kolizji sprawność tablicy ulega degradacji podobnie jak przy innych metodach. Nadmiernie wype lniona tablica hashowa przestaje pe lnić swoja funkcje. Tablice hashowe 12

Tablice hashowe jako abstrakcyjny typ danych FUNCTION UtworzTabliceH( VAR T: TablicaH ) : BOOLEAN; EXTERN; (* Tworzy i inicjuje tablice hashowa w zmiennej T. *) (* Istniejaca wartosc T jest ignorowana. Ta funkcja *) (* musi byc wywolana przed pierwszym uzyciem tablicy.*) (* Zwraca wartosc TRUE iff wynik operacji pomyslny. *) FUNCTION DodajDoTablicyH ( VAR T: TablicaH ; E: TypElementu ; FUNCTION klucz(e:typelementu): TypKlucza ): BOOLEAN; EXTERN; (* Dodaje element E do tablicy hashowej T. *) (* Zwraca wartosc TRUE iff wynik operacji pomyslny. *) Tablice hashowe 13

FUNCTION ZnajdzWTablicyH ( T: TablicaH ; K: TypKlucza ; VAR E: TypElementu ; FUNCTION klucz(e:typelementu): TypKlucza ): BOOLEAN; EXTERN; (* Znajduje w tablicy hashowej T element o kluczu K *) (* i, jesli znaleziony, umieszcza element w zmien.e. *) (* Zwraca wartosc TRUE iff wynik operacji pomyslny. *) FUNCTION UsunZTablicyH ( VAR T: TablicaH ; K: TypKlucza ; FUNCTION klucz(e:typelementu): TypKlucza ): BOOLEAN; EXTERN; (* Usuwa z tablicy hashowej element o kluczu K. *) (* Zwraca wartosc TRUE iff wynik operacji pomyslny. *) Tablice hashowe 14

Podsumowanie operacji na poznanych strukturach danych Struktura: wyszukiwanie elementu Z lożoność obliczeniowa operacji: dodawanie elementu usuwanie elementu przegladanie uporzadkowane tablice jednowymiarowe O(N) O(1) O(1) O(N log N) tablice uporzadkowane O(log N) O(N) O(N) O(N) listy wskaźnikowe O(N) O(1) O(1) O(N log N) drzewa binarne O(N) O(1) O(1) O(N log N) drzewa uporzadkowane O(N) O(N) O(N) O(N) drzewa AVL O(log N) O(log N) O(log N) O(N) B-drzewa O(log N) O(log N) O(log N) O(N) stogi O(N) O(log N) O(log N) O(N log N) drzewa trie O(1) O(1) O(1) O(N) tablice hashowe O(1) O(1) O(1) O(N log N) Podsumowanie 15