Starting from:
$30

$24

Lab 03 Solution

Purpose:




The purpose of this lab is to implement a hash table with closed hashing in C++.




General Requirements:




In this lab, you are required to implement a hash table with quadratic probing and double hashing using an array (not arrays in STL). You are required to build the hash table with both of the hashing schemes. You will need to show the hash table with each of these schemes separately. You are to read in a collection of strings from a data file of chars. All chars will be in lowercase, and your program can expect the user will always type in chars in lowercase. The first number from the data file is the size of the hash table. The rest of the file contains the keys that should be inserted in the hash table separated by a space. There shouldn’t be any duplicate keys inserted in the hash table. The file of strings you read from will be data.txt. You may hard code the file name if you wish. After building the structure, your program should ask the user to choose one of the options below:




------------------------------------------------------------

Please choose one of the following commands:

1- Insert

2- Delete

3- Find

4- FindPalindrome

5- ReverseString

6- Print

7- Exit




Hash:




The hash table should implement an appropriate constructor and destructor. The rest of the methods should be implemented as follows:




Insert(x) – should insert x into both the hash tables (maintained by quadratic probing and the double hashing schemes) when it is not already present. Insertion must be done at the location which is obtained by the hashing function. If the location is full, then a new location will be calculated with quadratic probing and double hashing, respectively. Display the message “x is added successfully" when x is inserted; otherwise display “Addition of x was not successful”.



Delete(x) – should delete the key x from both of the hash tables (maintained by quadratic probing and the double hashing scheme). The output should be either “x has been deleted” or “x is not found”. Then continue to the next command.



Print() – should print out all of the elements of both of the hash tables (i.e., those using quadratic probing and double hashing schemes) and should display output from bucket
0 to bucket m-1 in the format:




Bucket 0: Element list

Bucket 1: Element list

...

Bucket m-1: Element list




Find(x) – output “x is found at location n” if the key x is in either one or both of the hash tables (maintained by quadratic probing and the double hashing scheme) and “x is not found” otherwise for both quadratic probing and double hashing, respectively. Also, if the input string is not present but, if it is present in reverse order in the hash tables then the message should be displayed “string is present in reverse order at location n” with both schemes.



FindPalindrome – Find all palindrome strings from one of the hash tables. You should apply the hashing function starting from the beginning of the string and do the same from the end of the string. If the result of both hashing functions is equal, then return the string. Please note you can search for the palindrome string in any one of the hash tables (i.e., the one maintained by either quadratic probing or double hashing).



ReverseString(x) – Reverse the input string present at location x in both the hash tables (maintained by quadratic probing and the double hashing scheme). If the location is empty, then display a message “Location x is empty”.



Hash function h(x) – convert each char of x into its ASCII value for which only the first 8 chars are significant in x. Then apply weights to each char in x. This differentiates different strings composed from the same chars. The first char is assigned the weight of 10^0; the second char is assigned the weight of 10^1, and so on. The result of the ASCII value of each char of the string with its weight is added up and then given to the mod function with the size of hash table. Finally, return the location of x as a result of applying the hash function.



Rehash() – Rehash the table when the load factor, i.e., lambda, is greater than ½, and show the output of rehashing. Rehash should hash all the elements of an existing hash table into a new hash table, where the table size becomes the smallest prime number after 2*m for both of the tables maintained by quadratic probing and double hashing.



Index = summation of ASCII values % table size




Example1:

string A: computer

string B: computers

A and B are the same strings due to only consider the first 8 chars are significant




Example2:




string A: abc

string B: cba

index of A: (97*10^0 + 98*10^1 + 99*10^2) % table size

index of B: (99*10^0 + 98*10^1 + 97*10^2) % table size

Thus, string A and B will be placed into different bucket in hash table.




Hashing with Quadratic probing:




fi = i2, ∀ i, 1 ≤ i ≤ k-1, which is a family of quadratic functions, we have

h0(x) = (h(x) + 02) mod m




= h(x),

h1(x) = (h(x) + f1) mod m,

= (h(x) + 12) mod m,

h2(x) = (h(x) + f2) mod m,

(h(x) + 22) mod m,
. . .

hk-1(x) = (h(x) + fk) mod m,

(h(x) + (k-1)2) mod m.



Double Hashing:




h+ function:

h+(x) = R - (x mod R), where R < m is a prime.




Now, define fi = ih+.

Observe that

h0(x) = (h(x) + 0h+(x)) mod m

= h(x),

h1(x) = (h(x) + f1) mod m,

(h(x) + 1h+(x)) mod m, h2(x) = (h(x) + f2) mod m,



(h(x) + 2h+(x)) mod m,



. . .

hk(x) = (h(x) + fk) mod m,

(h(x) + kh+(x)) mod m.






Expected Results:




data.txt: 17 epic is an adventure and famous creative poem




As mentioned, the first number 17 indicates the size of the hash table hence, m = 17. Consider R = 5 for double hashing. Note: The value of x will be the result of calculation of the ASCII value of each char and its weight of the input string.




------------------------------------------------------------

Please choose one of the following commands:

1-
Insert
2-
Delete
3-
Find
4-
FindPalindrome
5-
ReverseString
6-
Print
7-
Exit
6





