90 likes | 254 Views
Hash Tables. What is a Hash Table?. Container of elements where each element has an associated key Each key is mapped to a value that determines the table cell where element should be placed Mapping is called the hash function. Hash Table Operations. size() isEmpty()
E N D
What is a Hash Table? • Container of elements where each element has an associated key • Each key is mapped to a value that determines the table cell where element should be placed • Mapping is called the hash function
Hash Table Operations • size() • isEmpty() • find(k) – find element with key k • insertItem(k, e) – insert element e with key k • removeElement(k) – remove element with key k • elements() – return Iterator of elements • keys() – return Iterator of keys
element is name key is id number map id number to array index Array Implementation [0] bob 1234 [1] [2] jane 1344 [3] sally 1354 [4] [5] [6] [7] [8] [9]
Why a Hash Table? • Random access to items • Don’t have to perform search to find item • Complexity of find/remove?
Hash Function • The hash function has to map the key to a value • Bad option: add up ASCII values of characters in key and % by number of table elements • Better option: for(i=0; i < key.length(); i++) hashVal= 37*hashVal + key[i] hashVal %= tableSize
Collisions • It is still possible that two keys will map to the same value • Separate chaining • each array slot is a pointer to a linked list of elements • how would find/insert/remove work? • Linear probing • walk down the list until you find an empty slot
Collisions • Quadratic probing • A[i+f(j) mod N] for j=0, 1, 2, … where f(j) = j2 • Double Hashing • probe at hash2(x), 2hash2(x), etc
Rehashing • As table gets full, insertions may slow because of more collisions • Rehash by creating table twice as large and reinserting all elements into new table • requires rehashing all keys (because of new table size)