Wykład 4Wstęp: Tablice rozproszone Numeryzacja klucza Rozmieszczanie pierwotne Usuwanie kolizji Reorganizacja tablicy Rozmieszczanie algorytmiczne - wyszukiwanie liniowe, binarne, - za mało efektywne (czasowo i pamięciowo); - tablica rozproszona, a rozmieszczanie w takiej strukturze rozmieszczanie algorytmiczne - złożoność wyszukiwania O(c). 2 Rozmieszczanie algorytmiczne Tablica rozproszona: - tablicą rozproszoną nazywamy system T=<K, D, h>, gdzie: K - zbiór n kluczy, D - zbiór p adresów, h: K→D - funkcja odwzorowująca K w D (haszująca / mieszająca / kodująca / transformująca klucz w adres); - n /p współczynnik wypełnienia 3 Rozmieszczanie algorytmiczne Rozmieszczanie algorytmiczne: - składa się z algorytmów: numeryzacji klucza, rozmieszczania pierwotnego (funkcja mieszająca) i rozwiązywania konfliktów (usuwania kolizji); - problemy: wybór funkcji numeryzującej i mieszającej, wybór metody rozwiązywania konfliktów; - zastosowania: bazy danych, budowa kompilatorów, rozwiązywanie zadań numerycznych zawierających macierze rzadkie, systemy plików. 4 Numeryzacja klucza Wstęp: - algorytmy rozmieszczania pierwotnego i usuwania kolizji są często numeryczne, klucz natomiast jest często alfanumeryczny i na tyle długi, że jego binarnej reprezentacji nie da się interpretować numerycznie; trzeba go przetworzyć na liczbę z zachowaniem wrażliwości tego przetworzenia na każdy bit wejścia; warunek ten spełnia metoda składania. Numeryzacja klucza Metody składania: - składanie cykliczne z sumowaniem arytmetycznym: potnij konwertowany ciąg bitów na odcinki o długości równej długości żądanego wyniku; podpisz i sumuj arytmetycznie odrzucając ewentualny nadmiar; - składania cykliczne z różnicą symetryczną: jak wyżej, ale zamiast sumy zastosuj różnicę symetryczną (XOR); trochę szybsze niż poprzednie; - składanie zygzakowe: po podpisaniu odcinków jeden pod drugim, odwróć kolejność bitów w co drugim z nich; sumuj lub stosuj XOR; koszt operacji może dać korzyść w postaci bardziej równomiernego rozmieszczenia elementów. 5 6 1 to długość tablicy = 2k działek. ZALETY: bardzo prosty algorytm.tworzymy dodatkowe pole w rekordzie. Algorytmy rozmieszczania zależne od rozkładu kluczy: . Algorytmy rozwiązywania konfliktów bez obszaru nadmiarowego: . ile ci potrzeba.zbieramy dane statystyczne o znakach występujących w reprezentacji kluczy ze zbioru K.metody losowe. ZNACZENIE METODY: raczej historyczne. WŁASNOŚCI ROZPRASZAJĄCE: dobre. aby utworzyć listę.metoda dzielenia.metoda środka kwadratu.podwójne mieszanie. metoda Radkego.z listą synonimów . 9 10 Algorytmy rozwiązywania konfliktów (usuwania konfliktów) Algorytmy rozwiązywania konfliktów (usuwania kolizji) Algorytmy rozwiązywania konfliktów z obszarem nadmiarowym: . dobre mieszanie. jeżeli długość tablicy jest liczbą pierwszą albo pseudopierwszą (żaden czynnik pierwszy nie jest mniejszy niż 20). . WADA: narzucona wielkość tablicy. indeksacja od 0 do 2k -1. WARUNEK: dobre mieszanie. ALGORYTM: Klucz znumeryzowany podziel przez długość tablicy. ZALETY: względna prostota algorytmu. .metoda składania.z listą synonimów .w. a numeracja działek od 0 do 2k -1..metody kwadratowe: wariant prymitywny. . weź resztę z tego dzielenia. zinterpretuj to jako adres. dobre rozpraszanie. . WADY: konieczność dociągania długości tablicy do najbliższej liczby pierwszej albo pseudopierwszej. Algorytmy rozmieszczania pierwotnego Metoda składania WARUNEK: Jeżeli przez składanie klucz został skrócony do k bitów.Algorytmy rozmieszczania pierwotnego Algorytmy rozmieszczania niezależne od rozkładu kluczy: . .metody liniowe. 7 8 Algorytmy rozmieszczania pierwotnego Metoda środka kwadratu Algorytmy rozmieszczania pierwotnego Metoda dzielenia (reszty z dzielenia) ALGORYTM: Weź klucz znumeryzowany.z dodatkową tablicą. podnieś go do kwadratu. WADY: narzucony wymiar tablicy 2k j. metoda Daya. aby utworzyć listę. Algorytmy rozwiązywania konfliktów z obszarem nadmiarowym: . . wybierz ze środka tyle bitów. 11 12 2 .tworzymy dodatkowe pole w rekordzie. Wyszukiwanie określonego zapisu . powstawanie skupień drugiego rzędu. aby kolejne liczby kwadratowe obliczać nie przez podnoszenie do kwadratu. nie narzuca długości tablicy. i . czyli ciąg kolejnych liczb nieparzystych.. p . 13 14 Algorytmy usuwania kolizji Metody kwadratowe Metoda Radkego WARUNEK: długość tablicy musi być "liczbą Radkego". czyli 0 1 4 9 16 itd. usuwanie rekordu (zaznaczanie. 2. brak skoków na długie dystanse. 1: i ← 0. {wyznaczenie nowego adresu} 5: go to 3. ALGORYTM: a(1) = ( a(0) + 1²) mod p a(2) = ( a(0) . WADY: wymuszenie dotyczące długości tablicy.2²) mod p itd. gdzie j jest dowolną liczbą naturalną. 'koniec algorytmu' end. 80%. Usuwanie określonego zapisu .współczynnik całkowity. konieczność obliczania (albo przechowywania i odszukiwania) kwadratów kolejnych liczb naturalnych. aby długość tablicy była liczbą Radkego. że usunięty). 15 Algorytmy usuwania kolizji Metody kwadratowe Metoda Daya Metoda opiera się na spostrzeżeniu.tu. Inne algorytmy przetwarzania tablic. że ciąg liczb kwadratowych (tzn.. UWAGI: 1. ZALECENIE: uważać.długość tablicy. więc najprościej 0. zmiana rozmiaru tablicy. 2: di ← h(k). Współczynnik b: wszystko jedno jaki. byle nie 0. Wzór redukuje się zatem do: a(i) = ( a(0) + i ) mod p albo a(i) = ( a(0) – i ) mod p Algorytmy usuwania kolizji Metody kwadratowe Wariant prymitywny a(i) = ( a(0) + b * i + c * i2) mod p gdzie: b. c . ale oszczędza na podnoszeniu do kwadratu. {obliczanie adresu po. UWAGA: niech algorytm robi tylko p . double hashing. Pozostałe oznaczenia jak poprzednio. WADY: skłonność do tworzenia skupień pierwszego rzędu (modyfikacja: b jako zmienna.czyli b jest inna funkcja mieszającą.i2) mod p WADY DYSKWALIFIKUJĄCE: powtórne badania działek już przebadanych.numer próby usunięcia kolizji. liczbą pierwszą wyrażającą się wzorem 4*j + 3. Współczynnik c: wszystko jedno jaki. ale przez tworzenie i sumowanie ciągu kolejnych liczb nieparzystych.współczynniki rzeczywiste. else begin i ← i + 1. b . bo potem powtórne badania będą MUSIAŁY nastąpić. skupiska drugiego rzędu.Algorytmy usuwania kolizji Metody liniowe a(i) = ( a(0) + b * i ) mod p gdzie: a(0) . 2.sprowadza się do Tablice rozproszone Ogólny algorytm wprowadzania zapisu rekordu do tablicy rozproszonej 0: k = numeryzuj (klucz). 17 18 3 . Wprowadzanie nowego zapisu . daje po zróżnicowaniu: 1 3 5 7 itd.sprowadza się do szukania. np. 3. ZALETY: prostota algorytmu. 4. Współczynnik b: wszystko jedno jaki.: reorganizacja. 16 Operacje na tablicach rozproszonych 1. pomijanie niektórych działek.. ZALETA: niezawodność. Metoda Daya działa równie dobrze jak metoda Radkego.sprowadza się do szukania i REORGANIZACJI tablicy. tj. szukania. 4: di ← kolizja (i).1²) mod p a(3) = ( a(0) + 2²) mod p a(4) = ( a(0) . a więc najprościej 1 lub -1. Wzór upraszcza się zatem do postaci: a(i) = ( a(0) + i2) mod p albo a(i) = ( a(0) . ciąg kwadratów kolejnych liczb naturalnych): 0² 1² 2² 3² 4² itd. if i ≥ p then 'koniec algorytmu’ {wszystkie działki zajęte} end. Powstaje stąd pomysł. aby współczynnik zapełnienia nie przekraczał ok.} 3: if T[di] = 0 {działka pusta} then begin T[di] ← zapis (k).1 kroków.adres początkowy wyznaczony przez algorytm mieszający. Metoda Daya jest modyfikacją metody Radkego i wymaga również. więc najprościej 1 albo -1. 19 Reorganizacja tablic rozproszonych 1. Przygotowanie do reorganizacji: Każdy rekord wyposażamy w dwa jednobitowe pola techniczne: . umieść nowy rekord i oznacz b2 = 1.bit rekordu żywego b1 .T[d] = 0 {działka T[d] pusta} ⇒ zakładamy. uruchom algorytm rozmieszczania pierwotnego (wyznacz nowy adres rekordu) (to znaczy jeśli martwy lub trwały to pomijamy) – postępuj następująco z nowym adresem: a) if działka pusta lub zajęta przez rekord martwy then umieść nowy rekord i oznacz bitem trwałości (czyli go to 2) else b) if działka zajęta przez rekord żywy. nietrwały. (?) then 'zakończ niepomyślnie'. {obliczenie nowego adresu} 7: go to 3. 21 4 . then wypchnij ten rekord. a rekord wypchnięty traktuj jako nowy (go to 3) else c) if działka zajęta przez rekord trwały. 1: i ← 0.Tablice rozproszone Ogólny algorytm szukania zapisu rekordu w tablicy rozproszonej 0: k = numeryzuj (klucz).bit rekordu trwałego b2 (przed uruchomieniem reorganizacji b2 = 0) 20 Reorganizacja tablic rozproszonych 2. 3: if KEY(di) = klucz KEY(d) funkcja odwrotna do numeryzuj. 2: di ← h(k). 5: i ← i+ 1. nietrwałego.. przejdź do działki wskazanej przez ten algorytm i (go to a)). w sensie odszukania adresu then 'zakończ pomyślnie'. Po napotkaniu rekordu żywego. 4: if KEY(di) = 0 . then uruchom algorytm usuwania kolizji.. 6: di ← kolizja (i). że tablica nie jest. Przeglądaj sekwencyjnie działki tablicy aż do końca 3.