Quadratic probing:




0: epic

adventure
poem
an
creative
and
famous
is



Double hashing:




0: epic

adventure
an
creative
and
famous
is
poem



------------------------------------------------------------

Please choose one of the following commands:

1- Insert

2- Delete

3- Find




4- FindPalindrome

5- ReverseString

6- Print

7- Exit

1

Enter a string to be inserted:

adventures

Quadratic probing: adventures is duplicated, can’t be added to the hash table

Double hashing: adventures is duplicated, can’t be added to the hash table




------------------------------------------------------------

Please choose one of the following commands:

1- Insert

2- Delete

3- Find

4- FindPalindrome




5- ReverseString

6- Print

7- Exit

2

Enter a string to be deleted:

famous

Quadratic probing: famous is deleted from the hash table

Double hashing: famous is deleted from the hash table




------------------------------------------------------------

Please choose one of the following commands:

1- Insert

2- Delete

3- Find




4- FindPalindrome

5- ReverseString

6- Print

7- Exit

2

Enter a string to be deleted:

poem

Quadratic probing: poem is deleted from the hash table

Double hashing: poem is deleted from the hash table




------------------------------------------------------------

Please choose one of the following commands:

1- Insert

2- Delete




3- Find

4- Print

5- Exit

1

Enter a string to be inserted:

civic

Quadratic probing: civic is inserted into the hash table

Double hashing: civic is inserted into the hash table




------------------------------------------------------------

Please choose one of the following commands:

1- Insert

2- Delete

3- Find

4- FindPalindrome

5- ReverseString




6- Print

7- Exit

1

Enter a string to be inserted:

terret

Quadratic probing: terret is inserted into the hash table

Double hashing: terret is inserted into the hash table




------------------------------------------------------------

Please choose one of the following commands:

1- Insert

2- Delete

3- Find

4- FindPalindrome




5- ReverseString

6- Print

7- Exit

6




Quadratic probing:




0: epic

adventure
an
creative
civic
and
is



terret



Double hashing:




0: epic

adventure
an
creative
civic
and
is
terret



------------------------------------------------------------

Please choose one of the following commands:

1- Insert




2- Delete

3- Find

4- FindPalindrome

5- ReverseString

6- Print

7- Exit

3

Enter a string to be found:

story

story is not found in the hash table.




------------------------------------------------------------

Please choose one of the following commands:

1- Insert




2- Delete

3- Find

4- FindPalindrome

5- ReverseString

6- Print

7- Exit

3

Enter a string to be found:

terret

Quadratic probing: terret is found at location 16




Double hashing: terret is found at location 15




------------------------------------------------------------

Please choose one of the following commands:




1- Insert

2- Delete

3- Find

4- FindPalindrome

5- ReverseString

6- Print

7- Exit

4

Palindrome strings: civic terret




--------------------------------------------------------------------

Please choose one of the following commands:

1- Insert

2- Delete

3- Find

4- FindPalindrome




5- ReverseString

8- Print

9- Exit

5

Enter location of string you want to reverse:

1

There is no string at location 1 with Quadratic probing.




There is no string at location 1 with Double hashing.




--------------------------------------------------------------------

Please choose one of the following commands:

1- Insert

2- Delete

3- Find




4- FindPalindrome

5- ReverseString

10- Print

11- Exit

5

Enter location of string you want to reverse:

11

Quadratic probing: String “and” is changed to “dna”

Double hashing: String “and” is changed to “dna”




------------------------------------------------------------

Please choose one of the following commands:

1- Insert

2- Delete




3- Find

4- FindPalindrome

5- ReverseString

6- Print

7- Exit

3

Enter a string to be found:

and

Quadratic probing: “and” is present in reverse order at location 11.




Double hashing: “and” is present in reverse order at location 11.







--------------------------------------------------------------------

Please choose one of the following commands:

1- Insert

2- Delete




3- Find

4- FindPalindrome

5- ReverseString

6- Print

7- Exit

1

Enter string to be inserted:

computer




Rehashing…..




Quadratic probing:




an



terret
epic
adventure
civic
dna
creative
is
computer



Double hashing:




an
terret
epic



adventure
civic
dna
creative
is
computer



Please choose one of the following commands:

1-
Insert
2-
Delete
3-
Find
4-
FindPalindrome
5-
ReverseString
6-
Print
7-
Exit
7


Done!




Submission:




Follow the conventions below to facilitate grading:




Source Code




Place all your source files (*.cpp, *.hpp) and input files in a single folder with no subfolders.



Name your folder using the convention Lastname_LabX (e.g., Smith_Lab02).



Include a functioning Makefile inside the folder. (The makefile should also include the clean command.)



Verify that your code runs on Linux.



Compress using .zip, .rar, or .tar.gz.



Name your file using the convention Lastname_LabX (e.g., Smith_Lab02.zip).
Email




Use the following subject for your email: Lastname_LabX (e.g., Smith_Lab02).



Send you code to l290w868@ku.edu if you are in one of Lei’s sections or to dhwanipandya1401@ku.edu if you are in one of Dhwani’s sections.



Anytime you have a question about the lab, put the word question in the subject of the email.

More products