Techniki wyszukiwania danych haszowanie

Podobne dokumenty
Haszowanie. dr inż. Urszula Gałązka

Tablice z haszowaniem

Wykład 4. Tablice z haszowaniem

Tablice z haszowaniem

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

Haszowanie (adresowanie rozpraszające, mieszające)

struktury danych dla operacji słownikowych

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.

Algorytmy przeszukiwania wzorca

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

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

Tadeusz Pankowski

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

Podstawy Informatyki. Metody dostępu do danych

Definicja pliku kratowego

Lista, Stos, Kolejka, Tablica Asocjacyjna

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

Drzewa poszukiwań binarnych

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

Algorytmy i Struktury Danych, 9. ćwiczenia

Instrukcja do ćwiczeń nr 4 typy i rodzaje zmiennych w języku C dla AVR, oraz ich deklarowanie, oraz podstawowe operatory

2 Kryptografia: algorytmy symetryczne

ARCHITEKTURA SYSTEMÓW KOMPUTEROWYCH

Kodowanie liczb całkowitych w systemach komputerowych

Podstawy programowania. 1. Operacje arytmetyczne Operacja arytmetyczna jest opisywana za pomocą znaku operacji i jednego lub dwóch wyrażeń.

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

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

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

Algorytmy zachłanne. dr inż. Urszula Gałązka

Kod U2 Opracował: Andrzej Nowak

Zapis liczb binarnych ze znakiem

L6.1 Systemy liczenia stosowane w informatyce

Aproksymacja funkcji a regresja symboliczna

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

Pracownia Komputerowa wykład V

Kod uzupełnień do dwóch jest najczęściej stosowanym systemem zapisu liczb ujemnych wśród systemów binarnych.

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

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

Zadanie 1. Potęgi (14 pkt)

Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 5 Liczby w komputerze

Informacja w perspektywie obliczeniowej. Informacje, liczby i obliczenia

Techniki multimedialne

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

Opis efektów kształcenia dla modułu zajęć

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

Wstęp do informatyki- wykład 1

mgr inż. Grzegorz Kraszewski SYSTEMY MULTIMEDIALNE wykład 4, strona 1. GOLOMBA I RICE'A

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

Podstawy programowania 2. Temat: Funkcje i procedury rekurencyjne. Przygotował: mgr inż. Tomasz Michno

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

Wstęp do informatyki- wykład 1 Systemy liczbowe

