2.Quadratic probing:
Quadratic
probing is another method for resolving collisions in hash tables.It operates
by taking the original hash value and adding successive values of a quadratic
polynomial to the starting value. Quadratic probing avoids the clustering
problem that occur with linear probing and may also result in probing the same
setoff alternate cells.
In this method when
a collision occurs at a location 1,probe bucket 1+1,1+4-----,1+9 where as in
linear probing probes bucket at location 1+1,1+2,1+3---etc.
|
Where i=1,2,3,--------
h(x) is the starting value
or key value
n is the size of the hash
table or any prime number.
Ø Quadratic
probing may also result in probing the same set of alternative cells and this
is known as secondary clustering, which
occurs when hash table size is not a prime number.
Ø If
n is prime number then quadratic probing probes exactly half of the number of
locations in the hash table.
The following
algorithm denotes insertion on a table
using quadratic probing:
ALGORITHM:QINSERT(key,r)
1.Set
i=h(key)
2.Set c=0
3.Loop while (c<m)and(not
empty(r[i])))and(not deleted r[i])) and (r[i],k< >key)do
4.Set i=(i+c+1)mod m
5.Set c=c+2
6.End loop
7.Check whether empty
(r[i]) or deleted(r[i])then
8.Set r[i]_k=key
9.Set n=n+1
10.Else
write “table full,or key already
in table”
11.End
The following
algorithm denotes insertion
on a table using quadratic
probing:
Algorithm:
1.Set i=h(key)
2.c=increament (key)
3.set last=(i+(n-1)*c)mod m
4.loop
while (i<last) and (not empty (r[i]))and (r[i],k<key)do
5.
set i=(i+c)mod n
6.check whether r[i],k=key then
7.value =1
8.
Else
9.value=-1
10. End
Example:
Insert
the following elements
in the hash table with table
size 10.
37,90,55,22,11,17,49,87
Ø While inserting
37,90,55,22,11 there will be
no collisions
h(x)=x mod 10
h(37)=37 mod 10=7
h(90)=90 mod 10=0
h(55)=55 mod
10=5
h(22)=22 mod 10=2
h(11)=11 mod 10=1
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
90
|
11
|
22
|
|
|
55
|
|
37
|
|
|
Ø Inserting 17
collision occurs and bucket
7 has already an
element 37.Hence we
will apply quadratic
probing to insert this
record in the
hash table.
h(x)= x mod n
h(17)=17 mod 10=7(collision)
using quadratic
probing ,the next free location
will be calculated as
h(x)=(h(x)+i2 )mod n
=(17+02 ) mod
10 for i=0
=7(OCCUPIED state so try
next location)
Using quadratic
probing the next
free location will
be calculated as
h(x)=(h(x)+i2 )mod n
=(17+12 )mod
10 for
i=1
=8(EMPTY state
so insert 17 at 8th location)
[0]
[1] [2] [3] [4] [5] [6] [7] [8] [9 ]
90
|
11
|
22
|
|
|
55
|
|
37
|
17
|
|
Ø Insert 49
there will be no collision
because 9th
location is empty.
h(x)=x mod 10
h(49)=49 mod 10=9(no
collision)
[0]
[1] [2] [3] [4] [5] [6] [7] [8] [9]
90
|
11
|
22
|
|
|
55
|
|
37
|
17
|
49
|
Ø Insert 87
a collision occurs
and bucket 7
has already an
element 37.Hence we
will apply quadratic
probing to insert
this record in
the hash table.
h(x)=x mod 10
h(87)=87 mod
10=7(collision)
using quadratic
probing the next
free location will be
calculated as
h(x)=(h(x)+i2 )
mod n
=(87+02)mod
10 for
i=0
=7(OCCUPIED state
so try next
location)
Using quadratic
probing the next
location will be
calculated as
h(x)=(h(x)+i2
)mod n
= (87+12
)mod 10
=8(OCCUPIED state
so try next
location)
Using quadratic
probing the next
free location will
be calculated as
h(x)=(h(x)+i2 )
mod n
=(87+22 ) mod 10
=1(OCCUPIED state
so try next
location)
Using quadratic
probing the next
free location will
be calculated as
h(x)=(h(x)+i2 )
mod n
=(87+32
) mod
10
=6(EMPTY state so
insert 87 at 6th location)
[0]
[1] [2] [3] [4] [5] [6] [7] [8] [9]
90
|
11
|
22
|
|
|
55
|
87
|
37
|
17
|
49
|
Ø It is
observed that if
we want to
place all the
necessary elements in the
hash table the
size of divisor
(n) should be twice
as large as
total number of
elements.
No comments:
Post a Comment