Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

You need to write two hash functions (both returning integers) h _ 1(k) = k mod m h _ 2(k) = m * frac(k*A), A

You need to write two hash functions (both returning integers)

h_1(k) = k mod m
h_2(k) = m * frac(k*A), A = (sqrt(5) 1)/2

frac(k*A) = (k*A int (k*A))

Also define a rehash function as below:

rehash(int h, int k, int j)

return (h + j * g(k, j) ) mod m

The g function is defined as:

g(int k, int j)

if option == 1, return 1

else if option == 2, return c1 + c2* j

else if option == 3, return (p (k mod p) ) , p is an user input

Program should create a hash table as explained in the class.

Declare as global variables:

m (size of Hash Table)
option (will allow you to choose one of the three collision resolving technique),
hash_method (1 for using division method and 2 for multiplication method)
p (int)
c1, c2 (int)

In main, declare n (integer) and alpha (as float), alpha = n/m

Both n and alpha are user inputs

Also, option and hash_method are user inputs.

Get inputs for C1, C2 and p

Compute m = (n/alpha)

Check is m is a prime number, call ISPrime function

If not, If not a prime, call GetPrime to get the value of next higher prime value.

if (IsPrime(m))

display m , m is a prime no.

else

m = GetPrime(m);

display m

Create an array dynamically for hashTable with size m

Initialize all the values of this array to 0 (assuming no key will be 0)

Now using a loop enter n number of keys, and one key (k) at a time, and inside this loop, compute the h value first, by calling either h_1(k) or h_2(k) depending on the value of hash_method

For(count = 1; count <= n; count++)

{ cin >> k;

Set h = h_1(k) or h_2(k), depending on hash_method is 1 or 2

I = h

if hashTable[I] != 0, then

j = 0

do

J++

I = rehash(h, k, j)

while hashTable[I] != 0

end if

hashTable[I] = k

}

Display the HashTable

Cout << setw(10) << left << Index << setw(10) << left << Key << endl;

For(I = 0 ; I <= m-1 ; I++)

cout << setw(10) << left << I << setw(10) << left << hashTable[I] << endl;

bool IsPrime(int x)

{

int k = x/2;

int i;

for(i = 2; i <= k; i++)

{

if (x % i == 0) return false;

}

return true;

}

int GetPrime(int x)

{

int i;

for(i = x+1; i <= INT_MAX; i++) climits as a header file

{

if(IsPrime(i)) return i;

}

return 1;

}

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

Harness The Power Of Big Data The IBM Big Data Platform

Authors: Paul Zikopoulos, David Corrigan James Giles Thomas Deutsch Krishnan Parasuraman Dirk DeRoos Paul Zikopoulos

1st Edition

ISBN: 0071808183, 9780071808187

More Books

Students also viewed these Databases questions

Question

What are the Five Phases of SDLC? Explain each briefly.

Answered: 1 week ago

Question

How can Change Control Procedures manage Project Creep?

Answered: 1 week ago