cs 225
play

CS 225 Data Structures Oc October 26 26 Ha Hashing G G Carl - PowerPoint PPT Presentation

CS 225 Data Structures Oc October 26 26 Ha Hashing G G Carl Evans What if ( ! ) is not fast enough? Do you feel lucky? A H A Hash T Table b based D Dictionary Client Code: 1 Dictionary<KeyType,


  1. CS 225 Data Structures Oc October 26 26 – Ha Hashing G G Carl Evans

  2. What if 𝑃(𝑚𝑝𝑕 ! 𝑜) is not fast enough? Do you feel lucky?

  3. A H A Hash T Table b based D Dictionary Client Code: 1 Dictionary<KeyType, ValueType> d; 2 d[k] = v; A Hash Table consists of three things: 1. A hash function, f(k) 2. An array 3. Something to handle chaos when it occurs!

  4. A P A Perf rfect H Hash F Function (Angrave, CS 241) Key Value (Beckman, CS 421) (Challen, CS 125) Hash function (Davis, CS 101) (Evans, CS 126) (Fagen-Ulmschneider, CS 107) (Gunter, CS 422) (Herman, CS 233)

  5. Ha Hash h Func Function Our hash function consists of two parts: • A hash : • A compression: Choosing a good hash function is tricky… • Don’t create your own (yet*) • Very smart people have created very bad hash functions

  6. Ha Hash h Func Function Characteristics of a good hash function: 1. Computation Time: 2. Deterministic: 3. Satisfy the SUHA:

  7. Gen Gener eral al Purpose e Has ash Fu Functi tion Keyspaces … Easy to create if: |KeySpace| N ~

  8. Gen Gener eral al Purpose e Has ash Fu Functi tion Keyspaces … Easy to create if: |KeySpace| N ~ Difficult to Create: …

  9. Gen Gener eral al Purpose e Has ash Fu Functi tion Keyspaces … Easy to create if: |KeySpace| N ~ Difficult to Create: …

  10. Ha Hash h Func Function In CS 225, we focus on general purpose hash functions. Other hash functions exists with different properties (eg: cryptographic hash functions)

  11. (Example of open hashing) Collision Col on H Handling: Se : Separate Ch Chaining S = { 16, 8, 4, 13, 29, 11, 22 } |S| = n h(k) = k % 7 |Array| = N 0 1 2 3 4 5 6 Worst Case SUHA Insert Remove/Find

  12. (Example of closed hashing) Collision Col on H Handling: P : Prob obe-ba base sed d Ha Hashi shing ng S = { 16, 8, 4, 13, 29, 11, 22 } |S| = n h(k) = k % 7 |Array| = N 0 1 2 3 4 5 6

  13. (Example of closed hashing) Col Collision on H Handling: Li : Linear P r Prob obing S = { 16, 8, 4, 13, 29, 11, 22 } |S| = n h(k) = k % 7 |Array| = N Try h(k) = (k + 0) % 7, if full… 0 Try h(k) = (k + 1) % 7, if full… 1 Try h(k) = (k + 2) % 7, if full… 2 Try … 3 4 5 6 Worst Case SUHA Insert Remove/Find

  14. A P A Problem w w/ L / Linear P r Probing Primary clustering: Description: Remedy:

  15. (Example of closed hashing) Collision Col on H Handling: D : Dou ouble h hashing S = { 16, 8, 4, 13, 29, 11, 22 } |S| = n h(k) = k % 7 |Array| = N Try h(k) = (k + 0*h 2 (k)) % 7, if full… 0 Try h(k) = (k + 1*h 2 (k)) % 7, if full… 1 Try h(k) = (k + 2*h 2 (k)) % 7, if full… 2 Try … 3 4 h(k, i) = (h 1 (k) + i*h 2 (k)) % 7 5 6

  16. Ru Running T Times The expected number of probes for find(key) under SUHA Linear Probing: (Don’t memorize these • Successful: ½(1 + 1/(1-α)) equations, no need.) • Unsuccessful: ½(1 + 1/(1-α)) 2 Instead, observe: Double Hashing: • Successful: 1/α * ln(1/(1-α)) - As α increases: • Unsuccessful: 1/(1-α) Separate Chaining: - If α is constant: • Successful: 1 + α/2 • Unsuccessful: 1 + α

  17. Ru Running T Times The expected number of probes for find(key) under SUHA Linear Probing: • Successful: ½(1 + 1/(1-α)) • Unsuccessful: ½(1 + 1/(1-α)) 2 Double Hashing: • Successful: 1/α * ln(1/(1-α)) • Unsuccessful: 1/(1-α)

  18. Re ReHashing What if the array fills?

  19. Which collision resolution strategy is better? • Big Records: • Structure Speed: What structure do hash tables replace? What constraint exists on hashing that doesn’t exist with BSTs? Why talk about BSTs at all?

  20. Ru Running T Times Hash Table AVL Linked List Amortized: Find Worst Case: Amortized: Insert Worst Case: Storage Space

  21. st std da data struc uctur ures std::map

  22. st std da data struc uctur ures std::map ::operator[] ::insert ::erase ::lower_bound(key) è Iterator to first element ≤ key ::upper_bound(key) è Iterator to first element > key

  23. st std da data struc uctur ures std::unordered_map ::operator[] ::insert ::erase ::lower_bound(key) è Iterator to first element ≤ key ::upper_bound(key) è Iterator to first element > key

  24. st std da data struc uctur ures std::unordered_map ::operator[] ::insert ::erase ::lower_bound(key) è Iterator to first element ≤ key ::upper_bound(key) è Iterator to first element > key ::load_factor() ::max_load_factor(ml) è Sets the max load factor

Recommend


More recommend