Tablice z haszowaniem

Podobne dokumenty
Tablice z haszowaniem

Haszowanie. dr inż. Urszula Gałązka

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

struktury danych dla operacji słownikowych

Wykład 4. Tablice z haszowaniem

Algorytmy i Struktury Danych, 9. ćwiczenia

Haszowanie (adresowanie rozpraszające, mieszające)

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

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

Techniki wyszukiwania danych haszowanie

Lista, Stos, Kolejka, Tablica Asocjacyjna

Podstawy Informatyki. Metody dostępu do danych

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

1. LICZBY DZIAŁ Z PODRĘCZNIKA L.P. NaCoBeZu kryteria sukcesu w języku ucznia

2 Kryptografia: algorytmy symetryczne

Zadanie 1. Zmiana systemów. Zadanie 2. Szyfr Cezara. Zadanie 3. Czy liczba jest doskonała. Zadanie 4. Rozkład liczby na czynniki pierwsze Zadanie 5.

Funkcja kwadratowa. f(x) = ax 2 + bx + c,

Wstęp do programowania. Reprezentacje liczb. Liczby naturalne, całkowite i rzeczywiste w układzie binarnym

Tadeusz Pankowski

Funkcja kwadratowa. f(x) = ax 2 + bx + c = a

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

Algorytmy i struktury danych. Wykład 4

MATEMATYKA Z PLUSEM DLA KLASY VII W KONTEKŚCIE WYMAGAŃ PODSTAWY PROGRAMOWEJ. programowej dla klas IV-VI. programowej dla klas IV-VI.

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

Samodzielnie wykonaj następujące operacje: 13 / 2 = 30 / 5 = 73 / 15 = 15 / 23 = 13 % 2 = 30 % 5 = 73 % 15 = 15 % 23 =

WYMAGANIA EDUKACYJNE Z MATEMATYKI DLA KLASY 7SP. V. Obliczenia procentowe. Uczeń: 1) przedstawia część wielkości jako procent tej wielkości;

LABORATORIUM PROCESORY SYGNAŁOWE W AUTOMATYCE PRZEMYSŁOWEJ. Zasady arytmetyki stałoprzecinkowej oraz operacji arytmetycznych w formatach Q

Podstawy Informatyki Metody dostępu do danych

Temat: Algorytm kompresji plików metodą Huffmana

Systemy liczbowe. 1. Przedstawić w postaci sumy wag poszczególnych cyfr liczbę rzeczywistą R = (10).

1259 (10) = 1 * * * * 100 = 1 * * * *1

Wprowadzenie do architektury komputerów systemy liczbowe, operacje arytmetyczne i logiczne

Arytmetyka komputera. Na podstawie podręcznika Urządzenia techniki komputerowej Tomasza Marciniuka. Opracował: Kamil Kowalski klasa III TI

Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Algorytmy i struktury danych Laboratorium 7. 2 Drzewa poszukiwań binarnych

Załóżmy, że musimy zapakować plecak na wycieczkę. Plecak ma pojemność S. Przedmioty mają objętości,,...,, których suma jest większa od S.

Funkcje wymierne. Jerzy Rutkowski. Działania dodawania i mnożenia funkcji wymiernych określa się wzorami: g h + k l g h k.

1.1. Pozycyjne systemy liczbowe

Wykład 4. Określimy teraz pewną ważną klasę pierścieni.

ARCHITEKRURA KOMPUTERÓW Kodowanie liczb ze znakiem

Zapis liczb binarnych ze znakiem

Wymagania edukacyjne z matematyki dla klasy I gimnazjum wg programu Matematyka z plusem

Algorytmy i struktury danych

Matematyka dyskretna

Ataki na RSA. Andrzej Chmielowiec. Centrum Modelowania Matematycznego Sigma. Ataki na RSA p. 1

Techniki multimedialne

WYMAGANIA EDUKACYJNE Z MATEMATYKI DLA KLASY III

