Hash tables
Ideally we want our hash function to map each
search key into a unique index into our table.
This would be considered a perfect hash function.
But, it is only possible to construct perfect hash
functions if we can afford to have a unique entry
in our table for each search key -- which is not
typically the case.
This means that a typical hash function will end
up mapping two or more search keys into the
same table index! Obviously this causes a
collision.