Designing Hash Tables

Post on 06-Jan-2016

37 views 0 download

description

Designing Hash Tables. Sections 5.3, 5.4, 5.5. Designing a hash table. Hash function: establishing a key with an indexed location in a hash table E.g. Index = hash(key) % table_size; Resolve conflicts: Need to handle case where multiple keys mapped to the same index. - PowerPoint PPT Presentation

Transcript of Designing Hash Tables

1

Designing Hash Tables

• Sections 5.3, 5.4, 5.5

2

Designing a hash table

1. Hash function: establishing a key with an indexed location in a hash table

– E.g. Index = hash(key) % table_size;

2. Resolve conflicts: – Need to handle case where multiple keys mapped to

the same index.– Two representative solutions

• Chaining with separate lists

• Probing open addressing

3

Separate Chaining

• Each table entry stores a list of items

• Multiple keys mapped to the same entry maintained by the list

• Example– Hash(k) = k mod 10

– (10 is not a prime, just for illustration)

4

Separate Chaining Implementation

Type Declaration forSeparate ChainingHash Table

5

HashedObj

• Needs to provide– Hash function

• Provided for string and int (the two non-member functions)

– Equality operators (operator== or operator!= )

6

An example class for HashedObj

7

Chaining

8

Chaining (contd.)

9

Chaining (contd.)

10

Analysis of Chaining

• Consider an array of size M with N records– Worst case insert without uniqueness check = O(1)

• Find location to insert and push_back/front

– Worst case remove/find/unique insert = O(N)– Expected case unique insert/find/remove

• 1 + O(N/M)– Let us resize the table if N/M exceeds some constant – Expected time = 1 + O() = O(1)

11

Hash Tables Without Chaining

• Try to avoid buckets with separate lists

• How use Probing Hash Tables– If collision occurs, try another cell in the hash table.

– More formally, try cells h0(x), h1(x), h2(x), h3(x)… in succession until a free cell is found.• hi(x) = hash(x) + f(i)

• And f(0) = 0

12

• f(i)=i

Insert (assume no duplicated keys)1. Index = hash(key) % table_size;

2. If table[index] is empty, put information (key and others) in entry table[index].

3. If table[index] is not empty thenIndex ++; index = index % table_size;

goto 2.

Search (key)1. Index = hash(key) % table_size;

2. If (table[index] is empty) return –1 (not found).

3. Else if (table[index].key == key) return index;

4. Index ++; index = index % table_size; goto 2.

Linear Probing

13

Example

Insert 89, 18, 49, 58, 69 (hash(k) = k mod 10)

14

Linear probing

• Delete– Can be tricky, must maintain the consistency of the hash table.

– What is the simplest deletion strategy you can think of??

15

Quadratic Probing

f(i) = i2

16

Probing strategy hash table

17

Double Hashing

• f(i) = i*hash2(x)

• E.g. hash2(x) = 7 – (x % 7)

What if hash2(x) = 0 for some x?

18

Analysis of Hash Table Without Chaining

• Expected case analysis of insertion into a table of size M containing n records

i=1 iprobability of trying i buckets

– = 1(M-n)/M + 2(n/M)(M-n)/M + 3(n/M)2(M-n)/M + ... • Let = n/M

– Time = 1*(1-) + 2 (1-) + 32(1-) + ... – = 1 - + 2 - 22 + 32 - 33 + 43 - 44 ... – = 1 + + 2 + 3 + ... = 1/(1-)

• Assume < 1– Keep bounded by some constant < 1

19

Rehashing

• Hash Table may get full– No more insertions possible

• Hash table may get too full– Insertions, deletions, search take longer time

• Solution: Rehash– Build another table that is twice as big and has a new hash

function– Move all elements from smaller table to bigger table

• Cost of Rehashing = O(N)– But happens only when table is close to full– Close to full = table is X percent full, where X is a tunable

parameter

20

Rehashing Example

After RehashingOriginal Hash Table

After Inserting 23

21

Rehashing Implementation

22

Rehashing implementation