Académique Documents
Professionnel Documents
Culture Documents
Linear probing:
Insert item (k, e)
i = h(k)
A[i] is occupied
Try A[(i+1) mod N]: used
Try A[(i+2) mod N]
and so on until
an empty bucket is found
3/9/2005 10:46 PM
Double Hashing
Quadratic probing
A[i] is occupied
Try A[(i+1) mod N]: used
Try A[(i+22) mod N]: used
Try A[(i+32) mod N]
and so on
May not be able to find an
empty bucket if N is not
prime, or the hash table is
at least half full
3/9/2005 10:46 PM
Consider a hash
table storing integer
keys that handles
collision with double
hashing
N = 13
h(k) = k mod 13
d(k) = 7 k mod 7
3/9/2005 10:46 PM
0 1 2 3 4 5 6 7 8 9 10 11 12
0 1 2 3 4 5 6 7 8 9 10 11 12
Open addressing:
using less memory
slower than chaining in
general
more complex removals
COSC 2011 - Winter 2005
3/9/2005 10:46 PM
h (k ) d (k )
3/9/2005 10:46 PM
Performance of Hashing
3/9/2005 10:46 PM
3/9/2005 10:46 PM
Memory address:
We reinterpret the memory
address of the key object as
an integer (default hash code
of all Java objects)
Good in general, except for
numeric and string keys
Integer cast:
We reinterpret the bits of the
key as an integer
Suitable for keys of length
less than or equal to the
number of bits of the integer
type (e.g., byte, short, int and
float in Java)
3/9/2005 10:46 PM
Component sum:
We partition the bits of
the key into components
of fixed length (e.g., 16 or
32 bits) and we sum the
components (ignoring
overflows)
Suitable for numeric keys
of fixed length greater
than or equal to the
number of bits of the
integer type (e.g., long
and double in Java)
10
Summary
11
12