Download - Hash Table
![Page 1: Hash Table](https://reader031.vdocument.in/reader031/viewer/2022020117/56813b00550346895da39c79/html5/thumbnails/1.jpg)
Data Structures
![Page 2: Hash Table](https://reader031.vdocument.in/reader031/viewer/2022020117/56813b00550346895da39c79/html5/thumbnails/2.jpg)
Consider storing data for 100 employees by their Social Security Numbers (SSN) SSN range: 000000000 – 999999999
A fast search: SSN is index of an array E.g.
myItem is at position 123456789 myItem = myArray[123456789]
Characteristics Good--Efficiency of O(1) Bad-- Requires array of size 109, most of which is
unoccupied Can we have something that
Has efficiency of nearly O(1) and Requires reasonable amount of space
![Page 3: Hash Table](https://reader031.vdocument.in/reader031/viewer/2022020117/56813b00550346895da39c79/html5/thumbnails/3.jpg)
Keys (e.g., SSN) are “hashed” (mish-mashed) to another number, which can be used as index for a smaller array. E.g.,• item1 key: 1234568989 myArray[89] = item1• Item2 key: 1234567575 myArray[75] = item2• Item3 key: 3457892121 myArray[21] = item3• Item4 key: 9234572121 myArray[?] = item4
Last 2 cases: collision, when two keys hash to the same hash value
![Page 4: Hash Table](https://reader031.vdocument.in/reader031/viewer/2022020117/56813b00550346895da39c79/html5/thumbnails/4.jpg)
item1: 1234568989
item2: 1234567575
item3: 3457892121
item4: 9234572121
Item5: 7854387575
Item6: 5432192424
Item7: 3311222020
…
0
1
20
23
75
76
89
…
21
…
myTable
24
Ω
Ω
Ω
Ω
Ω
Ω
Ω
Ω
Ω
item7
item6
item4item3
item5item2
item1
…
Data Key Hashed Index
![Page 5: Hash Table](https://reader031.vdocument.in/reader031/viewer/2022020117/56813b00550346895da39c79/html5/thumbnails/5.jpg)
item1: 1234568989
item2: 1234567575
item3: 3457892121
item4: 9234572121
Item5: 7854387575
Item6: 5432192424
Item7: 3311222020
…
0
1
20
23
75
76
89
…
21
…
myTable
24
Data Key Hashed Index
Item 7
-1
-1
Item3
22 Item4
Item 6
-1
Item 2Item 5
Item 1
![Page 6: Hash Table](https://reader031.vdocument.in/reader031/viewer/2022020117/56813b00550346895da39c79/html5/thumbnails/6.jpg)
Given names as keys: amy tammy frank billy
Convert keys to array indices. Max size of array: 10 name(hashF1) integer (hashF2) index E.g.,
amyAscii(a) + Ascii(m) + Ascii(y) = 97 + 109 + 121 = 327
327 % 10 = 7 tammyAscii(t) + Ascii(a) + Ascii(m) + Ascii(m)
+ Ascii(y) = 116 + 97 + 109 + 109 + 121 = 552 552 % 10 = 2
…
0
1
2
6
8
10
…
myTable
7
Ω
Ω
Ω
Ω
Ω
Ω
Ω
tammy
amy
…
![Page 7: Hash Table](https://reader031.vdocument.in/reader031/viewer/2022020117/56813b00550346895da39c79/html5/thumbnails/7.jpg)
Given: key = 1234567 h(key) = key % 100 1234567 67 3785421 21
Given: key = beth h1(key) = ascii(b) + ascii(e) + ascii(t) +
ascii(h) = 98 + 121 + 116 + 104 = 419
h2(419) = 415 % 100 = 19 h(key) = h2(h1(key)) = 19 Thus, “beth” -> 19
![Page 8: Hash Table](https://reader031.vdocument.in/reader031/viewer/2022020117/56813b00550346895da39c79/html5/thumbnails/8.jpg)
void insert (elemType &item); Inserts item in the table,
bool remove (keyType key); Removes data item corresponding to key. Returns
true when successful; false, otherwise. bool search (keyType key);
Searches the table for item corresponding to key. Returns true when match found; false, otherwise.
elemType search(keyType key); Searches and return the value corresponding to
key book isEmpty(); void clear();
![Page 9: Hash Table](https://reader031.vdocument.in/reader031/viewer/2022020117/56813b00550346895da39c79/html5/thumbnails/9.jpg)
bool search (keyType key);1. hash(key) anIndex T(n) = c12. IF array[anIndex] is not empty THEN T(n) = c2 + c3
search the linked listELSE value is not presentEND IF
3. return true/false T(n) = c4
1. T(n) = c1 + c2 + c3 + c4O(1) almost
![Page 10: Hash Table](https://reader031.vdocument.in/reader031/viewer/2022020117/56813b00550346895da39c79/html5/thumbnails/10.jpg)
1. Describe the data structure to represent a hash table
2. Write a C++ code for the structure, to be included in the private section of the (hash) Table class.
![Page 11: Hash Table](https://reader031.vdocument.in/reader031/viewer/2022020117/56813b00550346895da39c79/html5/thumbnails/11.jpg)
0
1
8
7
2
3
4
5
6
9
Ω
Ω
Ω
Ω
Ω
Ω
ΩΩ
Ω
Ω
Array Struct
![Page 12: Hash Table](https://reader031.vdocument.in/reader031/viewer/2022020117/56813b00550346895da39c79/html5/thumbnails/12.jpg)
To represent a group of data elements of different types as a single unit
Contrast this with an array, whose elements must of the same type.
Is like a class, but every part is public by default. No operations is a struct.
![Page 13: Hash Table](https://reader031.vdocument.in/reader031/viewer/2022020117/56813b00550346895da39c79/html5/thumbnails/13.jpg)
Definition:
struct athlete_t { string name; int weight; // in kg int height; // in cm};
Usage:athlete_t ath;ath.name = “John”;ath.weight = 200;ath.height = 190;cout << ath.name << endl;cout << ath.weight << endl;cout << ath.height << endl;athlete_t team[MAX];team[0] = ath;
![Page 14: Hash Table](https://reader031.vdocument.in/reader031/viewer/2022020117/56813b00550346895da39c79/html5/thumbnails/14.jpg)
private: struct nodeType { elemType data; nodeType *next; };
static const int MAX = 10; nodeType* list[MAX];};
![Page 15: Hash Table](https://reader031.vdocument.in/reader031/viewer/2022020117/56813b00550346895da39c79/html5/thumbnails/15.jpg)
class Table {public: Table(); void insert(elemType item); bool remove(keyType key); bool retrieve(keyType key, elemType &item); void clear(); void print();private: ...};
![Page 16: Hash Table](https://reader031.vdocument.in/reader031/viewer/2022020117/56813b00550346895da39c79/html5/thumbnails/16.jpg)
1. Constructor1. What needs to be done in the
constructor?2. Write a C++ code to implement Table().
2. Insert1. What are the steps necessary to insert an
item into the Hash table?2. Write a C++ code to implement
insert(elemType item) in the Table class.