Analiza algorytmów zadania podstawowe

Algorytmy i struktury danych. wykład 9

Zadanie 1. Potęgi (14 pkt)

Porządek symetryczny: right(x)

Rekurencje. Jeśli algorytm zawiera wywołanie samego siebie, jego czas działania moŝe być określony rekurencją. Przykład: sortowanie przez scalanie:

Zarys algorytmów kryptograficznych

Wymagania dla klasy siódmej. Treści na 2 na 3 na 4 na 5 na 6 Uczeń: Uczeń: Uczeń: Uczeń: Uczeń: DZIAŁ 1. LICZBY

Metody numeryczne w przykładach

Zazwyczaj rozmiar bloku jest większy od rozmiaru rekordu, tak więc. ich efektywna lokalizacja kiedy tylko zachodzi taka potrzeba.

Sortowanie w czasie liniowym

Jednostki informacji. Bajt moŝna podzielić na dwie połówki 4-bitowe nazywane tetradami (ang. nibbles).

Zaawansowane algorytmy i struktury danych

Matura próbna 2014 z matematyki-poziom podstawowy

Pracownia Komputerowa wykład V

Podstawy systemów kryptograficznych z kluczem jawnym RSA

Technikum Nr 2 im. gen. Mieczysława Smorawińskiego w Zespole Szkół Ekonomicznych w Kaliszu

Iteracyjne rozwiązywanie równań

Metody numeryczne Technika obliczeniowa i symulacyjna Sem. 2, EiT, 2014/2015

Algorytmy przeszukiwania

Metody numeryczne. Janusz Szwabiński. nm_slides.tex Metody numeryczne Janusz Szwabiński 2/10/ :02 p.

Technologie Informacyjne Wykład 4

Kodowanie i kompresja Streszczenie Studia Licencjackie Wykład 15, Kryptografia: algorytmy asymetryczne (RSA)

( ) Arkusz I Zadanie 1. Wartość bezwzględna Rozwiąż równanie. Naszkicujmy wykresy funkcji f ( x) = x + 3 oraz g ( x) 2x

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

Luty 2001 Algorytmy (7) 2000/2001

Definicja i własności wartości bezwzględnej.

P (A B) = P (A), P (B) = P (A), skąd P (A B) = P (A) P (B). P (A)

Rachunek prawdopodobieństwa Rozdział 3. Prawdopodobieństwo warunkowe i niezależność zdarzeń.

Dr inż. Robert Wójcik, p. 313, C-3, tel Katedra Informatyki Technicznej (K-9) Wydział Elektroniki (W-4) Politechnika Wrocławska

Uniwersytet Kazimierza Wielkiego w Bydgoszczy Zespół Szkół nr 5 Mistrzostwa Sportowego XV Liceum Ogólnokształcące w Bydgoszczy

Matematyka dyskretna

MATEMATYKA WYKAZ UMIEJĘTNOŚCI WYMAGANYCH NA POSZCZEGÓLNE OCENY DLA KLASY DRUGIEJ

ARYTMETYKA BINARNA. Dziesiątkowy system pozycyjny nie jest jedynym sposobem kodowania liczb z jakim mamy na co dzień do czynienia.

Teoretyczne podstawy informatyki

Metody numeryczne I Równania nieliniowe

ARCHITEKTURA KOMPUTERÓW Liczby zmiennoprzecinkowe

Technologie Informacyjne

020 Liczby rzeczywiste

Złożoność obliczeniowa zadania, zestaw 2

Wymagania na poszczególne oceny szkolne Klasa 7

Kodowanie i kompresja Streszczenie Studia Licencjackie Wykład 14, Kryptografia: algorytmy asymetryczne (RSA)

Wymagania edukacyjne na poszczególne oceny branżowa szkoła I stopnia klasa 1 po gimnazjum

