Perfect hash function

From Wikipedia, the free encyclopedia
Jump to: navigation, search

A perfect hash function for a set S is a hash function that maps distinct elements in S to a set of integers, with no collisions. A perfect hash function has many of the same applications as other hash functions, but with the advantage that no collision resolution has to be implemented. In mathematical terms, it is a total injective function.

Contents

Properties and uses [edit]

A perfect hash function for a specific set S that can be evaluated in constant time, and with values in a small range, can be found by a randomized algorithm in a number of operations that is proportional to the size of S.[1] The minimal size of the description of a perfect hash function depends on the range of its function values: The smaller the range, the more space is required[citation needed]. Any perfect hash functions suitable for use with a hash table require at least a number of bits that is proportional to the size of S.

A perfect hash function with values in a limited range can be used for efficient lookup operations, by placing keys from S (or other associated values) in a table indexed by the output of the function. Using a perfect hash function is best in situations where there is a frequently queried large set, S, which is seldom updated. Efficient solutions to performing updates are known as dynamic perfect hashing, but these methods are relatively complicated to implement. A simple alternative to perfect hashing, which also allows dynamic updates, is cuckoo hashing.

Minimal perfect hash function [edit]

A minimal perfect hash function is a perfect hash function that maps n keys to n consecutive integers—usually [0..n−1] or [1..n]. A more formal way of expressing this is: Let j and k be elements of some finite set K. F is a minimal perfect hash function iff F(j) =F(k) implies j=k (injectivity) and there exists an integer a such that the range of F is a..a+|K|−1. It has been proved that a general purpose minimal perfect hash scheme requires at least 1.44 bits/key.[2] However the smallest currently use around 2.5 bits/key.[citation needed]

A minimal perfect hash function F is order preserving if keys are given in some order a1, a2, ..., an and for any keys aj and ak, j<k implies F(aj)<F(ak).[3] Order-preserving minimal perfect hash functions require necessarily Ω(n log n) bits to be represented.[4]

A minimal perfect hash function F is monotone if it preserves the lexicographical order of the keys. Monotone minimal perfect hash functions can be represented in very little space.

See also [edit]

References [edit]

  1. ^ Fredman, M. L., Komlós, J., and Szemerédi, E. 1984. Storing a Sparse Table with 0(1) Worst Case Access Time. J. ACM 31, 3 (Jun. 1984), 538-544 http://portal.acm.org/citation.cfm?id=1884#
  2. ^ Djamal Belazzougui, Fabiano C. Botelho, Martin Dietzfelbinger (2009). Hash, displace, and compress (PDF). Springer Berlin / Heidelberg. Retrieved 2011-08-11. 
  3. ^ Jenkins, Bob (14 April 2009), "order-preserving minimal perfect hashing", in Black, Paul E., Dictionary of Algorithms and Data Structures, U.S. National Institute of Standards and Technology, retrieved 2013-03-05 
  4. ^ Fox, E. A.; Chen, Q. F.; Daoud, A. M.; Heath, L. S. (1990). "Order preserving minimal perfect hash functions and information retrieval". Proceedings of the 13th annual international ACM SIGIR conference on Research and development in information retrieval (ACM): 279–311. doi:10.1145/96749.98233. ISBN 0-89791-408-2. 

Further reading [edit]

External links [edit]