CPSC 461: Copyright © 2002 Katrin Becker 1998-2002 Last Modified August 5, 2000 11:46 AM

Hashing: Collision Resolution: Double Hashing

  1. hash record to get address
  2. if address is unavailable, hash again
  3. if address still not available - use linear probing

 

WORD hash1(WORD) hash2(WORD) #probes
THE 25 1
OF 9 1
AND 11 1
TO 27 1
A 1 1
IN 7 1
THAT 9 (synonym) + 18 = 27; collision - goes to 28 3
IS 26 1
WAS 5 1
HE 13 1
FOR 27 (synonym) + 8 = 35 MOD 31 = 4 2
IT 29 1
WITH 2 1
AS 18 1
HIS 18 (synonym) + 5 = 23 2
ON 1 (synonym) + 29 = 30 2
BE 7 (synonym) + 7 = 14 2
AT 21 1
BY 27 (synonym) + 27 = 54 MOD 31 = 23; collision - goes to 23 3
I 9 (synonym) + 9 = 18; collision - goes to 19 3
THIS 6 1
HAD 13 (synonym) + 13 = 26; collision - goes to 27,28,29,30,0 7
NOT 21 (synonym) + 18 = 39 MOD 31 = 8 2
NO 1 (synonym) + 29 = 30; collision - goes to 0,1,2, 6
TON 21 (synonym) + 18 = 39 MOD 31 = 8 collision - goes to 9,10 4
SAYS 24 (synonym) + 8 = 32 MOD 31 = 1 collision - goes to 2,3,...11,12 13
ARE 22 1
BUT 3 (synonym) + 14 = 17 2
FROM 22 (synonym) + 21 = 43 MOD 31 = 12; collision - goes to 13,14,15 5
OR 29 (synonym) + 2 = 31 MOD 31 = 0; collision - goes to 1,2,...15,16 18
HAVE 26 (synonym) + 5 = 31 MOD 31 = 0; collision - goes to 1,2,...19,20 22

0
HAD
1
A
2
WITH
3
NO
4
FOR
5
WAS
6
THIS
7
IN
8
NOT
9
OF
10
TON
11
AND
12
SAYS
13
HE
14
BE
15
FROM
16
OR
17
BUT
18
AS
19
I
20
HAVE
21
AT
22
ARE
23
HIS
24
BY
25
THE
26
IS
27
TO
28
THAT
29
IT
30
ON

TWO-PASS LOAD: AFTER PASS ONE

WORD hash1(WORD) hash2(WORD) #probes
THE 25   1
OF 9   1
AND 11   1
TO 27   1
A 1   1
IN 7   1
THAT 9 (synonym) {SAVE}
IS 26   1
WAS 5   1
HE 13   1
FOR 27 (synonym) {SAVE}
IT 29   1
WITH 2   1
AS 18   1
HIS 18 (synonym) {SAVE}
ON 1 (synonym) {SAVE}
BE 7 (synonym) {SAVE}
AT 21   1
BY 27 (synonym) {SAVE}
I 9 (synonym) {SAVE }
THIS 6   1
HAD 13 (synonym) {SAVE }
NOT 21 (synonym) {SAVE }
NO 1 (synonym) {SAVE }
TON 21 (synonym) {SAVE }
SAYS 24   1
ARE 22   1
BUT 3   1
FROM 22 (synonym) {SAVE }
OR 29 (synonym) {SAVE }
HAVE 26 (synonym) {SAVE }

TWO-PASS LOAD: AFTER PASS ONE

   
0
 
1
A
2
WITH
3
BUT
4
 
5
WAS
6
THIS
7
IN
8
 
9
OF
10
 
11
AND
12
 
13
HE
14
 
15
 
16
 
17
 
18
AS
19
 
20
 
21
AT
22
ARE
23
 
24
SAYS
25
THE
26
IS
27
TO
28
 
29
IT
30
 

TWO-PASS LOAD: PASS TWO

WORD hash1(WORD) hash2(WORD) #probes
THAT 9 (synonym) + 18 = 27; collision goes to 28 3
FOR 27 (synonym) + 8 = 35 MOD 31 = 4 2
HIS 18 (synonym) + 5 = 23 2
ON 1 (synonym) + 29 = 30 2
BE 7 (synonym) + 7 = 14 2
BY 27 (synonym) + 27 = 54 MOD 31 = 23;collision: goes to 24,25,26,27,28,29,30,0 10
I 9 (synonym) + 9 = 18; collision goes to 19 3
HAD 13 (synonym) + 13 = 26; collision goes to 27,28,29,30,0,...8 15
NOT 21 (synonym) + 18 = 39 MOD 31 = 8; collision - goes to 9,10 4
NO 1 (synonym) + 29 = 30; collision goes to 0,1,...11,12 15
TON 21 (synonym) + 18 = 39 MOD 31 = 8; collision - goes to 9,10,..,15 9
FROM 22 (synonym) + 21 = 43 MOD 31 = 12; collision - goes to 13,14,15,16 6
OR 29 (synonym) + 2 = 31 MOD 31 = 0; collision - goes to 1,2,...17 19
HAVE 26 (synonym) + 5 = 31 MOD 31 = 0; collision - goes to 1,2,...20 22

TWO-PASS LOAD: PASS TWO

 

   
0
BY
1
A
2
WITH
3
BUT
4
FOR
5
WAS
6
THIS
7
IN
8
HAD
9
OF
10
NOT
11
AND
12
NO
13
HE
14
BE
15
TON
16
FROM
17
OR
18
AS
19
I
20
HAVE
21
AT
22
ARE
23
HIS
24
SAYS
25
THE
26
IS
27
TO
28
THAT
29
IT
30
ON

Comments:
Did we do any better with the two-pass load?
Ave. # probes: 1-pass = 3.6
2-pass = 4.2 (!)
(for a while, then not)
Where did we loose it?
Why did we loose it? (too much primary clustering - words are too similar)
What could we do to make it better?
(make table bigger)
(alter hashing algorithm to create fewer collisions e.g. use 1st letter; word length to modify result)
How full was it when we lost it?
(about 2/3)

Back to Top
CPSC 461: Copyright © 2002 Katrin Becker 1998-2002 Last Modified August 5, 2000 11:46 AM