Static hashing

From HandWiki

Static hashing is a form of hashing where lookups are performed on a finalized dictionary set (all objects in the dictionary are final and not changing).

Usage [1]

Application

Since static hashing requires that the database, its objects, and reference remain the same, its applications are limited. Databases which contain information which changes rarely are also eligible as it would only require a full rehash of the entire database on rare occasion. Examples of this include sets of words and definitions of specific languages, sets of significant data for an organization's personnel, etc.

Perfect hashing

Perfect hashing is a model of hashing in which any set of [math]\displaystyle{ n }[/math] elements can be stored in a hash table of equal size and can have lookups done in constant time. It was specifically discovered and discussed by Fredman, Komlos and Szemeredi (1984) and has therefore been nicknamed "FKS hashing".[2]

FKS hashing

FKS hashing makes use of a hash table with two levels in which the top level contains [math]\displaystyle{ n }[/math] buckets which each contain their own hash table. FKS hashing requires that if collisions occur they must do so only on the top level.

Implementation

The top level contains a randomly created hash function, [math]\displaystyle{ h(x) }[/math], which fits within the constraints of a Carter and Wegman hash function from universal hashing. Having done so the top level shall contain [math]\displaystyle{ n }[/math] buckets labeled [math]\displaystyle{ k_1, k_2, k_3, ..., k_n }[/math]. Following this pattern, all of the buckets hold a hash table of size [math]\displaystyle{ s_i }[/math] and a respective hash function [math]\displaystyle{ h_i(x) }[/math]. The hash function will be decided by setting [math]\displaystyle{ s_i }[/math] to [math]\displaystyle{ k_i^2 }[/math] and randomly going through functions until there are no collisions. This can be done in constant time.

Performance

Because there are [math]\displaystyle{ n \choose 2 }[/math] pairs of elements, of which have a probability of collision equal to [math]\displaystyle{ 1/n }[/math], FKS hashing can expect to have strictly less than [math]\displaystyle{ n/2 }[/math] collisions. Based on this fact and that each [math]\displaystyle{ h(x) }[/math] was selected so that the number of collisions would be at most [math]\displaystyle{ n/2 }[/math], the size of each table on the lower level will be no greater than [math]\displaystyle{ 2n }[/math].

See also

References

  1. Daniel Roche (2013). SI486D: Randomness in Computing, Hashing Unit. United States Naval Academy, Computer Science Department. http://www.usna.edu/Users/cs/roche/courses/s13si486d/u04/#static-and-perfect-hashing. 
  2. Michael Fredman; János Komlós; Endre Szemerédi (1984). Storing a Sparse Table with O(1) Worst Case Access Time. Journal of the ACM (Volume 31, Issue 3). http://dl.acm.org/citation.cfm?id=1884.