Mgr Kornelia Uczeń. WYMAGANIA na poszczególne oceny-klasa VII-Szkoła Podstawowa

1. FUNKCJE DZIAŁ Z PODRĘCZNIKA L.P. NaCoBeZu kryteria sukcesu w języku ucznia

Metody numeryczne I. Janusz Szwabiński. Metody numeryczne I (C) 2004 Janusz Szwabiński p.1/61

Excel - podstawa teoretyczna do ćwiczeń. 26 lutego 2013

WYMAGANIA KONIECZNE - OCENA DOPUSZCZAJĄCA:

Drzewa poszukiwań binarnych

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

Rozkład łatwości zadań

Cyfrowy zapis informacji. 5 grudnia 2013 Wojciech Kucewicz 2

Przykładowe B+ drzewo

Wstęp do Informatyki zadania ze złożoności obliczeniowej z rozwiązaniami

Uzupełnienia dotyczące zbiorów uporządkowanych (3 lutego 2011).

Transkrypt:

Tablice z haszowaniem - efektywna metoda reprezentacji słowników (zbiorów dynamicznych, na których zdefiniowane są operacje Insert, Search i Delete) - jest uogólnieniem zwykłej tablicy - przyspiesza operacje wyszukiwania w porównaniu wyszukiwaniem na liście z dowiązaniami - inne nazwy haszowania: mieszanie, rozpraszanie Tablice z adresowaniem bezpośrednim Załóżmy, że używamy zbioru dynamicznego, gdzie elementy mogą mieć klucze ze zbioru U={0, 1,..., m-1}, gdzie m nie jest zbyt duże. Dodatkowo załóżmy, że żadne dwa elementy nie mogą mieć identycznych kluczy. 1

Przy takich założeniach możemy zbiór dynamiczny reprezentować za pomocą tablicy T[0,..., m-1], w której każdej pozycji będzie odpowiadał klucz należący do zbioru U. Na pozycji k w tablicy znajduje się wskaźnik do elementu o kluczu k. Jeżeli do zbioru nie należy żaden element o kluczu k, to T[k]=NIL. 2

Implementacja operacji słownikowych na zbiorze: DIRECT-ADDRESS-SEARCH(T,k): return T[k] DIRECT-ADDRESS-INSERT(T,x): T[key[x]] := x DIRECT-ADDRESS-DELETE(T,x): T[key[x]] := NIL Wszystkie te operacje działają w czasie O(1). Czasem elementy zbioru mogą być przechowywane w samej tablicy, szczególnie, gdy nie są z nimi związane inne dane. Kluczem elementu może być np. indeks pozycji elementu w tablicy. Wady podejścia: jeżeli zbiór U jest duży, to trzeba przechowywać całą tablicę o rozmiarze U, nawet gdy elementów będzie niewiele. 3

Tablice z haszowaniem W tablicy z haszowaniem, element o kluczu k trafia na pozycję h(k) (a nie na pozycję k, jak przy adresowaniu bezpośrednim), gdzie h jest tzw. funkcją haszującą. Funkcja haszująca h odwzorowuje zbiór kluczy U na zbiór pozycji w tablicy z haszowaniem T[0,..., m-1]. h: U {0,..., m-1}. 4

Zalety: ogromna oszczędność pamięci Wada: możliwość kolizji, tzn. sytuacji, w której funkcja haszująca przypisuje to samo miejsce w tablicy dwu różnym kluczom. Metody rozwiązywania kolizji 1. Unikanie kolizji Sposobem na minimalizację prawdopodobieństwa zajścia kolizji jest dobry wybór funkcji haszującej. Musi to być funkcja bardzo bliska funkcji losowej, ale oczywiście deterministyczna (tzn. dla danego k zawsze dawać ten sam wynik h(k)). Jednak ze względu na to, że może zachodzić U >m, w U muszą się w takiej sytuacji znaleźć dwa klucze, dla których funkcja haszująca da tę samą wartość całkowite uniknięcie kolizji nie jest więc możliwe. 5

