Phone Book |
Design a data structure to store your contacts: names of people along with their phone numbers. The data structure should be able to do the following quickly: Add and delete contacts, Determine who is calling given their phone number. |
We need two Maps:
(phone number → name) and (name → phone number)
Implement these Maps as hash tables
First, we will focus on the Map from phone numbers to names
Direct Addressing
Operations run in O(1)
Memory usage: O(10L), whereL is the maximum length of a phone number
Problematic with international numbers of length 12 and more: we will need1012bytes = 1TB to store one person's phone book--- this won't fit in anyone's phone!
Chaining
Select hash function h with cardinality m
Create array Name of size m
Store chains in each cell of the array Name
Chain Name[h(int(P))]contains the name for phone number P
Parameters
n phone numbers stored
m: cardinality of the hash function
c: length of the longest chain
O(n+ m)memory is used