lab_hash worksheet

Assignment Description

In this lab you will be implementing functions on hash tables with three different collision resolution strategies — separate chaining, linear probing, and double hashing. These hash tables serve an implementation of the dictionary abstract data type.

Lab Insight

Hashing is very powerful as it enables us to build data structure like hash tables and maps. On top of which, there are variations of hashing that can be used to help encrypt data. If you are interested in learning more about the applications of hashing, you can take CS 498 Applied Cryptography, CS 461 Computer Security I, and CS 463 Computer Security II.

Getting Set Up

From your CS 225 git directory, run the following on EWS:

git fetch release
git merge release/lab_hash -m "Merging initial lab_hash files"

If you’re on your own machine, you may need to run:

git fetch release
git merge --allow-unrelated-histories release/lab_hash -m "Merging initial lab_hash files"

Upon a successful merge, your lab_hash files are now in your lab_hash directory.

The code for this activity resides in the lab_hash/ directory. Get there by typing this in your working directory:

cd lab_hash/

If you want to speed up compile time on a make, try using make -j <target>, ie make -j test

Notes About list Iterators

When you are working with the Separate Chaining Hash Table, you will need to iterate over the linked list of a given bucket. Since the hash tables are templatized, however, this causes us a slight headache syntactically in C++. To define a list iterator on a given bucket, you will need to declare it as follows:

typename list< pair<K,V> >::iterator it = table[i].begin();

If you use the list::erase() function, be advised that if you erase the element pointed to by an iterator that the parameter iterator is no longer valid. For instance:

std::list<std::pair<K, V>> it = table[i].begin();
table[i].erase(it);
it++;

is invalid because it is invalidated after the call to erase(). So, if you are looping with an iterator, remember a break statement after you call erase()!

Separate Chaining Hash Table

Open your schashtable.cpp. In this file, several functions have not been implemented—your job is to implement them.

insert

find

remove

resizeTable

Linear Probing Hash Table

Open your lphashtable.cpp. In this file, you will be implementing the following functions.

insert

findIndex

remove

resizeTable

Double Hashing Hash Table

Open your dhhashtable.cpp. In this file, you will be implementing the following functions.

insert

findIndex

remove

Committing Your Code

Guide: How to submit CS 225 work using git

Grading Information

The following files (and ONLY those files!!) are used for grading this lab:

If you modify any other files, they will not be grabbed for grading and you may end up with a “stupid zero.”