2. Metoda łańcuchowa Wszystkie elementy, którym odpowiada ta sama pozycja w tablicy umieszczamy na jednej liście. Na pozycji j w tablicy pamiętamy wskaźnik do początku listy tych wszystkich elementów, dla których funkcja h daje wartość j. Jeżeli w zbiorze nie ma takich elementów, to pozycja j ma wartość NIL. 6

Implementacja: CHAINED-HASH-INSERT(T,x): wstaw x na początek listy T[h(key[x])] Działa zawsze w czasie O(1). CHAINED-HASH-SEARCH(T,k): wyszukaj element o kluczu k na liście T[h(k)] Pesymistyczny czas proporcjonalny do długości listy. CHAINED-HASH-DELETE(T,x): usuń element x z listy T[h(key[x])] Jeżeli listy są dwukierunkowe czas O(1). Jeżeli jednokierunkowe, to najpierw trzeba odszukać element na liście aby zaktualizować pole next jego poprzednika czas jak przy wyszukiwaniu. 7

Analiza wydajności wyszukiwania przy metodzie łańcuchowej Współczynnik zapełnienia tablicy o m pozycjach, w której znajduje się n elementów: α=n/m. Najgorszy przypadek: wszystkich n kluczy jest odwzorowanych na tę samą pozycję w tablicy, tworząc listę o długości n. Pesymistyczny czas wyszukiwania w takim przypadku: Θ(n) plus czas na obliczenie wartości funkcji haszującej (zwykle O(1)) brak poprawy dla jednej listy dla wszystkich elementów. Proste równomierne haszowanie: losowo wybrany element z jednakowym prawdopodobieństwem trafia na każdą z m pozycji, niezależnie od tego, gdzie trafiają inne elementy. 8

Twierdzenie W tablicy z haszowaniem wykorzystującym metodę łańcuchową rozwiązywania kolizji, przy założeniu o prostym równomiernym haszowaniu, średni czas działania procedury wyszukiwania zakończonego porażką wynosi Θ(1+α). Dowód: Każdy klucz k jest z jednakowym prawdopodobieństwem odwzorowywany na każdą z m pozycji w tablicy. Średni czas wyszukiwania zakończonego porażką jest więc równy średniemu czasowi przejścia do końca jednej z m list. Średnia długość takiej listy jest równa współczynnikowi zapełnienia tablicy α=n/m. Stąd oczekiwana liczba sprawdzonych elementów jest równa α, całkowity czas wynosi więc (po uwzględnieniu czasu potrzebnego na obliczenie h(k) oraz dostęp do pozycji T[h(k)]) wynosi Θ(1+α). 9

Twierdzenie W tablicy z haszowaniem wykorzystującym metodę łańcuchową rozwiązywania kolizji, przy założeniu o prostym równomiernym haszowaniu, średni czas działania procedury wyszukiwania wynosi Θ(1+α). Dowód dla wyszukiwania zakończonego sukcesem: Klucz, którego szukamy, to (z jednakowym prawdopodobieństwem) dowolny spośród n kluczy znajdujących się w tablicy. Załóżmy też dla uproszczenia dowodu, że procedura CHAINED- HASH-INSERT wstawia elementy na końcu, a nie na początku listy (można wykazać, że średni czas wyszukiwania jest w obu przypadkach identyczny). Wniosek: jeżeli liczba pozycji w tablicy jest co najmniej proporcjonalna do liczby elementów w tablicy (czyli zachodzi n=o(m)), to jednocześnie α = n/m = O(m)/m = O(1). 10

