public class PerfectHash
extends java.lang.Object
Generating the hash function takes about 1 second per million keys for both perfect hash and minimal perfect hash.
The algorithm is recursive: sets that contain no or only one entry are not processed as no conflicts are possible. Sets that contain between 2 and 16 entries, up to 16 hash functions are tested to check if they can store the data without conflict. If no function was found, the same is tested on a larger bucket (except for the minimal perfect hash). If no hash function was found, and for larger buckets, the bucket is split into a number of smaller buckets (up to 32).
At the end of the generation process, the data is compressed using a general purpose compression tool (Deflate / Huffman coding). The uncompressed data is around 1.52 bits per key (perfect hash) and 3.72 (minimal perfect hash).
Please also note the MinimalPerfectHash class, which uses less space per key.
| Constructor and Description |
|---|
PerfectHash(byte[] data)
Create a hash object to convert keys to hashes.
|
| Modifier and Type | Method and Description |
|---|---|
static byte[] |
generate(java.util.Set<java.lang.Integer> list,
boolean minimal)
Generate the perfect hash function data from the given set of integers.
|
int |
get(int x)
Calculate the hash from the key.
|
public PerfectHash(byte[] data)
data - the data returned by the generate methodpublic int get(int x)
x - the keypublic static byte[] generate(java.util.Set<java.lang.Integer> list,
boolean minimal)
list - the setminimal - whether the perfect hash function needs to be minimal