Learning materials

Hashing

On this page

Hashing is an algorithm to map an input value (key) to an output value. It is usually defined as a function with a single parameter and a return value. The mappings are usually expressed using arrows like string -> int, int -> int.

Use our Hash Table Collision & Load Factor Lab to compare separate chaining and linear probing, then watch the table resize.

Hash function

  • Domain of a hash function: The set of all possible inputs to a hash function
  • Range of a hash function: The set of all possible outputs of a hash function
  • Required properties
    • deterministic (required!)
    • uniform distribution
      • hash function that maps all possible input values (keys) with roughly equal probability to each possible output value (hash code)
      • ensures minimal collision
      • hard to guarantee and prove
  • Other properties (application specific)
    • variable length key to fixed length hash value
    • constant time computation $\Theta(1)$
    • squeeze a large domain to a smaller range
    • chance of collision
    • asymmetric
  • Wellknown examples: MD5, SHA-1, SHA-2
  • Make your own hash function

Applications

  • Hash table data structure
    • Hash Map (Map ADT, dictionary, key-value store)
    • Hash Set (Set ADT)
  • Fingerprinting
    • Short summary of a large data set
    • Checksum
    • Password management
  • Cryptography
  • Advanced data structures
    • Bloom filter
    • Cuckoo filter
    • Merkle tree (e.g. BitCoin)

Hashing Glossary

Hash Function
A function that maps a variable sized value to a fixed sized value.
Key (hashing)
The input value to the hash function.
Value (hashing)
A.k.a hash value, hash code or simply hash. The output of the hash function.
Key space / Domain (hashing)
The set of all possible keys.
Value space / Range (hashing)
The set of all possible values.
Collision (hashing)
Multiple distinct keys maps to a same output value.