3. Adresowanie otwarte Wszystkie elementy przechowujemy wprost w tablicy. Każda pozycja tablicy zawiera więc albo element zbioru dynamicznego, albo NIL. Aby nie nastąpiło przepełnienie tablicy, współczynnik zapełnienia α nie może przekroczyć 1. Wstawianie do tablicy wymaga znalezienia w niej wolnej pozycji, przy czym kolejność sprawdzania pozycji w tablicy powinna zależeć od wstawianego klucza. Wyszukanie elementu polega na systematycznym sprawdzaniu pozycji w tablicy aż zostanie znaleziony szukany element albo wiadomo na pewno, że nie znajduje się on w tablicy. Nie są używane żadne dodatkowe listy. Przeszukiwanie odbywa się tą samą ścieżką, jak wstawianie elementu do tablicy. Inne metody: adresowanie liniowe, kwadratowe, dwukrotne itp. 11

Funkcje haszujące Cechy dobrej funkcji haszującej - powinna spełniać założenie prostego równomiernego haszowania: losowo wybrany klucz trafia z jednakowym prawdopodobieństwem na każdą z m pozycji. Niech P(k) będzie prawdopodobieństwem wybrania klucza k. Wtedy mamy: h: h( k ) = j P( k) = 1/ m dla j=0, 1,..., m-1 (warunek ten jest jednak trudno sprawdzić zwykle nie znamy P(k)) - powinna minimalizować szansę, że niewiele różniące się symbole ze zbioru U będą odwzorowane na tę samą pozycję w tablicy z haszowaniem. - powinna być maksymalnie niezależna od występujących tendencji w zbiorze danych 12

Utożsamienie kluczy z liczbami naturalnymi Dziedziną większości funkcji haszujących jest zbiór liczb naturalnych {0, 1, 2,...}. Jeżeli klucze nie są liczbami naturalnymi, należy ustalić ich odwzorowanie w zbiór liczb naturalnych. Przykład: mamy klucz w postaci ciągu tekstowego: pi. W kodzie ASCII p=112, i=105. Potraktujmy napis jako zapis liczby w układzie o podstawie 128, otrzymując: (112*128)+105=14441. A zatem pi 14441. Haszowanie modularne Funkcja haszująca na kluczu k daje wartość będącą resztą z dzielenia k przez m, gdzie m jest liczbą pozycji w tablicy: h(k) = k mod m 13

Przykład: m=12 (12 pozycji w tablicy z haszowaniem), klucz k=100; h(k)=4. Haszowanie modularne wymaga tylko jednego dzielenia całkowitego. W metodzie należy unikać pewnych wartości m. Na przykład m nie powinno być potęgą 2, ponieważ jeżeli m=2 p, to h(k) jest liczbą powstającą z p najmniej znaczących bitów liczby k (a funkcja haszująca powinna zależeć od całego klucza a nie jego części). Podobnie, należy unikać potęg 10, jeżeli klucze są liczbami dziesiętnymi (wtedy również nie będą uwzględniane wszystkie cyfry dziesiętne klucza). Można też wykazać, że jeżeli m=2 p -1 oraz k jest ciągiem interpretowanym jako liczba o podstawie 2 p, to wartości funkcji haszującej na dwóch ciągach, różniących się tylko odwróceniem kolejności dwu sąsiednich znaków, są sobie równe. 14

Przykład: p=4; podstawa układu liczbowego: 2 p =16; pojemność tablicy m=2 p - 1 =15; dla k=123456789 oraz k=213456789 otrzymujemy h(k)= k mod m = 9. Dobre wartości m: liczby pierwsze niezbyt bliskie potęgom 2. Przykład: chcemy przechowywać w tablicy z haszowaniem ok. 2000 ciągów znaków, przy czym każdy znak składa się z 8 bitów. Kolizje chcemy rozwiązywać metodą łańcuchową przy założeniu, że średnia długość list wyniesie 3 (czyli α=3). Wybieramy m=701. Uzasadnienie: 701 to liczba pierwsza leżąca blisko 2000/α = 2000/3 a zarazem leży daleko od potęg dwójki. Jeżeli każdy klucz k będzie interpretowany jako liczba, to funkcją haszującą będzie h(k)= k mod 701. 15

