/**********************************************
APPLICATION : Collision Resolution Technique : Double Hashing
CODED BY : Ankit Pokhrel
COMPILED ON : Borland C++ Ver 5.02
DATE : 2010 - October - 22
***********************************************/
#include <iostream.h>
#include <conio.h>
int main()
{
int tb_size,size,resize,key,n,address,*arr,temp;
cout << "Collision Resolution Technique : Double Hashing,";
cout << "\nThe Hash Function is Key%H1_Size and Key%H2_Size,";
cout << "\nThe Table Size must be atleast two times H1_Size and H2_size.";
cout << "\n\nEnter Table Size : ";
cin >> tb_size;
arr = new int[tb_size];
for(int i = 0;i < tb_size;i++)
arr[i] = -1;
cout << "\nEnter Size for First Hash Function (H1_Size) : ";
cin >> size;
cout << "\nEnter Size for Second Hash Function(H2_Size) : ";
cin >> resize;
cout << endl << "How Many Items? ";
cin >> n;
cout << endl << "Enter " << n << " Keys\n";
for(int i = 0;i < n;i++)
{
int j = 1;
cin >> key;
address = key%size;
cout << "\nH(" << key << '%' << size << ") = " << address;
if(arr[address] == -1)
arr[address] = key;
else
{
int h = key%resize; //Calculate address using second Hash Function
temp = address;
while(arr[temp] != -1)
{
cout << "\t(Collision occurs, Rehash required)\n";
temp = address + j*h; //find address
cout << " H' = " << address << '+' << (j*h) << " = " << temp;
if(temp >= size)
temp = temp - size;
j++;
}
address = temp;
arr[address] = key; //insert key
}
}
cout << "\n\nHash Table\n";
cout << "----------";
cout << endl << endl;
for(int i = 0;i < tb_size;i++)
{
if(arr[i] != -1)
cout << i << '\t' << arr[i] << endl;
else
cout << i << '\t' << endl;
}
getch();
return 0;
}
OUTPUT
Collision Resolution Technique : Double Hashing,
The Hash Function is Key%H1_Size and Key%H2_Size,
The Table Size must be atleast two times H1_Size and H2_Size.
Enter Table Size : 25
Enter Size for First Hash Fucntion (H1_Size) : 13
Enter Size for Second Hash Fucntion (H2_Size) : 11
How Many Items? 11
Enter 11 Keys
25 46 75 29 36 53 68 89 117 120 140
H(25%13) = 12
H(46%13) = 7
H(75%13) = 10
H(29%13) = 3
H(36%13) = 10 (Collision occurs, Rehash required)
H' = 10+3 = 13
H(53%13) = 1
H(68%13) = 3 (Collision occurs, Rehash required)
H' = 3+2 = 5
H(89%13) = 11
H(117%13) = 0
H(120%13) = 3 (Collision occurs, Rehash required)
H' = 3+10 = 13 (Collision occurs, Rehash required)
H' = 3+20 = 23
H(140%13) = 10 (Collision occurs, Rehash required)
H' = 10+8 = 18
Hash Table
0 117
1 53
2
3 29
4
5 68
6
7 46
8
9
10 75
11 89
12 25
13 36
14
15
16
17
18 140
19
20
21
22
23 120
24
1 comment:
thanksssss
Post a Comment