Xem mẫu

  1. Skip List: Implementation S3 S2 34 S1 23 34 S0 12 23 34 45
  2. Lecture No.41 Data Structure Dr. Sohail Aslam
  3. Implementation: TowerNode head tail Tower Node 20 26 30 40 50 57 60  TowerNode will have array of next pointers.  Actual number of next pointers will be decided by the random procedure.  Define MAXLEVEL as an upper limit on number of levels in a node.
  4. Implementation: QuadNode  A quad-node stores: • item quad­node • link to the node before • link to the node after • link to the node below • link to the node above x  This will require copying the key (item) at different levels
  5. Skip Lists with Quad Nodes S3 S2 31 S1 23 31 34 64 S0 12 23 26 31 34 44 56 64 78
  6. Performance of Skip Lists  In a skip list with n items • The expected space used is proportional to n. • The expected search, insertion and deletion time is proportional to log n.  Skip lists are fast and simple to implement in practice
  7. Implementation 5: AVL tree  An AVL tree, ordered by key key entry  insert: a standard insert; (log n)  find: a standard find (without removing, of course); (log n) key entry key entry  remove: a standard remove; (log n) key entry and so on
  8. Anything better?  So far we have find, remove and insert where time varies between constant logn.  It would be nice to have all three as constant time operations!
  9. Implementation 6: Hashing  An array in which TableNodes are not stored key entry consecutively  Their place of storage is 4 calculated using the key and a hash function 10 hash  array  Key index function 123  Keys and entries are scattered throughout the array.
  10. Hashing  insert: calculate place of storage, insert key entry TableNode; (1)  find: calculate place of 4 storage, retrieve entry; (1) 10  remove: calculate place of storage, set it to null; (1) 123 All are constant time (1) !
  11. Hashing  We use an array of some fixed size T to hold the data. T is typically prime.  Each key is mapped into some number in the range 0 to T-1 using a hash function, which ideally should be efficient to compute.
  12. Example: fruits  Suppose our hash function 0 kiwi gave us the following 1 values: 2 banana   hashCode("apple") = 5 3 watermelon hashCode("watermelon") = 3 4 hashCode("grapes") = 8 hashCode("cantaloupe") = 7 5 apple hashCode("kiwi") = 0 6 mango hashCode("strawberry") = 9 7 cantaloupe hashCode("mango") = 6 hashCode("banana") = 2 8 grapes 9 strawberry
  13. Example  Store data in a table 0 kiwi 1 array:    table[5] = "apple" 2 banana  table[3] = "watermelon" 3 watermelon  table[8] = "grapes"  4  table[7] = "cantaloupe" 5 apple  table[0] = "kiwi"  table[9] = "strawberry"  6 mango  table[6] = "mango" 7 cantaloupe  table[2] = "banana" 8 grapes 9 strawberry
  14. Example  Associative array: 0 kiwi 1    table["apple"] 2 banana  table["watermelon"]   table["grapes"]  3 watermelon 4  table["cantaloupe"]   table["kiwi"]  5 apple  table["strawberry"]  6 mango  table["mango"]  7 cantaloupe  table["banana"] 8 grapes 9 strawberry
  15. Example Hash Functions  If the keys are strings the hash function is some function of the characters in the strings.  One possibility is to simply add the ASCII values of the characters: length 1 h( str ) str[i ] %TableSize i 0 Example : h( ABC ) (65 66 67)%TableSize
  16. Finding the hash function int hashCode( char* s ) { int i, sum; sum = 0; for(i=0; i < strlen(s); i++ ) sum = sum + s[i]; // ascii value return sum % TABLESIZE; }
  17. Example Hash Functions  Another possibility is to convert the string into some number in some arbitrary base b (b also might be a prime number): length 1 h( str ) str[i ] b i %T i 0 0 1 2 Example : h( ABC ) (65b 66b 67b )%T
  18. Example Hash Functions  If the keys are integers then key%T is generally a good hash function, unless the data has some undesirable features.  For example, if T = 10 and all keys end in zeros, then key%T = 0 for all keys.  In general, to avoid situations like this, T should be a prime number.
nguon tai.lieu . vn