39 lines
999 B
Python
39 lines
999 B
Python
|
#!/usr/bin/env python
|
||
|
"""
|
||
|
This example shows how to use the function generate_hash.
|
||
|
|
||
|
generate_hash(kdic, Hash)
|
||
|
|
||
|
returns hash functions f1 and f2, and G for a perfect minimal hash.
|
||
|
Input is dictionary 'kdic' with the keys and desired hash values.
|
||
|
'Hash' is a random hash function generator, that means Hash(N) returns a
|
||
|
returns a random hash function which returns hash values from 0..N-1.
|
||
|
"""
|
||
|
|
||
|
import sys
|
||
|
import random, string
|
||
|
|
||
|
sys.path.append('..')
|
||
|
from perfect_hash import generate_hash
|
||
|
|
||
|
|
||
|
|
||
|
month = dict(zip('jan feb mar apr may jun jul aug sep oct mov dec'.split(),
|
||
|
range(1, 13)))
|
||
|
|
||
|
def mkRandHash(N):
|
||
|
"""
|
||
|
Return a random hash function which returns hash values from 0..N-1.
|
||
|
"""
|
||
|
junk = "".join(random.choice(string.letters + string.digits)
|
||
|
for i in xrange(10))
|
||
|
return lambda key: hash(junk + str(key)) % N
|
||
|
|
||
|
|
||
|
f1, f2, G = generate_hash(month, mkRandHash)
|
||
|
|
||
|
for k, h in month.items():
|
||
|
assert h == ( G[f1(k)] + G[f2(k)] ) % len(G)
|
||
|
|
||
|
print 'OK'
|