Linear hash
From Wikipedia, the free encyclopedia
Linear Hashing is a dynamic hash table algorithm invented by Witold Litwin (1980) [1], and later popularized by Paul Larson. Linear hashing allows for the expansion of the hash table one slot at a time. The frequent single slot expansion can very effectively control the length of the collision chain. The cost of hash table expansion is spread out across each hash table insertion operation, as opposed to be incurred all at once. [2] Therefore linear hashing is well suited for interactive applications.
Contents |
[edit] Algorithm Details
As usual, a hash function controls the address calculation of linear hashing. In linear hashing, the address calculation is always bounded by a size that is a power of two.
- address(level,key) = hash(key) mod (2level)
The 'split' variable controls the read operation, and the expansion operation.
A read operation would use address(level,key) if address(level,key) is greater than or equal to the 'split' variable. Otherwise, address(level+1,key) is used.
A linear hashing table expansion operation would consist of rehashing the entries at slot location indicated by the 'split' variable to the target slot location of address(level+1,key). The 'split' variable is incremented by 1 at the end of the expansion operation. If the 'split' variable reaches 2level, then the 'level' variable is incremented by 1, and the 'split' variable is reset to 0.
There is some flexibility in choosing how often the expansion operations are performed. One obvious choice is one expansion operation per insertion request. Another choice is to control the expansion with a programmer defined load factor.
The hash table array for linear hashing is usually implemented with a dynamic array algorithm.
[edit] Adoption in language systems
Griswold and Townsend [3] discussed the adoption of linear hashing in the Icon language. They discussed the implementation alternatives of dynamic array algorithm used in linear hashing, and presented performance comparisons using a list of Icon benchmark applications.
[edit] References
- ^ Litwin, Witold (1980), “Linear hashing: A new tool for file and table addressing”, Proc. 6th Conference on Very Large Databases: pp. 212-223, <http://www.cs.cmu.edu/afs/cs.cmu.edu/user/christos/www/courses/826-resources/PAPERS+BOOK/linear-hashing.PDF>
- ^ Larson, Per-Åke (April 1988), “Dynamic Hash Tables”, Communications of the ACM: pp. 446-457
- ^ Griswold, William G. & Townsend, Gregg M. (April 1993), “The Design and Implementation of Dynamic Hashing for Sets and Tables in Icon”, Software - Practice and Experience 23 (4): pp. 351-367, <http://citeseer.ist.psu.edu/griswold93design.html>