Termin zajęć: 8./9. maja 2012
Proszę pobrać archiwum hashing.zip, w którym znajdują się pliki potrzebne do wykonania ćwiczeń na zajęciach.
Oto krótki opis plików:
finduniversumsize.cpp
- program obliczający optymalną wielkość tablicy haszującej na podstawie przewidywanej ilości danych i średniej długości łańcucha.findnextprime.cpp
- program wyszukujący kolejną liczbę pierwszą.hchain.h
+ hchain.cpp
- moduł zawierający klasę implementującą tablicę haszującą z łańcuchową metodą rozwiązywania konfliktów.hopen.h
+ hopen.cpp
- moduł zawierający klasę implementującą tablicę haszującą z metodą adresowania otwartego. Moduł ten nie wspiera poprawnie usuwania/usuniętych wartości - uzupełnienie będzie jednym z zadań.mainmodular.cpp
- niezobowiązujący plik pokazujący przykładowe wykorzystanie klas.Proszę zapoznać się ze strukturą i działaniem poszczególnych klas, przetestować kod i w miarę możliwości przynieść na zajęcia laptopy wraz z wszystkimi plikami (można umówić się na pracę w parach/trójkach i na zajęciach pracować we 2-3 osoby przy jednym komputerze).
Punkty oznaczone należy samodzielnie wykonać w domu, pozostałe punkty stanowią opis, wprowadzenie, zachętę do samodzielnych testów.
finduniversumsize.cpp
który służy do wyznaczania wartości m na podstawie ilości przechowywanych danych i zakładanej średniej długości listy.hchain
który jest klasą realizującą tablicę haszującą z łańcuchową metodą rozwiązywania konfliktów.3584
w której zakładamy że średnia długość listy wynosi 7
.int f(int val)
return val%m
gdzie:
m = 512 (3584/512 = 7)
,finduniversumsize
.hash_chain
, których konstruktor przyjmuje następujące wartości:512
,finduniversumsize
,3584
losowych wartości z przedziału [0 do np. 10000]
.hash_chain::printInfo()
2
w lewo i ustawiamy najmniej znaczącyp
-tą potęgą 2
to nic innego jak p najmniej znaczących bitów liczby. Zatem wszystkie generowane indeksy mają takie same wartości dwóch ostatnich bitów.4
bity → wynik: jeszcze gorsza jakość.
W paczce znajdują się pliki hopen.cpp
i hopen.h
które zawierają definicję klasy realizującej tablicę haszującą w której konflikty są rozwiązywane metodą adresowania otwartego.
W tej klasie brakuje obsługi wartości usuniętych. Zadanie polega na uzupełnieniu podanej klasy o obsługę tych wartości.
Rozwiązanie jest krótkie: należy:
#define STS_DLTD 2
cpp
uzupełnić:insert
remove
printValues
dopisać jeden warunek:else if(_ststab[i] == STS_DLTD) cout << "DLTD, ";