Data Structures
Consider storing data for 100 employees by their Social Security Numbers (SSN) SSN range: – A fast search: SSN is index of an array E.g. myItem is at position myItem = myArray[ ] Characteristics Good--Efficiency of O(1) Bad-- Requires array of size 10 9, 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: 89 myArray[89] = item1 Item2 key: 75 myArray[75] = item2 Item3 key: 21 myArray[21] = item3 Item4 key: 21 myArray[?] = item4 Last 2 cases: collision, when two keys hash to the same hash value
item1: 89 item2: 75 item3: 21 item4: 21 Item5: 75 Item6: 24 Item7: 20 … … 21 … myTable 24 Ω Ω Ω Ω Ω Ω Ω Ω Ω item7 item6 item4 item3 item5item2 item1 … Data KeyHashed Index
item1: 89 item2: 75 item3: 21 item4: 21 Item5: 75 Item6: 24 Item7: 20 … … 21 … myTable 24 Data KeyHashed Index Item 7 Item3 22 Item4 Item 6 Item 2 Item 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., amy Ascii(a) + Ascii(m) + Ascii(y) = = % 10 = 7 tammy Ascii(t) + Ascii(a) + Ascii(m) + Ascii(m) + Ascii(y) = = % 10 = 2 … … myTable 7 Ω Ω Ω Ω Ω Ω Ω tammy amy …
Given: key = h(key) = key % 100 67 21 Given: key = beth h 1 (key) = ascii(b) + ascii(e) + ascii(t) + ascii(h) = = 419 h 2 (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) = c1 2. IF array[anIndex] is not empty THEN T(n) = c2 + c3 search the linked list ELSE value is not present END IF 3. return true/false T(n) = c4 1. T(n) = c1 + c2 + c3 + c4 O(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.
Ω Ω Ω Ω Ω Ω Ω Ω Ω Ω ArrayStruct
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. Constructor 1. What needs to be done in the constructor? 2. Write a C++ code to implement Table(). 2. Insert 1. 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.