Haszowanie przez mnożenie Krok 1: mnożymy klucz k przez stałą A z przedziału 0<A<1 i wyznaczamy część ułamkową iloczynu ka. Krok 2: mnożymy otrzymaną wartość przez m oraz zaokrąglamy ją w dół. h(k) = m(ka mod 1) (ka mod 1 oznacza ułamkową część ka, tzn. ka- ka ) Wybór m jest w zasadzie dowolny. Najczęściej jednak wybieramy m jako pewna potęgę 2: m=2 p ze względu na łatwość implementacji. 16

Przykład Załóżmy, że słowo maszynowe w komputerze ma długość w bitów oraz że k mieści się w jednym słowie. znaczących bitów liczby r 0. Najpierw mnożymy k przez w-bitową liczbę całkowitą A2 w Wynik: 2w-bitowa liczba r 1 2 w +r 0, gdzie r 1 jest bardziej znaczącym, a r 0 mniej znaczącym słowem iloczynu. Szukana, p-bitowa wartość funkcji haszującej składa się z p najbardziej Wybór stałej A jest dowolny, ale pewne wartości są szczególnie dobre, np. A ( 5-1)/2=0.6180339887... 17

Przykład liczbowy: k=123456; m=10000; A=0.61803 h(k) = 10000*(123456*0.61803 mod 1) = = 10000*(76300.0041151 mod 1) = = 10000*0.0041151 = = 41.151 = = 41 18

Haszowanie uniwersalne W przypadku ustalonej funkcji haszującej, zawsze istnieje możliwość odwzorowania wszystkich kluczy na tę samą pozycję w tablicy (przez złośliwy wybór kluczy), przez co wyszukiwanie będzie działało w czasie liniowym. Jedyny sposób na uniknięcie takiego zagrożenia losowe dobieranie funkcji haszującej w sposób niezależny od wstawianych kluczy. Podejście takie nazywa się haszowaniem uniwersalnym. (analogia do sortowania szybkiego) Losowość wyboru funkcji haszującej sprawia, że algorytm może się różnie zachowywać nawet przy tych samych danych. Średnie czasy działania operacji na tablicach z haszowaniem pozostają małe. 19

Niech H będzie skończoną rodziną funkcji haszujących, odwzorowujących zbiór kluczy U w zbiór {0,1,...,m-1}. Taką rodzinę nazywamy uniwersalną, jeżeli dla każdej pary różnych kluczy x, y U liczba funkcji haszujących h H, dla których h(x)=h(y) jest równa dokładnie H /m. Innymi słowy, jeżeli losowo wybierzemy funkcję haszującą, to prawdopodobieństwo kolizji wynosi dokładnie 1/m. Twierdzenie Niech h będzie funkcją wybraną losowo z uniwersalnej rodziny funkcji haszujących. Jeśli haszujemy za jej pomocą n kluczy w tablicy o rozmiarze m, gdzie n m, to oczekiwana liczba kolizji, w które wchodzi ustalony klucz x jest mniejsza od 1. 20

Budowanie uniwersalnych rodzin funkcji haszujących Załóżmy, że m jest liczbą pierwszą. Rozłóżmy klucz x na r+1 bajtów (czyli znaków lub podciągów o ustalonej długości), co symbolicznie oznaczamy x=<x 0, x 1,..., x r > przy założeniu, że maksymalna wartość bajtu jest nie większa od m. Niech a=<a 0, a 1,..., a r > oznacza ciąg r+1 elementów wybranych losowo ze zbioru {0,1,..., m-1}. Odpowiadająca temu ciągowi funkcja haszująca h a jest zdefiniowana następująco: Przy takiej definicji, rodzina funkcji H ma m r+1 elementów. 21

Twierdzenie Rodzina H, zdefiniowana przez powyższe równości, jest uniwersalną rodziną funkcji haszujących. 22