ang. file) Pojęcie pliku (ang( Typy plików Atrybuty pliku Fragmentacja wewnętrzna w systemie plików Struktura pliku

Podstawy Informatyki

System plików. dr inż. Krzysztof Patan. Instytut Sterowania i Systemów Informatycznych Uniwersytet Zielonogórski

Wybrane zagadnienia teorii liczb

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.

Teoretyczne Podstawy Informatyki

Uniwersytet w Białymstoku Wydział Ekonomiczno-Informatyczny w Wilnie SYLLABUS na rok akademicki 2010/2011

Zestaw 3. - Zapis liczb binarnych ze znakiem 1

Za pierwszy niebanalny algorytm uważa się algorytm Euklidesa wyszukiwanie NWD dwóch liczb (400 a 300 rok przed narodzeniem Chrystusa).

Wykład I: Kodowanie liczb w systemach binarnych. Studia Podyplomowe INFORMATYKA Podstawy Informatyki

Pracownia Komputerowa wykład VI

Zadanie projektowe nr 1

Arytmetyka binarna - wykład 6

Algorytmy i struktury danych. Wykład 4

RAPORT z diagnozy umiejętności matematycznych

SCHEMAT ROZWIĄZANIA ZADANIA OPTYMALIZACJI PRZY POMOCY ALGORYTMU GENETYCZNEGO

1. Napisz program, który wyświetli Twoje dane jako napis Witaj, Imię Nazwisko. 2. Napisz program, który wyświetli wizytówkę postaci:

Parametry systemów klucza publicznego

Zapisywanie algorytmów w języku programowania

w analizie wyników badań eksperymentalnych, w problemach modelowania zjawisk fizycznych, w analizie obserwacji statystycznych.

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

Technologie Informacyjne

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

WSKAZÓWKI DO WYKONANIA SPRAWOZDANIA Z WYRÓWNAWCZYCH ZAJĘĆ LABORATORYJNYCH

Wymagania na poszczególne oceny szkolne dla klasy VI. (na podstawie Grażyny Koba, Teraz bajty. Informatyka dla szkoły podstawowej.

Zadanie 1. Suma silni (11 pkt)

dr inż. Jarosław Forenc

5. Podstawowe algorytmy i ich cechy.

Ćwiczenie nr 3. Wyświetlanie i wczytywanie danych

INŻYNIERIA BEZPIECZEŃSTWA LABORATORIUM NR 2 ALGORYTM XOR ŁAMANIE ALGORYTMU XOR

Arytmetyka stało i zmiennoprzecinkowa

ARCHITEKRURA KOMPUTERÓW Kodowanie liczb ze znakiem

Układy sekwencyjne. Podstawowe informacje o układach cyfrowych i przerzutnikach (rodzaje, sposoby wyzwalania).

Przedmiot: Urządzenia techniki komputerowej Nauczyciel: Mirosław Ruciński

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

Przestrzenne bazy danych Podstawy języka SQL

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

Zasady analizy algorytmów

SCENARIUSZ LEKCJI. Dzielenie wielomianów z wykorzystaniem schematu Hornera

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

Podstawy Informatyki

Podstawy programowania. Wykład: 9. Łańcuchy znaków. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Zadanie 1. Doskonała inaczej (6 pkt) Poniższy algorytm wyznacza wszystkie dzielniki liczby naturalnej n 1, mniejsze od n.

Luty 2001 Algorytmy (7) 2000/2001

PRZEWODNIK PO PRZEDMIOCIE

Kod IEEE754. IEEE754 (1985) - norma dotycząca zapisu binarnego liczb zmiennopozycyjnych (pojedynczej precyzji) Liczbę binarną o postaci

PRÓBNY EGZAMIN MATURALNY Z INFORMATYKI STYCZEŃ Arkusz I. Czas pracy: 60 minut Liczba punktów do uzyskania: 15

Transkrypt:

Algorytmy i struktury danych Instytut Sterowania i Systemów Informatycznych Wydział Elektrotechniki, Informatyki i Telekomunikacji Uniwersytet Zielonogórski Techniki wyszukiwania danych haszowanie 1 Cel ćwiczenia Ćwiczenie ma na celu zapoznanie studentów z technikami wyszukiwania danych. 2 Haszowanie W klasycznych metodach wyszukiwanie polega na porównywaniu wyszukiwanego klucza z elementami przeszukiwanego zbioru. W haszowaniu próbuje się uzyskać bezpośrednie odniesienie do elementów w tablicy za pomocą operacji arytmetycznych przekształcających klucz w odpowiedni adres tablicy. Inaczej mówiąc, idea haszowania (rys. 1) polega na odnalezieniu takiej funkcji h( ), która na podstawie danej opisanej przez pewien klucz v, wskazywałaby indeks i w tablicy T pod którym ma być przechowana dana T - tablica przechowująca dane, x - dana opisana przez pewien klucz v, h - funkcja haszująca. T (i) = h(v), Uniwersum wszystkich kluczy V v 1 v 2 T 0 h(v 1 ) h(v 2 ) v 3 v 4 v 5 KluczezezbioruV h(v 3 )=h(v 4 ) h(v 5 ) m 1 Rysunek 1: Funkcja haszująca h przyporządkowuje komórki w tablicy z haszowaniem kluczom z uniwersum V. Klucze v 3 i v 4 kolidują ze sobą ponieważ odpowiada im ta sama komórka w tablicy Największą zaletą takiego sposobu zapamiętywania danych jest maksymalne uproszczenie procesu poszukiwań. Znając funkcję h( ), można automatycznie określić indeks komórki tablicy w której zapisana jest dana. Oprócz przedstawionej zalety istnieje jedna podstawowa wada omawianej metody polegająca na trudności w odnalezieniu dobrej funkcji h( ).

Techniki wyszukiwania danych haszowanie 2 3 Pożądane właściwości funkcji haszującej Istnieje wiele potencjalnych funkcji haszujących, które na podstawie wartości danego klucza v wyznaczają pewien indeks tablicy. Dobra funkcja haszująca powinna posiadać dwie następujące własności: Funkcja haszująca powinna powodować równomiernie obciążanie pamięci, czyli różnym wartościom klucza v powinny odpowiadać odmienne indeksy tablicy T, aby nie powodować konfliktu dostępu. Funkcja haszujaca powinna być możliwie jak najprostsza. Parametry, które maja wpływ na stopień złożoności funkcji h( ) to: długość tablicy, w której zamierzamy składować rekordy danych oraz wartość klucza v. 4 Znane funkcje haszujące W zaprezentowanych przykładach będziemy zakładać, ze klucze v są ciągami znaków, które można łączyć ze sobą i dość dowolnie interpretować jako liczby całkowite. Każdy znak alfabetu będziemy kodować w przykładach przy pomocy pięciu bitów: A=00001 B=00010 C=00011 D=00100 E=00101 F=00110 G=00111 H=01000 I=01001 J=01010 K=01011 L=01100 M=01101 N=01110 O=01111 P=10000 Q=10001 R=10010 S=10011 T=10100 U=10101 V=10110 W=10111 X=11000 Y=11001 Z=11010 Kodowanie jest wykonywane w celu zmiany danej x na klucz v, który można poddać działaniu funkcji haszującej. Celem haszowania jest możliwie jak najbardziej losowe rozrzucenie rekordów po tablicy wielkości M. Problem polega na tym, że nie jest możliwe uzyskanie w pełni losowego rozrzutu elementów dysponując danymi wejściowymi, które z założenia nie są losowe. Musimy zatem ową losowość w jakiś sposób zasymulować. Istnieje grupa prostych funkcji arytmetycznych (modulo, mnożenie, dzielenie), które dość dobrze nadają się do tego celu. 1. Suma modulo 2 gdzie h( ) - suma modulo 2. h(v 1, v 2,..., v n, ) = v 1 v 2... v n Przykład: Dla T max = 37 oznaczającego maksymalną liczbę elementów tablicy, oraz h(kot ) = (010110111110100) 2 otrzymujemy: Zalety: (01011) 2 (01111) 2 (10100) 2 = (10000) 2 = 16 Wartość funkcji h( ) jest łatwa do obliczenia. Suma modulo 2, w przeciwieństwie do iloczynu i sumy logicznej, nie powiększa (jak suma logiczna) lub pomniejsza (jak iloczyn) swoich argumentów. Wady:

Techniki wyszukiwania danych haszowanie 3 Permutacja tych samych liter daje w efekcie ten sam wynik. Rozwiązaniem tego problemu może być systematyczne przesuwanie cykliczne reprezentacji bitowej: pierwszy znak o jeden bit w prawo, drugi o dwa bity w prawo, etc. Przykład: Bez przesuwania h(kt O) = 16 i jednoczenie h(t OK) = 16, z przesunięciem h(kt O) = 16 (10101) 2 (00101) 2 (11101) 2 = (01101) 2 = 13 natomiast h(t OK) = 16 (01010) 2 (11011) 2 (01101) 2 = (11100) 2 = 28. 2. Wyznaczania reszty z dzielenia całkowitego T max h(v) = v mod T max gdzie mod oznacza operację wyznaczania reszty z dzielenia całkowitego. Przykład: Dla T max = 37 oraz h(kot ) = (010110111110100) 2 mod 37 = 35 Zalety: Wartość funkcji h( ) jest łatwa do obliczenia. Wady: Otrzymana wartość zależy bardziej od T max, niż od klucza. Gdy T max jest parzyste, wszystkie otrzymane indeksy danych o kluczach parzystych będą parzyste, ponadto dla pewnych dzielników wiele danych otrzyma te same indeksy. Można temu zaradzić poprzez wybór T max jako liczby pierwszej, ale często mamy do czynienia z akumulacja elementów w pewnym obszarze tablicy W przypadku dużych liczb binarnych nie mieszczących się w reprezentacji wewnętrznej komputera, obliczanie modulo nie jest możliwe przez zwykłe dzielenie arytmetyczne. 3. Mnożenie T max h(v) = ((v Θ)%1)T max, gdzie 0 < Θ < 1 gdzie - część całkowita. Powyższą formułę należy odczytać następująco: klucz jest mnożony przez pewna liczbę Θ z przedziału (0, 1). Z wyniku bierzemy część ułamkową, mnożymy przez T max i ze wszystkiego liczymy część całkowitą. W literaturze dotyczącej metody haszowania wykazano, że dla poniżej przedstawionych wartości Θ otrzymujemy w miarę równomierne obciążenie pamięci. Θ = 1 2 1 5 2, Θ = 1 3 5 + 2 2. Przykład: Dla Θ = 0.61800339887 oraz T max = 30 i klucza v = KNT = (010110111010100) 2 = 11732 otrzymamy h(knt ) = 23. 5 Metody obsługi konfliktów 1. Metoda łańcuchowa W metodzie łańcuchowej wszystkie elementy, którym w wyniku haszowania odpowiada ta sama pozycja w tablicy T, zostają umieszczone na jednej oddzielnej liście (rys. 2). Na

Techniki wyszukiwania danych haszowanie 4 T h(v 1 ) h(v 4 ) Uniwersum wszystkich kluczy V v 1 v 4 v 2 v 3 h(v 3 ) h(v 2 ) h(v 5 ) v 5 v6 KluczezezbioruV h(v 6 ) Rysunek 2: Rozwiązanie konfliktu metodą łańcuchową pozycji m w tablicy T zapamiętywany jest jedynie wskaźnik do początku listy danych, dla których funkcja h( ) daje taką samą wartość m. Przeszukiwanie będzie działać w sposób następujący: szukany element x poddany działaniu funkcji haszującej h(x) zwraca pewien indeks m. W przypadku, gdy komórka tablicy T [m] zawiera NULL, możemy być pewni, że szukanego elementu nie odnaleźliśmy. W sytuacji gdy komórka tablicy zawiera listę to musimy przeszukać każdy jej element. Niestety podczas obsługi konfliktów przy pomocy przedstawionej metody korzysta się z list. Z tego powodu rozwiązanie to można uznać za nieco sztuczne, jednakże parametry czasowe tej metody są korzystne. 2. Tablice Idea tej metody polega na podziale tablicy T na dwie części: strefę podstawowa i strefę przepełnienia. Do strefy przepełnienia elementy trafiają w momencie wystąpienia konfliktu podczas zapisu danej pod indeks znajdujący się w części podstawowej. Strefa ta wypełniana jest liniowo wraz z napływem nowych elementów powodujących konflikty. Efekt wypełnienia tablicy przedstawiony jest na rys. 3. Rekordy E i F zostały zapa- 8 9 G A C B Strefa podstawowa D E F Strefa przepełnienia Rysunek 3: Podział tablicy na część podstawową i przepełnienia umożliwiającą obsługę konfliktów miętane w momencie stwierdzenia konfliktu. Użycie przedstawionej metody powinno być poprzedzone szczególnie starannym obliczeniem rozmiarów tablicy przepełnienia w celu zagwarantowania odpowiedniej jej wielkości mogącej pomieścić wszystkie elementy wywołujące konflikt. 3. Próbkowanie liniowe Jak zauważyliśmy wcześniej, konflikty dostępu są w metodzie haszowania nieuchronne. Nie istnieje bowiem idealna funkcja h( ), która rozmieściłaby równomiernie wszystkie T max elementów po całej tablicy T. Idea próbkowania liniowego jest przedstawiona na rys. 4.

Techniki wyszukiwania danych haszowanie 5 1) 2) 3) 4) A C B D G A C B E D G A C B E D F G H A C B E D F G Rysunek 4: Obsługa konfliktów dostępu przy próbkowaniu liniowym: 1) bez konfliktu, 2) konflikt B z E, 3) konflikt A z F, 4) konflikt G z H W momencie zapisu nowego rekordu do tablicy, w przypadku stwierdzenia konfliktu możemy spróbować zapisać element na pierwsze kolejne wolne miejsce. Ciekawe jest teoretyczne wyliczanie średniej ilości prób potrzebnej do odnalezienia danej x. W przypadku poszukiwania zakończonego sukcesem średnia ilość prób wynosi około: 1 2 + 1 1 2 (1 α) gdzie α jest współczynnikiem zapełnienia tablicy T. Analogicznie wynik dla przeszukiwania zakończonego niepowodzeniem wynosi około: 1 2 + 1 1 2 (1 α) 2 Przykładowo dla tablicy zapełnionej w 2/3 swojej pojemności (α = 2/3) liczby te wyniosą odpowiednio 2 i 5. W praktyce należy unikać szczelnego zapełnienia tablicy T, gdyż powyższe liczby staja się bardzo duże. Powyższy wzór został wyprowadzony przy założeniu funkcji h( ), która rozsiewa równomiernie elementy po dużej tablicy T. Powyższe zastrzeżenia są bardzo istotne, ponieważ podane wyżej rezultaty maja charakter statystyczny. 4. Podwójne haszowanie W metodzie próbowania liniowego jesteśmy narażeni na liniowe grupowanie elementów, co zwiększa czas poszukiwania wolnego miejsca dla nowego elementu tablicy T. Jednocześnie zwiększa się czas przeszukiwania tablicy T. Istnieje łatwy sposób uniknięcia liniowego grupowania elementów polegający na podwójnym haszowaniu. W momencie napotkania konfliktu następuje próba dodatkowego rozrzucenia elementów przy pomocy drugiej, pomocniczej funkcji haszującej h 2 ( ). Dobór funkcji h 2 ( ) ma duży wpływ na jakość wstawiania i poszukiwania. Przede wszystkim funkcja h 2 ( ) powinna być różna od pierwotnej funkcji haszującej h 1 ( ). Ponadto, funkcja ta musi być prostą aby nie spowolnić procesu wstawiania i poszukiwania. Przykładem takiej prostej i jednocześnie skutecznej funkcji jest funkcja w postaci: h 2 (v) = 8 (v mod 8). Metoda podwójnego kluczowania jest interesująca ze względu na zysk w szybkości poszukiwania danych. średnia ilość prób

Techniki wyszukiwania danych haszowanie 6 zakończona sukcesem wynosi około: ( ) 1 ln 1 α α gdzie α jest współczynnikiem zapełnienia tablicy T. Analogicznie wynik dla poszukiwania zakończonego niepowodzeniem wynosi około: Literatura 1 1 α [1] T. H. Cormen i in., Wprowadzenie do algorytmów, WNT, 2000 [2] A. Drozdek Struktury danych w jezyku C, WNT, 1996 [3] D. Horel Rzecz o istocie informatyki. Algorytmika, WNT, 1992 [4] R. Sedgewick Algorytmy w C++, Wydawnictwo RM, 1999 [5] P. Wróblewski, Algorytmy, struktury danych i techniki programowania, HELION, 1996