Download presentation
Presentation is loading. Please wait.
Published byOswald Pierce Modified over 9 years ago
1
Data Structures
2
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 10 9, most of which is unoccupied Can we have something that Has efficiency of nearly O(1) and Requires reasonable amount of space
3
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: 12345689 89 myArray[89] = item1 Item2 key: 12345675 75 myArray[75] = item2 Item3 key: 34578921 21 myArray[21] = item3 Item4 key: 92345721 21 myArray[?] = item4 Last 2 cases: collision, when two keys hash to the same hash value
4
item1: 12345689 89 item2: 12345675 75 item3: 34578921 21 item4: 92345721 21 Item5: 78543875 75 Item6: 54321924 24 Item7: 33112220 20 … 0 1 20 23 75 76 89 … 21 … myTable 24 Ω Ω Ω Ω Ω Ω Ω Ω Ω item7 item6 item4 item3 item5item2 item1 … Data KeyHashed Index
5
item1: 12345689 89 item2: 12345675 75 item3: 34578921 21 item4: 92345721 21 Item5: 78543875 75 Item6: 54321924 24 Item7: 33112220 20 … 0 1 20 23 75 76 89 … 21 … myTable 24 Data KeyHashed Index Item 7 Item3 22 Item4 Item 6 Item 2 Item 5 Item 1
6
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) = 97 + 109 + 121 = 327 327 % 10 = 7 tammy Ascii(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 …
7
Given: key = 1234567 h(key) = key % 100 1234567 67 3785421 21 Given: key = beth h 1 (key) = ascii(b) + ascii(e) + ascii(t) + ascii(h) = 98 + 121 + 116 + 104 = 419 h 2 (419) = 415 % 100 = 19 h(key) = h2(h1(key)) = 19 Thus, “beth” -> 19
8
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();
9
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
10
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.
11
0 1 8 7 2 3 4 5 6 9 Ω Ω Ω Ω Ω Ω Ω Ω Ω Ω ArrayStruct
12
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.
13
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;
14
private: struct nodeType { elemType data; nodeType *next; }; static const int MAX = 10; nodeType* list[MAX]; };
15
class Table { public: Table(); void insert(elemType item); bool remove(keyType key); bool retrieve(keyType key, elemType &item); void clear(); void print(); private:... };
16
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.
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.