Data Structures. Consider storing data for 100 employees by their Social Security Numbers (SSN) ...
-
Upload
oswald-pierce -
Category
Documents
-
view
221 -
download
0
Transcript of Data Structures. Consider storing data for 100 employees by their Social Security Numbers (SSN) ...
Data Structures
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
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
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
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
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
…
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
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();
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
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.
0
1
8
7
2
3
4
5
6
9
Ω
Ω
Ω
Ω
Ω
Ω
ΩΩ
Ω
Ω
Array Struct
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.
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;
private: struct nodeType { elemType data; nodeType *next; };
static const int MAX = 10; nodeType* list[MAX];};
class Table {public: Table(); void insert(elemType item); bool remove(keyType key); bool retrieve(keyType key, elemType &item); void clear(); void print();private: ...};
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.